mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-13 09:43:05 +02:00
Compare commits
245
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0b7183849 | ||
|
|
cea0d0e3f8 | ||
|
|
a4c66b4aff | ||
|
|
56a9bba86b | ||
|
|
1dab571e12 | ||
|
|
93f7328a3b | ||
|
|
0e222a9c50 | ||
|
|
d1125d1571 | ||
|
|
550413c6b1 | ||
|
|
b4537796a2 | ||
|
|
4c0fbc5f0e | ||
|
|
d0a9511ff7 | ||
|
|
262476404e | ||
|
|
9f9906d423 | ||
|
|
0d616266ff | ||
|
|
6b282b5344 | ||
|
|
19fd3ec35d | ||
|
|
324d54683c | ||
|
|
0030034418 | ||
|
|
fb7be79e86 | ||
|
|
5db8135dd5 | ||
|
|
2107d23209 | ||
|
|
77f4b0fc5f | ||
|
|
1642dc97ca | ||
|
|
2b59031896 | ||
|
|
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
|
# NixOS Configuration
|
||||||

|

|
||||||
|
|||||||
+206
-66
@@ -11,11 +11,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779508871,
|
"lastModified": 1781239472,
|
||||||
"narHash": "sha256-SFl2je8b423f/tIy0RTgCrWQUJiyFsAZp1Y0cccXqio=",
|
"narHash": "sha256-WFL8jZMWNH1tx3UwaJ9aa9NN25uOEJ9mbKPRNQJY/xM=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "cli",
|
"repo": "cli",
|
||||||
"rev": "7f300626704b7a86fe838ab58df654fa99779613",
|
"rev": "3f3229aed4f36752a02fd870fd6cad94bd76555f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -27,17 +27,18 @@
|
|||||||
"caelestia-shell": {
|
"caelestia-shell": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caelestia-cli": "caelestia-cli",
|
"caelestia-cli": "caelestia-cli",
|
||||||
|
"m3shapes": "m3shapes",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs-unstable"
|
"nixpkgs-unstable"
|
||||||
],
|
],
|
||||||
"quickshell": "quickshell"
|
"quickshell": "quickshell"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779591587,
|
"lastModified": 1781408632,
|
||||||
"narHash": "sha256-Ud83/zsmDSHcqQ64MRiQ7SnGkUVIpRzqwqBBU65DGXY=",
|
"narHash": "sha256-kYVf3Jye4UhyBrtubYcSrmVyFv9uqOY2JvjmElFiZHE=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "shell",
|
"repo": "shell",
|
||||||
"rev": "2f7ab5e4140d9188185f6c3164e428c1eeda1fe6",
|
"rev": "f86c359cd90530bacc800e94e35ffbebecd3f58f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -46,6 +47,26 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1781152676,
|
||||||
|
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
@@ -53,15 +74,31 @@
|
|||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778716662,
|
"lastModified": 1778716662,
|
||||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
"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": {
|
"original": {
|
||||||
"owner": "hercules-ci",
|
"type": "tarball",
|
||||||
"repo": "flake-parts",
|
"url": "https://flakehub.com/f/hercules-ci/flake-parts/%2A"
|
||||||
"type": "github"
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"revCount": 102,
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://api.flakehub.com/f/pinned/numtide/flake-utils/0.1.102%2Brev-11707dc2f618dd54ca8739b309ec4fc024de578b/0193276d-5b8f-7dbc-acf1-41cb7b54ad2e/source.tar.gz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://flakehub.com/f/numtide/flake-utils/%2A"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
@@ -71,16 +108,16 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779506708,
|
"lastModified": 1781319724,
|
||||||
"narHash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=",
|
"narHash": "sha256-ZGuxexEMo4Xv28KJ0dX/m/PHN4oZIOnxHZpNTyrvx4M=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f",
|
"rev": "8355f0a16b2dbb06a97959a918af5b239bbe05ae",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-25.11",
|
"ref": "release-26.05",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -100,52 +137,58 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"microPlugins-vivify": {
|
"m3shapes": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1770382657,
|
"lastModified": 1781017666,
|
||||||
"narHash": "sha256-yWmIgT90mC9PhzyH/itDbRMmRTiZiwW+Yo0dsHW7ni8=",
|
"narHash": "sha256-kfHyzZaPHgqZML48OA+5JwBOsLdQJ2ci/aGPShvUB4Y=",
|
||||||
"ref": "refs/heads/main",
|
"owner": "soramanew",
|
||||||
"rev": "3c5cb25facf3fc4143bfea9323a60eda65ef8485",
|
"repo": "m3shapes",
|
||||||
"revCount": 8,
|
"rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
|
||||||
"type": "git",
|
|
||||||
"url": "https://codeberg.org/gibbert/micro-vivify"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://codeberg.org/gibbert/micro-vivify"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixos-grub-themes": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1769794759,
|
|
||||||
"narHash": "sha256-1doG74WkbtUpawduk9f8szyzWsw3Liblrh2z+2jQnw4=",
|
|
||||||
"owner": "jeslie0",
|
|
||||||
"repo": "nixos-grub-themes",
|
|
||||||
"rev": "5e75f9b3ea9061dca6c53d34e166e08bf9ebc7c7",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "jeslie0",
|
"owner": "soramanew",
|
||||||
"repo": "nixos-grub-themes",
|
"repo": "m3shapes",
|
||||||
|
"rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-git-cherry-picker": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 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"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1702151865,
|
"lastModified": 1781216227,
|
||||||
"narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=",
|
"narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "666fc80e7b2afb570462423cb0e1cf1a3a34fedd",
|
"rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-26.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -165,13 +208,36 @@
|
|||||||
"type": "github"
|
"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": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779536132,
|
"lastModified": 1781328464,
|
||||||
"narHash": "sha256-q+fF42iv/geEbHfgSzy3tS0FF/EyD6XTZ98E6yxiBO8=",
|
"narHash": "sha256-j9uBlHI0eJ9zWU9IlF6SlBBPdeJu30hcvar31IRKHpw=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "3d8f0f3f72a6cd4d93d0ad13203f2ea1cb7e1456",
|
"rev": "5a722a7155bfc9fbe657f28d26b71860d95324bc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -181,19 +247,50 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"notewrapper": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
]
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779102034,
|
"lastModified": 1780908812,
|
||||||
"narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=",
|
"narHash": "sha256-syxEJP0NNgVZYHp/zRVuz32VYf+ULD9itZk7V06SCos=",
|
||||||
"owner": "nixos",
|
"owner": "tomasriveral",
|
||||||
"repo": "nixpkgs",
|
"repo": "notewrapper",
|
||||||
"rev": "687f05a9184cad4eaf905c48b63649e3a86f5433",
|
"rev": "e670ef935f0dd87dc8a8c6982147a9b8dce7565e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "tomasriveral",
|
||||||
"ref": "nixos-25.11",
|
"repo": "notewrapper",
|
||||||
"repo": "nixpkgs",
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patent": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
],
|
||||||
|
"rust-overlay": "rust-overlay"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1781158593,
|
||||||
|
"narHash": "sha256-zxlheX4o1MK00dkYzoXm7Srj5SD9iOCSp4N7f1iShr0=",
|
||||||
|
"owner": "r14dd",
|
||||||
|
"repo": "patent",
|
||||||
|
"rev": "68772d068088d62a030619090959165af5e71ed1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "r14dd",
|
||||||
|
"repo": "patent",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -205,11 +302,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779430452,
|
"lastModified": 1781053488,
|
||||||
"narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=",
|
"narHash": "sha256-P4WEBaKgl8flRckHxXGHzT0potPvB3x8ZFIp9gLEAMY=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00",
|
"rev": "d99d87d5e5ec4e696815348692fdaaf0b6be1b2c",
|
||||||
"revCount": 819,
|
"revCount": 822,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
},
|
},
|
||||||
@@ -221,13 +318,56 @@
|
|||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caelestia-shell": "caelestia-shell",
|
"caelestia-shell": "caelestia-shell",
|
||||||
|
"disko": "disko",
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"import-tree": "import-tree",
|
"import-tree": "import-tree",
|
||||||
"microPlugins-vivify": "microPlugins-vivify",
|
"nix-git-cherry-picker": "nix-git-cherry-picker",
|
||||||
"nixos-grub-themes": "nixos-grub-themes",
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs-master": [
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
"nixpkgs-unstable"
|
||||||
|
],
|
||||||
|
"nixpkgs-notifier": "nixpkgs-notifier",
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
|
"notewrapper": "notewrapper",
|
||||||
|
"patent": "patent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"patent",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1780888890,
|
||||||
|
"narHash": "sha256-MUQPFiskEENaJ2N82TRIqpKlHXGXJJkPfKH6W788oQo=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "7d5f8d75fc195a236b46633d7679139698aeb35f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,24 +2,59 @@
|
|||||||
description = "Nixos config flake";
|
description = "Nixos config flake";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # used for some packages
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # used for some packages
|
||||||
nixos-grub-themes.url = "github:jeslie0/nixos-grub-themes";
|
|
||||||
|
# Only uncomment when needed. This uses a lot of space and compute ressources for sometimes not that much. If not used, make it follow unstable
|
||||||
|
nixpkgs-master.follows = "nixpkgs-unstable";
|
||||||
|
#nixpkgs-master.url = "github:nixos/nixpkgs/master"; # used with precaution as they are untested and not cached
|
||||||
|
|
||||||
|
# This one is only used when testing some packaging. You must change the path to the correct nixpkgs clone
|
||||||
|
#nixpkgs-local.url = "path:/home/tomasr/devel/fugit2-gpgme";
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/release-25.11";
|
url = "github:nix-community/home-manager/release-26.05";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
flake-utils = {
|
||||||
|
url = "https://flakehub.com/f/numtide/flake-utils/*"; # flakehub caches results
|
||||||
|
};
|
||||||
|
notewrapper = {
|
||||||
|
url = "github:tomasriveral/notewrapper";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
};
|
||||||
|
nixpkgs-notifier = {
|
||||||
|
url = "github:tomasriveral/nixpkgs-notifier";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
nix-git-cherry-picker = {
|
||||||
|
url = "github:tomasriveral/nix-git-cherry-picker";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
patent = {
|
||||||
|
url = "github:r14dd/patent";
|
||||||
|
inputs.flake-utils.follows = "flake-utils";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
};
|
||||||
caelestia-shell = {
|
caelestia-shell = {
|
||||||
# based on quickshell. See https://github.com/caelestia-dots/shell
|
# based on quickshell. See https://github.com/caelestia-dots/shell
|
||||||
url = "github:caelestia-dots/shell";
|
url = "github:caelestia-dots/shell";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
microPlugins-vivify = {
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
microPlugins-vivify = {
|
||||||
url = "git+https://codeberg.org/gibbert/micro-vivify";
|
url = "git+https://codeberg.org/gibbert/micro-vivify";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
flake-parts = {
|
flake-parts = {
|
||||||
url = "github:hercules-ci/flake-parts";
|
url = "https://flakehub.com/f/hercules-ci/flake-parts/*"; # flakehub caches results
|
||||||
};
|
};
|
||||||
import-tree.url = "github:vic/import-tree"; # imports ./modules recursively
|
import-tree.url = "github:vic/import-tree"; # imports ./modules recursively
|
||||||
};
|
};
|
||||||
@@ -30,8 +65,13 @@
|
|||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
unfreePkgs = [
|
unfreePkgs = [
|
||||||
"hplip"
|
"hplip"
|
||||||
"vivify.vim"
|
"nvidia-x11"
|
||||||
|
"nvidia-settings"
|
||||||
|
"steam"
|
||||||
|
"steam-unwrapped"
|
||||||
"cheatsheet.nvim"
|
"cheatsheet.nvim"
|
||||||
|
"zoom-us"
|
||||||
|
"zoom"
|
||||||
];
|
];
|
||||||
mkUnfreePredicate = pkg:
|
mkUnfreePredicate = pkg:
|
||||||
builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs;
|
builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs;
|
||||||
@@ -42,8 +82,11 @@
|
|||||||
};
|
};
|
||||||
pkgs = mkPkgs inputs.nixpkgs;
|
pkgs = mkPkgs inputs.nixpkgs;
|
||||||
pkgs-unstable = mkPkgs inputs.nixpkgs-unstable;
|
pkgs-unstable = mkPkgs inputs.nixpkgs-unstable;
|
||||||
|
pkgs-local = mkPkgs inputs.nixpkgs-unstable;
|
||||||
|
#pkgs-local = mkPkgs inputs.nixpkgs-local;
|
||||||
|
pkgs-master = mkPkgs inputs.nixpkgs-master;
|
||||||
in {
|
in {
|
||||||
inherit pkgs pkgs-unstable;
|
inherit pkgs pkgs-unstable pkgs-local pkgs-master;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
// (inputs.import-tree ./modules));
|
// (inputs.import-tree ./modules));
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ _: {
|
|||||||
# we enable system wide with nixpkgs because it offers some addon configuration. We just use this for some config
|
# we enable system wide with nixpkgs because it offers some addon configuration. We just use this for some config
|
||||||
#enable = true;
|
#enable = true;
|
||||||
theme = "dark";
|
theme = "dark";
|
||||||
sync = {
|
profiles."User 1".sync = {
|
||||||
autoSync = true;
|
autoSync = true;
|
||||||
autoSyncMediaMinutes = 10;
|
autoSyncMediaMinutes = 10;
|
||||||
syncMedia = true;
|
syncMedia = true;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
chromium # used only to flash the firmware on my framework laptop 16 (keyboard.frame.work) as only chromium based browser support webHID.
|
chromium # used only to flash the firmware on my framework laptop 16 (keyboard.frame.work) as only chromium based browser support webHID.
|
||||||
pkgs-unstable.tor-browser
|
pkgs-unstable.tor-browser
|
||||||
self.packages.${pkgs.system}.custom-librewolfprofiles
|
self.packages.${pkgs.system}.custom-browserprofiles
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.homeModules.librewolf = _: {
|
flake.homeModules.librewolf = _: {
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
};
|
};
|
||||||
"uBlock0@raymondhill.net" = {
|
"uBlock0@raymondhill.net" = {
|
||||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||||
installation_mode = "force_installed";
|
installation_mode = "blocked";
|
||||||
};
|
};
|
||||||
"{08d5243b-4236-4a27-984b-1ded22ce01c3}" = {
|
"{08d5243b-4236-4a27-984b-1ded22ce01c3}" = {
|
||||||
install_url = "https://addons.mozilla.org/firefox/downloads/file/3729287/gruvboxgruvboxgruvboxgruvboxgr-1.0.xpi";
|
install_url = "https://addons.mozilla.org/firefox/downloads/file/3729287/gruvboxgruvboxgruvboxgruvboxgr-1.0.xpi";
|
||||||
@@ -160,6 +160,14 @@
|
|||||||
install_url = "https://addons.mozilla.org/firefox/downloads/file/4749958/bitwarden_password_manager-latest.xpi";
|
install_url = "https://addons.mozilla.org/firefox/downloads/file/4749958/bitwarden_password_manager-latest.xpi";
|
||||||
installation_mode = "force_installed";
|
installation_mode = "force_installed";
|
||||||
};
|
};
|
||||||
|
"@crw-extension-firefox" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/file/4790089/consumer_rights_wiki-latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
"archivebox@tjhorner.dev" = {
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/file/4820668/archivebox_exporter-latest.xpi";
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
DisableTelemetry = true;
|
DisableTelemetry = true;
|
||||||
DisableFirefoxStudies = true;
|
DisableFirefoxStudies = true;
|
||||||
@@ -304,6 +312,12 @@
|
|||||||
bookmarks = {
|
bookmarks = {
|
||||||
force = true;
|
force = true;
|
||||||
settings = [
|
settings = [
|
||||||
|
{
|
||||||
|
name = "Nixpkgs PRs";
|
||||||
|
tags = ["nixpkgs" "PR" "github"];
|
||||||
|
keyword = "nixpkgs prs";
|
||||||
|
url = "https://github.com/NixOS/nixpkgs/pulls";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "Nixos Config";
|
name = "Nixos Config";
|
||||||
tags = ["github"];
|
tags = ["github"];
|
||||||
@@ -334,18 +348,60 @@
|
|||||||
keyword = "nixpkgs tracker";
|
keyword = "nixpkgs tracker";
|
||||||
url = "https://nixpk.gs/pr-tracker.html";
|
url = "https://nixpk.gs/pr-tracker.html";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
name = "fahrlehrer";
|
|
||||||
tags = ["theorie" "fahrlehrer" "conduite"];
|
|
||||||
keyword = "fahrlehrer24";
|
|
||||||
url = "https://app.fahrlehrer24.ch/";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
name = "cogito";
|
name = "cogito";
|
||||||
tags = ["cogito" "esprit" "critique"];
|
tags = ["cogito" "esprit" "critique"];
|
||||||
keyword = "Cogito l'Esprit critique";
|
keyword = "Cogito l'Esprit critique";
|
||||||
url = "https://app.cogito.fr";
|
url = "https://app.cogito.fr";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "EPFL email";
|
||||||
|
tags = ["mail" "outlook" "epfl"];
|
||||||
|
keyword = "EPFL email";
|
||||||
|
url = "https://outlook.office.com/mail";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "nixpkgs' failing and orphan packages";
|
||||||
|
tags = ["nixpkgs" "fail" "orphan" "ZH" "zero hydra failure"];
|
||||||
|
keyword = "Zero hydra failure orphan packages";
|
||||||
|
url = "https://zh.fail/failed/by-maintainer/_.html";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "NixOS Manual - Unstable";
|
||||||
|
tags = ["nixos" "manual" "unstable"];
|
||||||
|
keyword = "NixOS manual";
|
||||||
|
url = "https://nixos.org/manual/nixos/unstable/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nixpgks Reference Manual - Unstable";
|
||||||
|
tags = ["nixpkgs" "manual" "reference" "unstable"];
|
||||||
|
keyword = "nixpkgs reference manual";
|
||||||
|
url = "https://nixos.org/manual/nixpkgs/unstable/";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nix Reference Manual - 2.34.";
|
||||||
|
tags = ["nix" "manual" "reference" "2.34"];
|
||||||
|
keyword = "nix reference manual";
|
||||||
|
url = "https://nix.dev/manual/nix/2.34/nix-2.34.html";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Disposable temporary email";
|
||||||
|
tags = ["privacy" "email" "temporary"];
|
||||||
|
keyword = "disposable temporary email";
|
||||||
|
url = "https://temp-mail.org";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "nix-update-script Rryan-tm logs";
|
||||||
|
tags = ["nixpkgs" "nix" "log" "rryan-tm"];
|
||||||
|
keyword = "rryan-tm logs";
|
||||||
|
url = "https://nixpkgs-update-logs.nix-community.org";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "Nix function search";
|
||||||
|
tags = ["nixpkgs" "nix" "search"];
|
||||||
|
keyword = "nix function search";
|
||||||
|
url = "https://noogle.dev";
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
search = {
|
search = {
|
||||||
@@ -582,6 +638,23 @@
|
|||||||
# };
|
# };
|
||||||
#};
|
#};
|
||||||
};
|
};
|
||||||
|
bookmarks = {
|
||||||
|
force = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
name = "Disposable temporary email";
|
||||||
|
tags = ["privacy" "email" "temporary"];
|
||||||
|
keyword = "disposable temporary email";
|
||||||
|
url = "https://temp-mail.org";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "r/Piracy megathread";
|
||||||
|
tags = ["piracy" "megathread" "reddit"];
|
||||||
|
keyword = "piracy megathread";
|
||||||
|
url = "https://old.reddit.com/r/Piracy/wiki/megathread";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
search = {
|
search = {
|
||||||
force = true;
|
force = true;
|
||||||
default = "quant";
|
default = "quant";
|
||||||
@@ -643,6 +716,14 @@
|
|||||||
];
|
];
|
||||||
definedAliases = ["on"];
|
definedAliases = ["on"];
|
||||||
};
|
};
|
||||||
|
"ProtonDB" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://www.protondb.com/search?q={searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
definedAliases = ["pr"];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,35 @@
|
|||||||
quickshell # we have it but adding it there solves "WARN qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: App info not found for 'org.quickshell'")"
|
quickshell # we have it but adding it there solves "WARN qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: App info not found for 'org.quickshell'")"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
flake.homeModules.caelestia-desktop = _: {
|
||||||
|
# for some reason nvidia drivers or I don't know what break the lock. (activate even when use, crash, etc.)
|
||||||
|
programs.caelestia.settings.general.idle = {
|
||||||
|
lockBeforeSleep = false;
|
||||||
|
inhibitWhenAudio = true;
|
||||||
|
timeouts = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
flake.homeModules.caelestia-laptop = _: {
|
||||||
|
programs.caelestia.settings.general.idle = {
|
||||||
|
lockBeforeSleep = true;
|
||||||
|
inhibitWhenAudio = true;
|
||||||
|
timeouts = [
|
||||||
|
{
|
||||||
|
timeout = 180;
|
||||||
|
idleAction = "lock";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 300;
|
||||||
|
idleAction = "dpms off"; # what's that?
|
||||||
|
returnAction = "dpms on";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 600;
|
||||||
|
idleAction = ["systemctl" "suspend-then-hibernate"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
flake.homeModules.caelestia = _: let
|
flake.homeModules.caelestia = _: let
|
||||||
sisyphe = ../../assets/sisyphe.gif;
|
sisyphe = ../../assets/sisyphe.gif;
|
||||||
pepe-music = ../../assets/pepe-music.gif;
|
pepe-music = ../../assets/pepe-music.gif;
|
||||||
@@ -101,25 +130,6 @@
|
|||||||
];
|
];
|
||||||
criticalLevel = 3;
|
criticalLevel = 3;
|
||||||
};
|
};
|
||||||
idle = {
|
|
||||||
lockBeforeSleep = true;
|
|
||||||
inhibitWhenAudio = true;
|
|
||||||
timeouts = [
|
|
||||||
{
|
|
||||||
timeout = 180;
|
|
||||||
idleAction = "lock";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
timeout = 300;
|
|
||||||
idleAction = "dpms off"; # what's that?
|
|
||||||
returnAction = "dpms on";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
timeout = 600;
|
|
||||||
idleAction = ["systemctl" "suspend-then-hibernate"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
background = {
|
background = {
|
||||||
desktopClock = {
|
desktopClock = {
|
||||||
|
|||||||
@@ -5,5 +5,9 @@ _: {
|
|||||||
supertuxkart # fuck mariokart
|
supertuxkart # fuck mariokart
|
||||||
# my favorite italian plumber is free software
|
# my favorite italian plumber is free software
|
||||||
];
|
];
|
||||||
|
programs.steam = {
|
||||||
|
enable = true;
|
||||||
|
protontricks.enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -2,9 +2,11 @@ _: {
|
|||||||
flake.homeModules.git = _: {
|
flake.homeModules.git = _: {
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
/*
|
||||||
|
settings = {
|
||||||
init.defaultBranch = "main";
|
init.defaultBranch = "main";
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
programs.gh = {
|
programs.gh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
swww #wallpaper daemon
|
awww #wallpaper daemon
|
||||||
gruvbox-gtk-theme
|
gruvbox-gtk-theme
|
||||||
hyprcursor
|
hyprcursor
|
||||||
capitaine-cursors-themed # cursor theme
|
capitaine-cursors-themed # cursor theme
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
self.packages.${pkgs.system}.custom-dontkillsteam # kill app (if not steam or tomato-c
|
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
|
self.packages.${pkgs.system}.custom-killall # kill all windows except focused window
|
||||||
xdg-utils
|
xdg-utils
|
||||||
home-manager
|
|
||||||
];
|
];
|
||||||
# enable hyprland WM
|
# enable hyprland WM
|
||||||
programs.hyprland = {
|
programs.hyprland = {
|
||||||
@@ -42,12 +41,32 @@
|
|||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
exec-once = [
|
exec-once = [
|
||||||
"qtbatticon" # custom battery tray
|
"qtbatticon" # custom battery tray
|
||||||
|
"nixpkgs-notifier listen" # tracks PR merge in nixos-unstable
|
||||||
];
|
];
|
||||||
monitor = [
|
monitor = [
|
||||||
"eDP-1, highres@highrr, 0x0, 1"
|
"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
|
flake.homeModules.hyprland = {pkgs-unstable, ...}: let
|
||||||
wallpaper = ../../assets/wallpaper1.jpg;
|
wallpaper = ../../assets/wallpaper1.jpg;
|
||||||
in {
|
in {
|
||||||
@@ -58,15 +77,16 @@
|
|||||||
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
wayland.windowManager.hyprland.plugins = [
|
wayland.windowManager.hyprland.plugins = [
|
||||||
#pkgs-unstable.hyprlandPlugins.hyprspace # currently broken
|
#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 = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
"$mod" = "SUPER";
|
"$mod" = "SUPER";
|
||||||
"$term" = "kitty";
|
"$term" = "kitty";
|
||||||
"$editor" = "nvim";
|
"$editor" = "nvim";
|
||||||
"$notes" = "kitty --class \"custom-obsidianvaults\" --name \"Select Obsidian vault\" --hold custom-obsidianvaults";
|
"$notes" = "kitty --class \"custom-obsidianvaults\" --name \"Select Obsidian vault\" --hold custom-obsidianvaults";
|
||||||
"$file" = "dolphin";
|
"$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 = {
|
animations = {
|
||||||
@@ -190,8 +210,8 @@
|
|||||||
"$mod_SHIFT, S, exec, caelestia shell picker open"
|
"$mod_SHIFT, S, exec, caelestia shell picker open"
|
||||||
# framework 16 rgb macropad
|
# framework 16 rgb macropad
|
||||||
"Ctrl+$mod, 6, exec, custom-killall" # pos 1 1 killall apps except focused one
|
"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, custom-performance" # pos 2 1 start performance mode
|
||||||
"Ctrl+Alt, 7, exec, caelestia shell gameMode toggle"
|
#"Ctrl+Alt, 7, exec, caelestia shell gameMode toggle"
|
||||||
# reloads the autostart programs # pos 3 1
|
# reloads the autostart programs # pos 3 1
|
||||||
# we passed to caelestia-shell and stoped using that
|
# 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, swaync-client -t" # pos 4 1 notification center
|
||||||
"Ctrl+Alt, 1, exec, qs ipc call notifications toggle"
|
"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, 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, 4, exec, caelestia shell notifs toggleDnd"
|
||||||
"Ctrl+$mod, 3, exec, pavucontrol" # pos 1 2 audiocontrol
|
"Ctrl+$mod, 3, exec, pavucontrol" # pos 1 2 audiocontrol
|
||||||
"Ctrl+Shift+Alt, 0, exec, kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\"" # pos 2 2 change audio output fzf
|
"Ctrl+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"
|
"custom-batterywarning"
|
||||||
#"birdtray" # thunderbird tray app # curently broken
|
#"birdtray" # thunderbird tray app # curently broken
|
||||||
#wallpapers/b
|
#wallpapers/b
|
||||||
"swww img ${wallpaper}"
|
"awww img ${wallpaper}"
|
||||||
"swww-daemon"
|
"awww-daemon"
|
||||||
"sleep 1 && custom-wallpaper"
|
"sleep 1 && custom-wallpaper"
|
||||||
"custom-checkKdrive && custom-mountkdrive" # checks if the remote works and mount it
|
"custom-checkKdrive && custom-mountkdrive" # checks if the remote works and mount it
|
||||||
#"waybar"
|
#"waybar"
|
||||||
"custom-gitnotify"
|
"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/)
|
#"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
|
#"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 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
|
We stopped using that ######################### maybe we should desactivate those scripts
|
||||||
# login autostart
|
# login autostart
|
||||||
@@ -478,7 +502,7 @@
|
|||||||
"float on, match:class ^(kitty)$, match:title ^(htop)$"
|
"float on, match:class ^(kitty)$, match:title ^(htop)$"
|
||||||
"float on, match:class ^(vlc)$"
|
"float on, match:class ^(vlc)$"
|
||||||
"float on, match:class ^(eog)$"
|
"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 1050 200, match:class ^(custom-changeAudioOutput)$"
|
||||||
"float on, size 400 175, match:class ^(custom-obsidianvaults)$"
|
"float on, size 400 175, match:class ^(custom-obsidianvaults)$"
|
||||||
"float on, size 600 600, match:initial_class ^(custom-pomodoro)$"
|
"float on, size 600 600, match:initial_class ^(custom-pomodoro)$"
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ _: {
|
|||||||
name = "custom-wallpaper";
|
name = "custom-wallpaper";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
socat
|
socat
|
||||||
swww
|
awww
|
||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
handle() {
|
handle() {
|
||||||
@@ -60,19 +60,19 @@ _: {
|
|||||||
workspace="''${str:$i:1}"
|
workspace="''${str:$i:1}"
|
||||||
case $workspace in
|
case $workspace in
|
||||||
1 | 6)
|
1 | 6)
|
||||||
swww img -t none ${wallpaper1}
|
awww img -t none ${wallpaper1}
|
||||||
;;
|
;;
|
||||||
2 | 7)
|
2 | 7)
|
||||||
swww img -t none ${wallpaper2}
|
awww img -t none ${wallpaper2}
|
||||||
;;
|
;;
|
||||||
3 | 8)
|
3 | 8)
|
||||||
swww img -t none ${wallpaper3}
|
awww img -t none ${wallpaper3}
|
||||||
;;
|
;;
|
||||||
4 | 9)
|
4 | 9)
|
||||||
swww img -t none ${wallpaper4}
|
awww img -t none ${wallpaper4}
|
||||||
;;
|
;;
|
||||||
5 | 10 | 0)
|
5 | 10 | 0)
|
||||||
swww img -t none ${wallpaper5}
|
awww img -t none ${wallpaper5}
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{self, ...}: {
|
{self, ...}: {
|
||||||
flake.nixosModules.kdrive = {pkgs-unstable, ...}: {
|
flake.nixosModules.kdrive-laptop = {pkgs-unstable, ...}: {
|
||||||
environment.systemPackages = with pkgs-unstable; [
|
environment.systemPackages = with pkgs-unstable; [
|
||||||
rclone
|
rclone
|
||||||
self.packages.${pkgs.system}.custom-checkKdrive
|
self.packages.${pkgs.system}.custom-checkKdrive
|
||||||
self.packages.${pkgs.system}.custom-mountkdrive
|
self.packages.${pkgs.system}.custom-mountkdrive-laptop
|
||||||
];
|
];
|
||||||
# removes rclone error
|
# removes rclone error
|
||||||
programs.fuse = {
|
programs.fuse = {
|
||||||
@@ -11,16 +11,49 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
flake.nixosModules.kdrive-desktop = {pkgs-unstable, ...}: {
|
||||||
|
environment.systemPackages = with pkgs-unstable; [
|
||||||
|
rclone
|
||||||
|
icloudpd
|
||||||
|
self.packages.${pkgs-unstable.system}.custom-checkKdrive
|
||||||
|
self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop
|
||||||
|
];
|
||||||
|
# removes rclone error
|
||||||
|
programs.fuse = {
|
||||||
|
userAllowOther = true;
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
systemd.user.services.kdrive-sync = {
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop}/bin/custom-synckdrive";
|
||||||
|
|
||||||
|
Nice = 19; # lowest CPU scheduling priority
|
||||||
|
IOSchedulingClass = "idle";
|
||||||
|
IOSchedulingPriority = 7;
|
||||||
|
|
||||||
|
# Optional:
|
||||||
|
CPUWeight = 1; # minimum relative CPU share
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.user.timers.kdrive-sync = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = "10m";
|
||||||
|
OnUnitActiveSec = "1h";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
packages.custom-checkKdrive = pkgs.writeShellApplication {
|
packages.custom-checkKdrive = pkgs.writeShellApplication {
|
||||||
name = "custom-checkKdrive";
|
name = "custom-checkKdrive";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
rclone
|
rclone
|
||||||
matrix-commander-rs
|
curl
|
||||||
libnotify
|
libnotify
|
||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source /run/agenix/ntfy
|
||||||
# waits for an internet connection. It pings both Google DNS and Cloudfare dns in case one of them is down
|
# waits for an internet connection. It pings both Google DNS and Cloudfare dns in case one of them is down
|
||||||
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \
|
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \
|
||||||
ping -c1 -W1 8.8.8.8 >/dev/null 2>&1
|
ping -c1 -W1 8.8.8.8 >/dev/null 2>&1
|
||||||
@@ -40,13 +73,15 @@
|
|||||||
else
|
else
|
||||||
echo "kdrive rclone failed with error: $output"
|
echo "kdrive rclone failed with error: $output"
|
||||||
notify-send "rclone kdrive failed" "$output"
|
notify-send "rclone kdrive failed" "$output"
|
||||||
matrix-commander-rs --verbose -m "rclone kdrive failed.<br>Error: <pre>$output</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Rclone couldnt access kdrive (rclone lsd kdrive). Error: $output" \
|
||||||
|
-H "Title: Rclone kdrive" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
packages.custom-mountkdrive = pkgs.writeShellApplication {
|
packages.custom-mountkdrive-laptop = pkgs.writeShellApplication {
|
||||||
name = "custom-mountkdrive";
|
name = "custom-mountkdrive";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
rclone
|
rclone
|
||||||
@@ -66,5 +101,43 @@
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
Before setting up we must:
|
||||||
|
* setup the rclone remote
|
||||||
|
`rclone config` choose Webdaw and see login information in bitwarden.
|
||||||
|
* give the good permissions for the hdd
|
||||||
|
`sudo chown -R tomasr:users /home/tomasr/hdd`
|
||||||
|
* Run the bisync once completly
|
||||||
|
`rclone bisync ~/hdd/kdrive/ kdrive: --resync`
|
||||||
|
|
||||||
|
Note : only use the --resync flag once
|
||||||
|
*/
|
||||||
|
packages.custom-synckdrive-desktop = pkgs.writeShellApplication {
|
||||||
|
name = "custom-synckdrive";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
rclone
|
||||||
|
libnotify
|
||||||
|
ripgrep
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
REMOTE_NAME="kdrive"
|
||||||
|
MOUNT_POINT="/home/tomasr/hdd/kdrive"
|
||||||
|
LOGFILE="/tmp/rclone-bisync.log"
|
||||||
|
rm LOGFILE && touch LOGFILE
|
||||||
|
if rclone --config "$HOME/.config/rclone/rclone.conf" listremotes | rg "^''${REMOTE_NAME}:"; then
|
||||||
|
echo "Syncing ''${REMOTE_NAME}..."
|
||||||
|
if ! rclone --config "$HOME/.config/rclone/rclone.conf" bisync "$MOUNT_POINT" "$REMOTE_NAME:" --recover > "$LOGFILE" 2>&1; then
|
||||||
|
notify-send "rclone bisync failed" "$(cat $LOGFILE)"
|
||||||
|
echo "rclone bisync failed"
|
||||||
|
cat $LOGFILE
|
||||||
|
cp $LOGFILE "$HOME/hdd/kdrive/logs/$(date +%Y-%m-%d-%H-%M-%S).log"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
notify-send "rclone sync failed" \
|
||||||
|
"Remote ''${REMOTE_NAME} not found.\nConfigure rclone and create the dir ~/kdrive/ or comment out the exec line in hyprland.nix."
|
||||||
|
echo "Remote ''${REMOTE_NAME} not found. Configure rclone or fix in ~/nixos/modules/applications/kdrive.nix"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
_: {
|
||||||
|
flake.nixosModules.mathematics = {pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
elan
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
_: {
|
_: {
|
||||||
flake.homeModules.neovim = {pkgs-unstable, ...}: {
|
flake.homeModules.neovim = {pkgs-unstable, ...}: {
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
|
withRuby = false;
|
||||||
|
withPython3 = false;
|
||||||
enable = true;
|
enable = true;
|
||||||
vimAlias = false;
|
vimAlias = false;
|
||||||
viAlias = false;
|
viAlias = false;
|
||||||
@@ -50,6 +52,9 @@ _: {
|
|||||||
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix
|
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix
|
||||||
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf
|
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf
|
||||||
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.python
|
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.python
|
||||||
|
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.sparql
|
||||||
|
pkgs-unstable.vimPlugins.lean-nvim
|
||||||
|
pkgs-unstable.vimPlugins.vim-ledger
|
||||||
pkgs-unstable.vimPlugins.telescope-nvim
|
pkgs-unstable.vimPlugins.telescope-nvim
|
||||||
pkgs-unstable.vimPlugins.nvim-scrollbar
|
pkgs-unstable.vimPlugins.nvim-scrollbar
|
||||||
pkgs-unstable.vimPlugins.promise-async
|
pkgs-unstable.vimPlugins.promise-async
|
||||||
@@ -63,7 +68,7 @@ _: {
|
|||||||
pkgs-unstable.vimPlugins.better-diagnostic-virtual-text
|
pkgs-unstable.vimPlugins.better-diagnostic-virtual-text
|
||||||
pkgs-unstable.vimPlugins.garbage-day-nvim
|
pkgs-unstable.vimPlugins.garbage-day-nvim
|
||||||
];
|
];
|
||||||
extraLuaConfig = ''
|
initLua = ''
|
||||||
|
|
||||||
local vim = vim
|
local vim = vim
|
||||||
|
|
||||||
@@ -316,7 +321,7 @@ _: {
|
|||||||
})
|
})
|
||||||
vim.lsp.config("pylsp", {
|
vim.lsp.config("pylsp", {
|
||||||
cmd = { "pylsp" },
|
cmd = { "pylsp" },
|
||||||
filetypes = { "python" },
|
filetypes = { "python", "py" },
|
||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
settings = {
|
settings = {
|
||||||
pylsp = {
|
pylsp = {
|
||||||
@@ -368,7 +373,7 @@ _: {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.lsp.enable({ "lua_ls", "clangd", "pylsp", "texlab", "nixd", "ltex"})
|
vim.lsp.enable({ "lua_ls", "clangd", "pylsp", "texlab", "nixd", "ltex", "leanls"})
|
||||||
-- =========================
|
-- =========================
|
||||||
-- DASHBOARD
|
-- DASHBOARD
|
||||||
-- =========================
|
-- =========================
|
||||||
@@ -471,7 +476,12 @@ _: {
|
|||||||
-- =========================
|
-- =========================
|
||||||
require('lualine').setup { options = { theme = "gruvbox_dark" } }
|
require('lualine').setup { options = { theme = "gruvbox_dark" } }
|
||||||
|
|
||||||
|
-- ==================
|
||||||
|
-- lean
|
||||||
|
-- ==================
|
||||||
|
require('lean').setup({
|
||||||
|
mappings = true,
|
||||||
|
})
|
||||||
--==================0
|
--==================0
|
||||||
-- Some utils
|
-- Some utils
|
||||||
--==================
|
--==================
|
||||||
|
|||||||
@@ -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 = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false; # will be removed in the futur. Removes evaluation warning
|
enableDefaultConfig = false; # will be removed in the futur. Removes evaluation warning
|
||||||
matchBlocks."*" = {
|
/*
|
||||||
|
settings = {
|
||||||
# equivalent to the default config
|
# equivalent to the default config
|
||||||
forwardAgent = false;
|
#forwardAgent = false;
|
||||||
addKeysToAgent = "no";
|
# give errors in home-manager 26.05
|
||||||
compression = false;
|
#addKeysToAgent = "no";
|
||||||
|
#compression = false;
|
||||||
serverAliveInterval = 0;
|
serverAliveInterval = 0;
|
||||||
serverAliveCountMax = 3;
|
serverAliveCountMax = 3;
|
||||||
hashKnownHosts = false;
|
hashKnownHosts = false;
|
||||||
userKnownHostsFile = "~/.ssh/known_hosts";
|
userKnownHostsFile = "~/.ssh/known_hosts";
|
||||||
controlMaster = "no";
|
#controlMaster = "no";
|
||||||
controlPath = "~/.ssh/master-%r@%n:%p";
|
#controlPath = "~/.ssh/master-%r@%n:%p";
|
||||||
controlPersist = "no";
|
#controlPersist = "no";
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
services.ssh-agent.enable = true;
|
services.ssh-agent.enable = true;
|
||||||
home.file.".ssh/config".text = ''
|
home.file.".ssh/config".text = ''
|
||||||
|
|||||||
@@ -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 = _: {
|
flake.homeModules.waybar = _: {
|
||||||
# replaced by caelestia
|
# replaced by caelestia
|
||||||
programs.waybar = {
|
programs.waybar = {
|
||||||
|
|||||||
@@ -1,16 +1,41 @@
|
|||||||
{self, ...}: {
|
_: {
|
||||||
flake.homeModules.zsh-laptop = _: {
|
flake.homeModules.zsh-laptop = _: {
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
snrt = "git -C ~/nixos add -A && time sudo nixos-rebuild test --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
|
snrt = ''
|
||||||
snrs = "git -C ~/nixos add -A && time sudo nixos-rebuild switch --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
|
git -C ~/nixos add -A &&
|
||||||
|
time sudo nixos-rebuild test --flake ~/nixos/#laptop &&
|
||||||
|
pkill shell || true &&
|
||||||
|
if [ ! -f ~/.cache/hypr-battery-saver ]; then
|
||||||
|
pkill caelestia-shell || true &&
|
||||||
|
caelestia-shell -n > /dev/null 2>&1 & disown
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
snrs = ''
|
||||||
|
git -C ~/nixos add -A &&
|
||||||
|
time sudo nixos-rebuild switch --flake ~/nixos/#laptop &&
|
||||||
|
pkill shell || true &&
|
||||||
|
if [ ! -f ~/.cache/hypr-battery-saver ]; then
|
||||||
|
pkill caelestia-shell || true &&
|
||||||
|
caelestia-shell -n > /dev/null 2>&1 & disown
|
||||||
|
fi
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
flake.homeModules.zsh = {pkgs, ...}: {
|
flake.homeModules.zsh-desktop = _: {
|
||||||
|
programs.zsh = {
|
||||||
|
shellAliases = {
|
||||||
|
snrt = "git -C ~/nixos add -A && time sudo nixos-rebuild test --flake ~/nixos/#desktop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
|
||||||
|
snrs = "git -C ~/nixos add -A && time sudo nixos-rebuild switch --flake ~/nixos/#desktop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
flake.homeModules.zsh = {pkgs-unstable, ...}: {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
self.packages.${pkgs.system}.dejaManuallyDerived
|
#self.packages.${pkgs.system}.dejaManuallyDerived
|
||||||
#pkgs-unstable.deja
|
pkgs-unstable.deja
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
@@ -25,7 +50,7 @@
|
|||||||
command cat "$@"
|
command cat "$@"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
custom-eza() { # behaves differently if we just call it or if we pipe initContent
|
custom-eza() { # behaves differently if we just call it or if we pipe initContent
|
||||||
if [[ -t 1 ]]; then
|
if [[ -t 1 ]]; then
|
||||||
eza -hlF -aa --color=always --hyperlink --group-directories-first --show-symlinks --icons=always --git --no-permissions "$@"
|
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 "$(direnv hook zsh)"
|
||||||
eval "$(deja init zsh)"
|
eval "$(deja init zsh)"
|
||||||
export PATH="$PATH:$HOME/NoteWrapper" # some project im coding
|
|
||||||
fastfetch''\n'';
|
fastfetch''\n'';
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
".." = "z ..";
|
".." = "z ..";
|
||||||
|
|||||||
+103
-29
@@ -1,9 +1,9 @@
|
|||||||
_: {
|
{
|
||||||
flake.nixosModules.battery-laptop = {
|
self,
|
||||||
lib,
|
inputs,
|
||||||
config,
|
...
|
||||||
...
|
}: {
|
||||||
}:
|
flake.nixosModules.battery-laptop = {pkgs, ...}:
|
||||||
# https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2
|
# https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2
|
||||||
# we just activate tlp unconditonally
|
# we just activate tlp unconditonally
|
||||||
#let
|
#let
|
||||||
@@ -22,7 +22,8 @@ _: {
|
|||||||
# };
|
# };
|
||||||
|
|
||||||
# config = lib.mkIf cfg.battery.enable {
|
# config = lib.mkIf cfg.battery.enable {
|
||||||
powerManagement.powertop.enable = true; # enable powertop auto tuning on startup.
|
/*
|
||||||
|
powerManagement.powertop.enable = true; # enable powertop auto tuning on startup.
|
||||||
# Acording to https://community.frame.work/t/solved-keys-stick-and-repeat-after-being-released/51153/12
|
# Acording to https://community.frame.work/t/solved-keys-stick-and-repeat-after-being-released/51153/12
|
||||||
# Some powertop bug is responsable for the problem of the random keypress being stuck
|
# Some powertop bug is responsable for the problem of the random keypress being stuck
|
||||||
# fix: from https://git.gabbie.blue/blue/nixconf/src/commit/2d1bc6dad4684c019b6b3e894408e76e2734806c/hosts/gabbielaptop/configuration.nix#L68
|
# fix: from https://git.gabbie.blue/blue/nixconf/src/commit/2d1bc6dad4684c019b6b3e894408e76e2734806c/hosts/gabbielaptop/configuration.nix#L68
|
||||||
@@ -31,27 +32,31 @@ _: {
|
|||||||
# Retrigger macropad udev rules
|
# Retrigger macropad udev rules
|
||||||
${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=32ac -a idProduct=0013
|
${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=32ac -a idProduct=0013
|
||||||
'';
|
'';
|
||||||
|
*/
|
||||||
services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!!
|
services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!!
|
||||||
services.thermald.enable = true; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
|
services.thermald.enable = false; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
|
||||||
services.power-profiles-daemon.enable = false; # Disable GNOMEs power management
|
services.power-profiles-daemon.enable = true; # ppd is recommended over tlp for framework 16
|
||||||
services.tlp = {
|
/*
|
||||||
|
services.tlp = {
|
||||||
enable = true; # Enable TLP (better than gnomes internal power manager)
|
enable = true; # Enable TLP (better than gnomes internal power manager)
|
||||||
settings = {
|
settings = {
|
||||||
CPU_BOOST_ON_AC = 1;
|
CPU_BOOST_ON_AC = 1;
|
||||||
CPU_BOOST_ON_BAT = 1;
|
CPU_BOOST_ON_BAT = 1;
|
||||||
CPU_HWP_DYN_BOOST_ON_AC = 1;
|
CPU_HWP_DYN_BOOST_ON_AC = 1;
|
||||||
CPU_HWP_DYN_BOOST_ON_BAT = 1;
|
CPU_HWP_DYN_BOOST_ON_BAT = 1;
|
||||||
CPU_SCALING_GOVERNOR_ON_AC = "performance";
|
CPU_SCALING_GOVERNOR_ON_AC = "balanced";
|
||||||
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
||||||
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
|
CPU_ENERGY_PERF_POLICY_ON_AC = "balanced";
|
||||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
|
CPU_ENERGY_PERF_POLICY_ON_BAT = "powersave";
|
||||||
PLATFORM_PROFILE_ON_AC = "performance";
|
PLATFORM_PROFILE_ON_AC = "balanced";
|
||||||
PLATFORM_PROFILE_ON_BAT = "balanced";
|
PLATFORM_PROFILE_ON_BAT = "powersave";
|
||||||
START_CHARGE_THRESH_BAT1 = 75;
|
STOP_CHARGE_THRESH_BAT1 = 80;
|
||||||
STOP_CHARGE_THRESH_BAT1 = 85;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# };
|
*/
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.custom-performance
|
||||||
|
];
|
||||||
};
|
};
|
||||||
perSystem = {pkgs, ...}: let
|
perSystem = {pkgs, ...}: let
|
||||||
NotifySound = ../../assets/battery_notify.mp3;
|
NotifySound = ../../assets/battery_notify.mp3;
|
||||||
@@ -336,28 +341,97 @@ _: {
|
|||||||
name = "custom-performance";
|
name = "custom-performance";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
hyprland
|
hyprland
|
||||||
gawk
|
brightnessctl
|
||||||
|
swaynotificationcenter
|
||||||
|
self.packages.${pkgs.system}.custom-wallpaper
|
||||||
libnotify
|
libnotify
|
||||||
|
inputs.caelestia-shell.packages.${pkgs.system}.default
|
||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
STATE="$HOME/.cache/hypr-battery-saver"
|
||||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
|
||||||
|
enable() {
|
||||||
|
mkdir -p "$(dirname "$STATE")"
|
||||||
|
|
||||||
|
echo "Enabling battery saver mode..."
|
||||||
|
|
||||||
|
# Save brightness
|
||||||
|
brightnessctl get > "''${STATE}.brightness" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Kill heavy UI components
|
||||||
|
pkill -f caelestia-shell || true
|
||||||
|
pkill -f caelestia || true
|
||||||
|
pkill shell || true
|
||||||
|
pkill -f custom-wallpaper || true
|
||||||
|
|
||||||
|
# Start lightweight notifications
|
||||||
|
pkill swaync || true
|
||||||
|
swaync & disown
|
||||||
|
|
||||||
|
# Start lightweight waybar
|
||||||
|
pkill waybar || true
|
||||||
|
waybar & disown
|
||||||
|
|
||||||
|
# Lower refresh rate (BIGGEST win)
|
||||||
|
hyprctl keyword monitor "eDP-1,2560x1600@60,0x0,1"
|
||||||
|
|
||||||
|
# Core performance toggles
|
||||||
hyprctl --batch "\
|
hyprctl --batch "\
|
||||||
keyword animations:enabled 0;\
|
keyword animations:enabled 0;\
|
||||||
keyword animation borderangle,0; \
|
keyword animation borderangle,0;\
|
||||||
keyword decoration:shadow:enabled 0;\
|
keyword decoration:shadow:enabled 0;\
|
||||||
keyword decoration:blur:enabled 0;\
|
keyword decoration:blur:enabled 0;\
|
||||||
keyword decoration:fullscreen_opacity 1;\
|
keyword decoration:rounding 0;\
|
||||||
|
keyword decoration:fullscreen_opacity 1;\
|
||||||
keyword general:gaps_in 0;\
|
keyword general:gaps_in 0;\
|
||||||
keyword general:gaps_out 0;\
|
keyword general:gaps_out 0;\
|
||||||
keyword general:border_size 1;\
|
keyword general:border_size 1;\
|
||||||
keyword decoration:rounding 0"
|
keyword decoration:active_opacity 1;\
|
||||||
notify-send -u critical -t 5000 "Performance mode [ON]"
|
keyword decoration:inactive_opacity 1;\
|
||||||
exit
|
keyword misc:vfr true"
|
||||||
else
|
|
||||||
notify-send -u critical -t 5000 "Performance mode [OFF]"
|
# Lower brightness
|
||||||
|
brightnessctl set 5% 2>/dev/null || true
|
||||||
|
|
||||||
|
touch "$STATE"
|
||||||
|
|
||||||
|
notify-send "Battery Saver" "Enabled"
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
echo "Disabling battery saver mode..."
|
||||||
|
|
||||||
|
# Restore refresh rate
|
||||||
|
hyprctl keyword monitor "eDP-1,2560x1600@165,0x0,1"
|
||||||
|
|
||||||
|
# Restore Caelestia
|
||||||
|
pkill swaync || true
|
||||||
|
pkill waybar || true
|
||||||
|
caelestia shell -d >/dev/null 2>&1 &
|
||||||
|
disown
|
||||||
|
|
||||||
|
|
||||||
|
# Restart wallpaper
|
||||||
|
custom-wallpaper >/dev/null 2>&1 &
|
||||||
|
disown
|
||||||
|
|
||||||
|
# Restore full UI via reload (safe here on exit)
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
exit 0
|
|
||||||
|
# Restore brightness
|
||||||
|
if [[ -f "''${STATE}.brightness" ]]; then
|
||||||
|
brightnessctl set "$(cat "''${STATE}.brightness")" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$STATE" "''${STATE}.brightness"
|
||||||
|
|
||||||
|
notify-send "Battery Saver" "Disabled"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -f "$STATE" ]]; then
|
||||||
|
disable
|
||||||
|
else
|
||||||
|
enable
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,16 +1,31 @@
|
|||||||
_: {
|
_: let
|
||||||
flake.nixosModules.bootloader-laptop = {
|
wallpaper1 = ../../assets/wallpaper1.jpg;
|
||||||
inputs,
|
wallpaper2 = ../../assets/wallpaper2.jpg;
|
||||||
pkgs,
|
wallpaper3 = ../../assets/wallpaper3.jpg;
|
||||||
...
|
wallpaper4 = ../../assets/wallpaper4.jpg;
|
||||||
}: {
|
wallpaper5 = ../../assets/wallpaper5.jpg;
|
||||||
# grub theme
|
in {
|
||||||
boot.loader.grub = {
|
flake.nixosModules.bootloader = _: {
|
||||||
theme = inputs.nixos-grub-themes.packages.${pkgs.system}.nixos; # if you want to use nixos grub theme
|
# disable other bootloaders
|
||||||
|
boot.loader.systemd-boot.enable = false;
|
||||||
|
boot.loader.grub.enable = false;
|
||||||
|
|
||||||
|
boot.loader.limine = {
|
||||||
|
enable = true;
|
||||||
|
efiSupport = true;
|
||||||
|
maxGenerations = 128;
|
||||||
|
style = {
|
||||||
|
wallpaperStyle = "centered";
|
||||||
|
wallpapers = [
|
||||||
|
wallpaper1
|
||||||
|
wallpaper2
|
||||||
|
wallpaper3
|
||||||
|
wallpaper4
|
||||||
|
wallpaper5
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Bootloader.
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -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";
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
};
|
};
|
||||||
|
flake.nixosModules.hardware-configuration-desktop =
|
||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = ["vmd" "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
|
boot.initrd.kernelModules = [];
|
||||||
|
boot.kernelModules = ["kvm-intel"];
|
||||||
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
|
||||||
|
fsType = "btrfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" = {
|
||||||
|
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = ["subvol=home"];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/nix" = {
|
||||||
|
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = ["subvol=nix"];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/BAB4-34F6";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = ["fmask=0077" "dmask=0077"];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{device = "/dev/disk/by-uuid/ce6f9a68-0517-4f8a-b375-66f2173efe59";}
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
@@ -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 {
|
flake.nixosConfigurations.laptop = inputs.nixpkgs.lib.nixosSystem {
|
||||||
#system = "x86_64-linux";
|
#system = "x86_64-linux";
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit (self) pkgs-unstable;
|
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
||||||
};
|
};
|
||||||
modules = with self.nixosModules; [
|
modules = with self.nixosModules; [
|
||||||
# important do not remove
|
# important do not remove
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
autoUpdate-laptop
|
autoUpdate-laptop
|
||||||
battery-laptop
|
battery-laptop
|
||||||
bluetooth
|
bluetooth
|
||||||
bootloader-laptop
|
bootloader
|
||||||
browsers
|
browsers
|
||||||
caelestia
|
caelestia
|
||||||
development
|
development
|
||||||
@@ -28,21 +28,27 @@
|
|||||||
disk
|
disk
|
||||||
disk-laptop
|
disk-laptop
|
||||||
fonts
|
fonts
|
||||||
games
|
gitBackup
|
||||||
hardware-configuration-laptop
|
hardware-configuration-laptop
|
||||||
hardwareUtils-laptop
|
hardwareUtils-laptop
|
||||||
|
hledger
|
||||||
|
hledger-laptop
|
||||||
hyprland
|
hyprland
|
||||||
IO
|
IO
|
||||||
kdrive
|
kdrive-laptop
|
||||||
latex
|
latex
|
||||||
ly
|
ly
|
||||||
mullvad
|
mathematics
|
||||||
|
#mullvad #temporarly broken
|
||||||
networking
|
networking
|
||||||
|
nixUtils-laptop
|
||||||
|
nixUtils
|
||||||
notifications
|
notifications
|
||||||
office
|
office
|
||||||
#ollama
|
#ollama
|
||||||
otherUtils
|
otherUtils
|
||||||
printer
|
printer
|
||||||
|
rss
|
||||||
udev
|
udev
|
||||||
user
|
user
|
||||||
];
|
];
|
||||||
@@ -52,7 +58,9 @@
|
|||||||
inputs.caelestia-shell.homeManagerModules.default
|
inputs.caelestia-shell.homeManagerModules.default
|
||||||
anki
|
anki
|
||||||
caelestia
|
caelestia
|
||||||
|
caelestia-laptop
|
||||||
cursor
|
cursor
|
||||||
|
development
|
||||||
eza
|
eza
|
||||||
fastfetch
|
fastfetch
|
||||||
git
|
git
|
||||||
@@ -61,16 +69,21 @@
|
|||||||
hyprland-laptop
|
hyprland-laptop
|
||||||
kitty
|
kitty
|
||||||
librewolf
|
librewolf
|
||||||
mullvad
|
#mullvad #temporarly broken
|
||||||
neovim
|
neovim
|
||||||
|
nix-git-cherry-picker-laptop
|
||||||
|
laptop-notewrapper
|
||||||
oh-my-zsh
|
oh-my-zsh
|
||||||
ripgrep
|
ripgrep
|
||||||
rofi
|
rofi
|
||||||
sbb-tui
|
sbb-tui
|
||||||
ssh
|
ssh
|
||||||
|
swaync # used in performance mode
|
||||||
thunderbird
|
thunderbird
|
||||||
|
tmux
|
||||||
tomasr
|
tomasr
|
||||||
vivify
|
vivify
|
||||||
|
waybar-minimal # used in performance mode
|
||||||
zoxide
|
zoxide
|
||||||
zsh
|
zsh
|
||||||
zsh-laptop
|
zsh-laptop
|
||||||
@@ -101,7 +114,7 @@
|
|||||||
useUserPackages = true;
|
useUserPackages = true;
|
||||||
|
|
||||||
extraSpecialArgs = {
|
extraSpecialArgs = {
|
||||||
inherit (self) pkgs-unstable;
|
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
||||||
inherit self;
|
inherit self;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -118,6 +131,8 @@
|
|||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
EDITOR = "neovim";
|
EDITOR = "neovim";
|
||||||
TERMINAL = "kitty";
|
TERMINAL = "kitty";
|
||||||
|
SYSTEMD_PAGER = "cat";
|
||||||
|
PAGER = "cat";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Required for Home Manager
|
# Required for Home Manager
|
||||||
|
|||||||
+24
-19
@@ -27,24 +27,29 @@ _: {
|
|||||||
services.upower.enable = true;
|
services.upower.enable = true;
|
||||||
|
|
||||||
# removes need for password for nixos-rebuild
|
# removes need for password for nixos-rebuild
|
||||||
security.sudo.extraRules = [
|
security.sudo = {
|
||||||
{
|
extraRules = [
|
||||||
users = ["tomasr"];
|
{
|
||||||
commands = [
|
users = ["tomasr"];
|
||||||
{
|
commands = [
|
||||||
command = "/run/current-system/sw/bin/nixos-rebuild";
|
{
|
||||||
options = ["NOPASSWD"];
|
command = "/run/current-system/sw/bin/nixos-rebuild";
|
||||||
}
|
options = ["NOPASSWD"];
|
||||||
{
|
}
|
||||||
command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild";
|
{
|
||||||
options = ["NOPASSWD"];
|
command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild";
|
||||||
}
|
options = ["NOPASSWD"];
|
||||||
{
|
}
|
||||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
{
|
||||||
options = ["NOPASSWD"];
|
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||||
}
|
options = ["NOPASSWD"];
|
||||||
];
|
}
|
||||||
}
|
];
|
||||||
];
|
}
|
||||||
|
];
|
||||||
|
extraConfig = ''
|
||||||
|
Defaults pwfeedback
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
+9
-6
@@ -1,18 +1,19 @@
|
|||||||
_: {
|
_: {
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
# fzf librewolf profile selector
|
# fzf librewolf profile selector
|
||||||
packages.custom-librewolfprofiles = pkgs.writeShellApplication {
|
packages.custom-browserprofiles = pkgs.writeShellApplication {
|
||||||
name = "custom-librewolfprofiles";
|
name = "custom-browserprofiles";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
zsh
|
zsh
|
||||||
fzf
|
fzf
|
||||||
|
tor-browser
|
||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
# List of profiles
|
# List of profiles
|
||||||
profiles=("work" "other" "private window")
|
profiles=("work" "other" "private window" "tor-browser")
|
||||||
|
|
||||||
# Use fzf to select
|
# Use fzf to select
|
||||||
selected=$(printf "%s\n" "''${profiles[@]}" | fzf --height 6 --reverse --prompt="Select LibreWolf profile:")
|
selected=$(printf "%s\n" "''${profiles[@]}" | fzf --height 6 --reverse --prompt="Select browser profile:")
|
||||||
|
|
||||||
# If user cancels, exit
|
# If user cancels, exit
|
||||||
[[ -z "$selected" ]] && exit 0
|
[[ -z "$selected" ]] && exit 0
|
||||||
@@ -20,10 +21,12 @@ _: {
|
|||||||
# Launch LibreWolf detached, keeping environment
|
# Launch LibreWolf detached, keeping environment
|
||||||
if [[ "$selected" == "private window" ]]; then
|
if [[ "$selected" == "private window" ]]; then
|
||||||
setsid librewolf --private-window --no-remote >/dev/null 2>&1 &
|
setsid librewolf --private-window --no-remote >/dev/null 2>&1 &
|
||||||
pkill -f "kitty.*Select LibreWolf profile"
|
pkill -f "kitty.*Select browser profile"
|
||||||
|
elif [[ "$selected" == "tor-browser" ]]; then
|
||||||
|
setsid tor-browser >/dev/null 2>&1 & pkill -f "kitty.*Select browser profile"
|
||||||
else
|
else
|
||||||
setsid librewolf -P "$selected" --no-remote >/dev/null 2>&1 &
|
setsid librewolf -P "$selected" --no-remote >/dev/null 2>&1 &
|
||||||
pkill -f "kitty.*Select LibreWolf profile"
|
pkill -f "kitty.*Select browser profile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Exit the kitty terminal after selection
|
# Exit the kitty terminal after selection
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
_: {
|
|
||||||
perSystem = {
|
|
||||||
pkgs,
|
|
||||||
pkgs-unstable,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
packages.sbb-tuiManuallyDerived = pkgs-unstable.buildGoModule (finalAttrs: {
|
|
||||||
pname = "sbb-tui";
|
|
||||||
version = "1.14.2";
|
|
||||||
__structuredAttrs = true;
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "Necrom4";
|
|
||||||
repo = "sbb-tui";
|
|
||||||
tag = "v${finalAttrs.version}";
|
|
||||||
hash = pkgs.lib.fakeHash;
|
|
||||||
};
|
|
||||||
|
|
||||||
vendorHash = "sha256-K4DOu3rfSlKAa5JNKCzWWpnWZlXXxtN5Po7p1Spqe1w=";
|
|
||||||
|
|
||||||
ldflags = [
|
|
||||||
"-s"
|
|
||||||
"-w"
|
|
||||||
"-X main.version=${finalAttrs.version}"
|
|
||||||
];
|
|
||||||
|
|
||||||
allowGoReference = true;
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
|
|
||||||
nativeCheckInputs = [pkgs.versionCheckHook];
|
|
||||||
|
|
||||||
passthru.updateScript = pkgs.nix-update-script {};
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "TUI client for Switzerland's public transport timetables, inspired by SBB/CFF/FFS app";
|
|
||||||
homepage = "https://github.com/Necrom4/sbb-tui";
|
|
||||||
license = pkgs.lib.licenses.mit;
|
|
||||||
platforms = pkgs.lib.platforms.unix;
|
|
||||||
maintainers = with pkgs.lib.maintainers; [tomasrivera];
|
|
||||||
mainProgram = "sbb-tui";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
imports = [
|
imports = [
|
||||||
# adds home-manager options to flake-parts
|
# adds home-manager options to flake-parts
|
||||||
inputs.home-manager.flakeModules.home-manager
|
inputs.home-manager.flakeModules.home-manager
|
||||||
|
inputs.disko.flakeModules.default
|
||||||
];
|
];
|
||||||
|
|
||||||
config.systems = [
|
config.systems = [
|
||||||
|
|||||||
@@ -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
|
self.packages.${pkgs.system}.custom-changeAudioOutput
|
||||||
kdePackages.okular
|
kdePackages.okular
|
||||||
kdePackages.dolphin
|
kdePackages.dolphin
|
||||||
|
kdePackages.dolphin-plugins
|
||||||
|
kdePackages.ark
|
||||||
pulseaudio # sound server
|
pulseaudio # sound server
|
||||||
playerctl # controls media player
|
playerctl # controls media player
|
||||||
pavucontrol # PulseAudio Volume Control
|
pavucontrol # PulseAudio Volume Control
|
||||||
|
|||||||
@@ -2,8 +2,12 @@
|
|||||||
flake.nixosModules.autoCleanup-laptop = {
|
flake.nixosModules.autoCleanup-laptop = {
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
age.secrets.ntfy = {
|
||||||
|
file = ../../secrets/ntfy.age;
|
||||||
|
};
|
||||||
# Ensure your script is available system-wide
|
# Ensure your script is available system-wide
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
self.packages.${pkgs.system}.custom-cleanNix-laptop
|
self.packages.${pkgs.system}.custom-cleanNix-laptop
|
||||||
@@ -17,6 +21,68 @@
|
|||||||
description = "NixOS configuration auto cleanup";
|
description = "NixOS configuration auto cleanup";
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
Environment = [
|
||||||
|
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
|
||||||
|
];
|
||||||
|
Type = "oneshot";
|
||||||
|
|
||||||
|
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
|
||||||
|
|
||||||
|
# safety for long rebuilds
|
||||||
|
TimeoutStartSec = "45min";
|
||||||
|
TimeoutStopSec = "10min";
|
||||||
|
|
||||||
|
# avoid overlap
|
||||||
|
RemainAfterExit = true;
|
||||||
|
|
||||||
|
# tweaks that should make the system run normally during the rebuilds
|
||||||
|
Nice = 10;
|
||||||
|
IOSchedulingClass = "best-effort";
|
||||||
|
IOSchedulingPriority = 7;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Systemd USER timer
|
||||||
|
systemd.user.timers.custom-cleanNix = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "Sat *-*-* 20:00:00"; # runs saturday night. If for whatever reason something breaks. I have whole sunday to fix it.
|
||||||
|
|
||||||
|
Persistent = true; # if it happens during shutted down
|
||||||
|
|
||||||
|
# avoids thundering herd on boot
|
||||||
|
RandomizedDelaySec = "2h";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
## Desktop
|
||||||
|
flake.nixosModules.autoCleanup-desktop = {
|
||||||
|
pkgs,
|
||||||
|
pkgs-unstable,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
age.secrets.ntfy = {
|
||||||
|
file = ../../secrets/ntfy.age;
|
||||||
|
};
|
||||||
|
# Ensure your script is available system-wide
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.custom-cleanNix-desktop
|
||||||
|
pkgs-unstable.statix
|
||||||
|
];
|
||||||
|
users.users.tomasr = {
|
||||||
|
linger = true; # lingering is required
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.custom-cleanNix = {
|
||||||
|
description = "NixOS configuration auto cleanup";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Environment = [
|
||||||
|
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
|
||||||
|
];
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|
||||||
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
|
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
|
||||||
@@ -56,14 +122,18 @@
|
|||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
git
|
git
|
||||||
nixos-rebuild
|
nixos-rebuild
|
||||||
matrix-commander-rs
|
curl
|
||||||
libnotify
|
libnotify
|
||||||
alejandra
|
alejandra
|
||||||
deadnix
|
deadnix
|
||||||
|
statix
|
||||||
];
|
];
|
||||||
|
|
||||||
text = ''
|
text = ''
|
||||||
set -e
|
set -ex
|
||||||
|
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "$NTFY_SECRET"
|
||||||
|
|
||||||
FLAKE_DIR="/home/tomasr/nixos"
|
FLAKE_DIR="/home/tomasr/nixos"
|
||||||
FLAKE="$FLAKE_DIR#laptop"
|
FLAKE="$FLAKE_DIR#laptop"
|
||||||
@@ -87,7 +157,7 @@
|
|||||||
alejandra "$FLAKE_DIR" # formats the config
|
alejandra "$FLAKE_DIR" # formats the config
|
||||||
echo "--------------------------------------------------------------"
|
echo "--------------------------------------------------------------"
|
||||||
|
|
||||||
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
||||||
|
|
||||||
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
|
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
|
||||||
git -C "$FLAKE_DIR" add -A
|
git -C "$FLAKE_DIR" add -A
|
||||||
@@ -96,9 +166,11 @@
|
|||||||
|
|
||||||
notify-send "Nix auto cleanup" "Everything OK"
|
notify-send "Nix auto cleanup" "Everything OK"
|
||||||
|
|
||||||
matrix-commander-rs --verbose -m "Nix auto cleanup. Everything OK.<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Everything OK" \
|
||||||
|
-H "Title: Laptop Nix auto cleanup" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
else
|
else
|
||||||
notify-send "Nix auto cleanup" "No changes"
|
notify-send "Nix auto cleanup" "No changes"
|
||||||
git -C "$FLAKE_DIR" push
|
git -C "$FLAKE_DIR" push
|
||||||
@@ -109,9 +181,89 @@
|
|||||||
|
|
||||||
notify-send -u critical "Nix auto cleanup" "FAILED"
|
notify-send -u critical "Nix auto cleanup" "FAILED"
|
||||||
|
|
||||||
matrix-commander-rs --verbose -m "Nix auto cleanup failed.<br>Error: <pre>$ERROR_MSG</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Nix auto cleanup failed. Error: $ERROR_MSG" \
|
||||||
|
-H "Title: Laptop Nix auto cleanup" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
|
|
||||||
|
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
|
||||||
|
fi
|
||||||
|
git -C "$FLAKE_DIR" tag -d "pre-cleanup-$TIME" # removes the tag
|
||||||
|
|
||||||
|
rm -f "$ERROR_FILE"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages.custom-cleanNix-desktop = pkgs.writeShellApplication {
|
||||||
|
name = "custom-cleanNix";
|
||||||
|
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
git
|
||||||
|
nixos-rebuild
|
||||||
|
curl
|
||||||
|
libnotify
|
||||||
|
alejandra
|
||||||
|
deadnix
|
||||||
|
statix
|
||||||
|
];
|
||||||
|
|
||||||
|
text = ''
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "$NTFY_SECRET"
|
||||||
|
|
||||||
|
FLAKE_DIR="/home/tomasr/nixos"
|
||||||
|
FLAKE="$FLAKE_DIR#desktop"
|
||||||
|
TIME=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
|
||||||
|
|
||||||
|
ERROR_FILE=$(mktemp)
|
||||||
|
|
||||||
|
# snapshot current state
|
||||||
|
git -C "$FLAKE_DIR" add -A
|
||||||
|
git -C "$FLAKE_DIR" commit --allow-empty -m "snapshot pre-cleanup-$TIME"
|
||||||
|
git -C "$FLAKE_DIR" tag "pre-cleanup-$TIME" HEAD
|
||||||
|
|
||||||
|
# the echos are to separate what each one is doing. Just for curiosity
|
||||||
|
echo "deadnix scans your Nix code and removes or reports unused (dead) variables and bindings"
|
||||||
|
deadnix --edit "$FLAKE_DIR" # removes unused code
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "statix lints your Nix code to find stylistic issues, bad patterns, and potential mistakes."
|
||||||
|
statix fix "$FLAKE_DIR" # check other linting issues
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
echo "alejandra formats your Nix code consistently according to a strict, opinionated style."
|
||||||
|
alejandra "$FLAKE_DIR" # formats the config
|
||||||
|
echo "--------------------------------------------------------------"
|
||||||
|
|
||||||
|
if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
|
||||||
|
|
||||||
|
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
|
||||||
|
git -C "$FLAKE_DIR" add -A
|
||||||
|
git -C "$FLAKE_DIR" commit -m "Auto: cleanup-$TIME"
|
||||||
|
git -C "$FLAKE_DIR" push
|
||||||
|
|
||||||
|
notify-send "Nix auto cleanup" "Everything OK"
|
||||||
|
|
||||||
|
curl \
|
||||||
|
-u ":$NTFY_TOKEN" \
|
||||||
|
-d "Everything OK" \
|
||||||
|
-H "Title: Desktop Nix auto cleanup" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
|
else
|
||||||
|
notify-send "Nix auto cleanup" "No changes"
|
||||||
|
git -C "$FLAKE_DIR" push
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
ERROR_MSG=$(cat "$ERROR_FILE")
|
||||||
|
|
||||||
|
notify-send -u critical "Nix auto cleanup" "FAILED"
|
||||||
|
|
||||||
|
curl \
|
||||||
|
-u ":$NTFY_TOKEN" \
|
||||||
|
-d "Nix auto cleanup failed. Error: $ERROR_MSG" \
|
||||||
|
-H "Title: Desktop Nix auto cleanup" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
|
|
||||||
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
|
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
{self, ...}: {
|
{self, ...}: {
|
||||||
flake.nixosModules.autoUpdate-laptop = {pkgs, ...}: {
|
flake.nixosModules.autoUpdate-laptop = {
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
age.secrets.ntfy = {
|
||||||
|
file = ../../secrets/ntfy.age;
|
||||||
|
};
|
||||||
# Ensure your script is available system-wide
|
# Ensure your script is available system-wide
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
self.packages.${pkgs.system}.custom-autoupdate-laptop
|
self.packages.${pkgs.system}.custom-autoupdate-laptop
|
||||||
@@ -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, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
packages.custom-autoupdate-laptop = pkgs.writeShellApplication {
|
packages.custom-autoupdate-laptop = pkgs.writeShellApplication {
|
||||||
name = "custom-autoupdate";
|
name = "custom-autoupdate";
|
||||||
@@ -56,6 +117,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
text = ''
|
text = ''
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "$NTFY_SECRET"
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
FLAKE_DIR="/home/tomasr/nixos"
|
FLAKE_DIR="/home/tomasr/nixos"
|
||||||
@@ -81,9 +144,11 @@
|
|||||||
|
|
||||||
notify-send "Flake autoupdate" "Rebuild OK"
|
notify-send "Flake autoupdate" "Rebuild OK"
|
||||||
|
|
||||||
matrix-commander-rs --verbose -m "Flake rebuild succesfull.<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Laptop Flake rebuild successful" \
|
||||||
|
-H "Title: Flake autoupdate" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
else
|
else
|
||||||
notify-send "Flake autoupdate" "No changes"
|
notify-send "Flake autoupdate" "No changes"
|
||||||
git -C "$FLAKE_DIR" push
|
git -C "$FLAKE_DIR" push
|
||||||
@@ -94,9 +159,79 @@
|
|||||||
|
|
||||||
notify-send -u critical "Flake autoupdate" "FAILED"
|
notify-send -u critical "Flake autoupdate" "FAILED"
|
||||||
|
|
||||||
matrix-commander-rs --verbose -m "Flake rebuild failed.<br>Error: <pre>$ERROR_MSG</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Laptop Flake rebuild failed. Error: $ERROR_MSG" \
|
||||||
|
-H "Title: Flake autoupdate FAILED" \
|
||||||
|
-H "Priority: urgent" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
|
|
||||||
|
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git -C "$FLAKE_DIR" tag -d "pre-autoupdate-$TIME" # removes the tag
|
||||||
|
|
||||||
|
rm -f "$ERROR_FILE"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages.custom-autoupdate-desktop = pkgs.writeShellApplication {
|
||||||
|
name = "custom-autoupdate";
|
||||||
|
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
git
|
||||||
|
nixos-rebuild
|
||||||
|
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"
|
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
|
||||||
fi
|
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, ...}: {
|
flake.nixosModules.notifications = {pkgs, ...}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
libnotify # Library that sends desktop notifications to a notification daemon
|
libnotify # Library that sends desktop notifications to a notification daemon
|
||||||
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and swww to change wallpapers dinamically)
|
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
|
||||||
matrix-commander-rs # matrix client used to send notifications from scripts to my phone
|
|
||||||
# battery notifications
|
# battery notifications
|
||||||
self.packages.${pkgs.system}.custom-batterynotify
|
self.packages.${pkgs.system}.custom-batterynotify
|
||||||
self.packages.${pkgs.system}.custom-batterywarning
|
self.packages.${pkgs.system}.custom-batterywarning
|
||||||
# checks if matrix-commander-rs is installed and logged in
|
|
||||||
self.packages.${pkgs.system}.custom-checkMatrix
|
|
||||||
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
|
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
|
||||||
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
|
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
|
||||||
|
zoom-us
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
packages.custom-checkMatrix = pkgs.writeShellApplication {
|
|
||||||
name = "custom-checkMatrix";
|
|
||||||
|
|
||||||
runtimeInputs = with pkgs; [
|
|
||||||
matrix-commander-rs
|
|
||||||
libnotify
|
|
||||||
];
|
|
||||||
|
|
||||||
text = ''
|
|
||||||
expected="@totorile1:unredacted.org"
|
|
||||||
|
|
||||||
current="$(matrix-commander-rs --whoami | tr -d '\n')"
|
|
||||||
|
|
||||||
if [ "$current" != "$expected" ]; then
|
|
||||||
notify-send "matrix-commander-rs" \
|
|
||||||
"You are not logged in as @totorile1:unredacted.org\nLog:\n$current"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
packages.custom-gitnotify = pkgs.writeShellApplication {
|
packages.custom-gitnotify = pkgs.writeShellApplication {
|
||||||
name = "custom-gitnotify";
|
name = "custom-gitnotify";
|
||||||
runtimeInputs = with pkgs; [
|
runtimeInputs = with pkgs; [
|
||||||
git
|
git
|
||||||
libnotify
|
libnotify
|
||||||
|
curl
|
||||||
];
|
];
|
||||||
text = ''
|
text = ''
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source /run/agenix/ntfy
|
||||||
|
|
||||||
# Check if git is installed
|
# Check if git is installed
|
||||||
if ! command -v git >/dev/null 2>&1; then
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
exit 0
|
exit 0
|
||||||
@@ -52,9 +35,10 @@
|
|||||||
notify-send \
|
notify-send \
|
||||||
"Git not configured" \
|
"Git not configured" \
|
||||||
"Set your identity\n or remove this warning by removing the custom-gitnotify line in\n ~/nixos/modules/applications/hyprland.nix"
|
"Set your identity\n or remove this warning by removing the custom-gitnotify line in\n ~/nixos/modules/applications/hyprland.nix"
|
||||||
matrix-commander-rs --verbose -m "Git not configured.<br>Set your identify or remove this warning by removing the custom-gitnotify in ~/nixos/modules/applications/hyprland.nix<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
curl \
|
||||||
--html \
|
-u ":$NTFY_TOKEN" \
|
||||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
-d "Git not configured" \
|
||||||
|
"$NTFY_SERVER/Alerts"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
_: {
|
{inputs, ...}: {
|
||||||
flake.nixosModules.development = {
|
flake.nixosModules.development = {
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
@@ -17,19 +17,45 @@ _: {
|
|||||||
]))
|
]))
|
||||||
python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh)
|
python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh)
|
||||||
pkg-config
|
pkg-config
|
||||||
|
nixpkgs-review
|
||||||
gdb
|
gdb
|
||||||
raylib
|
raylib
|
||||||
glfw # raylib and some dependecies
|
glfw # raylib and some dependecies
|
||||||
gnumake
|
gnumake
|
||||||
go
|
go
|
||||||
direnv
|
direnv
|
||||||
|
git
|
||||||
|
gh
|
||||||
cling # c interpreter used for coding
|
cling # c interpreter used for coding
|
||||||
# lsp
|
# lsp
|
||||||
clang-tools
|
clang-tools
|
||||||
python311Packages.python-lsp-server
|
python314Packages.python-lsp-server
|
||||||
ltex-ls-plus
|
ltex-ls-plus
|
||||||
pylint
|
pylint
|
||||||
black
|
black
|
||||||
|
gnupg
|
||||||
|
pinentry-curses
|
||||||
|
inputs.nixpkgs-notifier.packages.${pkgs.system}.default
|
||||||
|
inputs.patent.packages.${pkgs.system}.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
flake.homeModules.development = _: {
|
||||||
|
home.file.".config/nixpkgs-notifier/config.json" = {
|
||||||
|
enable = true;
|
||||||
|
text = ''
|
||||||
|
{
|
||||||
|
"configTime": 3600,
|
||||||
|
"configFetchTime": 1,
|
||||||
|
"localNotify": true,
|
||||||
|
"matrix": {
|
||||||
|
"enable": true,
|
||||||
|
"room": "!BXRRokBmEdNOyYdfOF:matrix.org",
|
||||||
|
"ping": true,
|
||||||
|
"userPing": "@notificationbot_0000",
|
||||||
|
"userPingServer": "matrix.org"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
in {
|
in {
|
||||||
flake.nixosModules.documentation = {pkgs, ...}: {
|
flake.nixosModules.documentation = {pkgs, ...}: {
|
||||||
# unfortunatly this adds a lot of computation when nix rebuilds
|
# unfortunatly this adds a lot of computation when nix rebuilds
|
||||||
documentation.man.generateCaches = true; # used for the man script
|
documentation.man.cache.enable = true; # used for the man script
|
||||||
|
|
||||||
environment.pathsToLink = [
|
environment.pathsToLink = [
|
||||||
# see https://wiki.nixos.org/wiki/Documentation_Gaps#How_do_manpages_work?_Or:_environment.pathsToLink_and_buildEnv
|
# see https://wiki.nixos.org/wiki/Documentation_Gaps#How_do_manpages_work?_Or:_environment.pathsToLink_and_buildEnv
|
||||||
|
|||||||
@@ -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 = _: {
|
flake.nixosModules.nixUtils-laptop = _: {
|
||||||
# nixpkgs-review crashed my laptop multiple times. We must reduce how much ressources it can take.
|
# nixpkgs-review crashed my laptop multiple times. We must reduce how much ressources it can take.
|
||||||
# for reference, my laptop is a 12 core ryzen 7
|
# for reference, my laptop is a 12 core ryzen 7
|
||||||
@@ -6,10 +10,18 @@
|
|||||||
nix.settings.cores = 6;
|
nix.settings.cores = 6;
|
||||||
};
|
};
|
||||||
flake.nixosModules.nixUtils = {pkgs-unstable, ...}: {
|
flake.nixosModules.nixUtils = {pkgs-unstable, ...}: {
|
||||||
|
# Optimise the nix store
|
||||||
|
nix.optimise = {
|
||||||
|
automatic = true;
|
||||||
|
persistent = true;
|
||||||
|
randomizedDelaySec = "30min";
|
||||||
|
dates = "Thu *-*-* 16:00:00";
|
||||||
|
};
|
||||||
# Garbage collector of generations
|
# Garbage collector of generations
|
||||||
nix.gc = {
|
nix.gc = {
|
||||||
automatic = true;
|
automatic = true;
|
||||||
dates = "weekly";
|
dates = "Wed *-*-* 16:00:00";
|
||||||
|
persistent = true;
|
||||||
options = "--delete-older-than 7d"; # every week delete generations older than a month
|
options = "--delete-older-than 7d"; # every week delete generations older than a month
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -32,6 +44,7 @@
|
|||||||
vimPluginsUpdater # used for building plugins
|
vimPluginsUpdater # used for building plugins
|
||||||
nix-index
|
nix-index
|
||||||
statix
|
statix
|
||||||
|
self.packages.${pkgs-unstable.system}.custom-trimmer
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
perSystem = {pkgs, ...}: {
|
perSystem = {pkgs, ...}: {
|
||||||
|
|||||||
@@ -3,6 +3,12 @@ _: {
|
|||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
libreoffice
|
libreoffice
|
||||||
birdtray
|
birdtray
|
||||||
|
kdePackages.korganizer
|
||||||
|
#needed for korganizer
|
||||||
|
kdePackages.akonadi
|
||||||
|
kdePackages.akonadi-calendar
|
||||||
|
kdePackages.akonadi-calendar-tools
|
||||||
];
|
];
|
||||||
|
programs.kde-pim.kontact = true; # needed for korganizer
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
{self, ...}: {
|
{self, ...}: {
|
||||||
flake.nixosModules.otherUtils =
|
flake.nixosModules.otherUtils =
|
||||||
# try to keep packages here at a minium. Preferably use a dedicated file
|
# try to keep packages here at a minium. Preferably use a dedicated file
|
||||||
{
|
{pkgs, ...}: {
|
||||||
pkgs,
|
|
||||||
pkgs-unstable,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
gnome-calculator
|
gnome-calculator
|
||||||
snapshot
|
snapshot
|
||||||
@@ -22,7 +18,8 @@
|
|||||||
usbutils # used for lsusb
|
usbutils # used for lsusb
|
||||||
self.packages.${pkgs.system}.custom-tomato
|
self.packages.${pkgs.system}.custom-tomato
|
||||||
self.packages.${pkgs.system}.custom-syllabes
|
self.packages.${pkgs.system}.custom-syllabes
|
||||||
pkgs-unstable.bitwarden-desktop
|
# Electron 39 EOL. https://github.com/bitwarden/clients/pull/20448 should move it to 41. For the moment use the browser extension
|
||||||
|
#pkgs-unstable.bitwarden-desktop
|
||||||
fluffychat # matrix client
|
fluffychat # matrix client
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
_: {
|
||||||
|
flake.nixosModules.rss = {pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
newsflash
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -125,4 +125,4 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rollout_threshold_seed": null
|
"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