mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-12 09:30:54 +02:00
Compare commits
245
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
206780c3f9 | ||
|
|
6f342a6338 | ||
|
|
f1dae5ab9c | ||
|
|
b6690407f7 | ||
|
|
21c366244b | ||
|
|
ec22349a7a | ||
|
|
29c7a4a86c | ||
|
|
6263a11c4c | ||
|
|
1471a976f1 | ||
|
|
0ce25113e7 | ||
|
|
e49019c8ba | ||
|
|
bd85b284a6 | ||
|
|
7f2367720b | ||
|
|
14751f5cf0 | ||
|
|
419f5a6214 | ||
|
|
b5b329ab17 | ||
|
|
dc1b4caa24 | ||
|
|
c7d72333d4 | ||
|
|
04b3257c7d | ||
|
|
12bcb8ad6a | ||
|
|
229201a7c7 | ||
|
|
ace1780097 | ||
|
|
928b192611 | ||
|
|
3160e6a409 | ||
|
|
f76e16266b | ||
|
|
eec6da5803 | ||
|
|
282d076bf3 | ||
|
|
0e67b49ebd | ||
|
|
dd1c9bd990 | ||
|
|
20cef053c0 | ||
|
|
553796d6c7 | ||
|
|
63ec8d1945 | ||
|
|
588a1e77e8 | ||
|
|
eca6ad278d | ||
|
|
5e7550f6d7 | ||
|
|
abd6a6ca3c | ||
|
|
a7370a65e7 | ||
|
|
01cd080bf1 | ||
|
|
b24b16728a | ||
|
|
a80629a6e4 | ||
|
|
ff26348536 | ||
|
|
e672a99d95 | ||
|
|
35542be154 | ||
|
|
8b1e206d4f | ||
|
|
6304c65ea6 | ||
|
|
325ee56fa3 | ||
|
|
a9874f1b2a | ||
|
|
ba4f2b5bf2 | ||
|
|
72fae98a43 | ||
|
|
ab6b81a228 | ||
|
|
247ddefdc6 | ||
|
|
1a646b0c06 | ||
|
|
5d4d51b475 | ||
|
|
c6a30039e8 | ||
|
|
2b45b7f179 | ||
|
|
8268324958 | ||
|
|
2d0c655658 | ||
|
|
fb5cd58254 | ||
|
|
20ad4bb594 | ||
|
|
d83045353f | ||
|
|
806215b1b8 | ||
|
|
63baafdca6 | ||
|
|
0ca30a4110 | ||
|
|
fece2b565f | ||
|
|
3c7d3584fc | ||
|
|
a619a10851 | ||
|
|
97beca4f88 | ||
|
|
2e322fbb79 | ||
|
|
58ec4221ef | ||
|
|
e758819398 | ||
|
|
930e265420 | ||
|
|
523b104c43 | ||
|
|
4f3a74b741 | ||
|
|
2585a88780 | ||
|
|
52e5e4a4d4 | ||
|
|
2d8c797042 | ||
|
|
dd4fb62a2f | ||
|
|
09d92bc8e2 | ||
|
|
158a5c2b29 | ||
|
|
01bde96826 | ||
|
|
a140ce9560 | ||
|
|
ba4727f453 | ||
|
|
6525d6d599 | ||
|
|
c32e8112c6 | ||
|
|
ff1469dea2 | ||
|
|
89c87b8242 | ||
|
|
4bf8fe10c9 | ||
|
|
3b30916261 | ||
|
|
065012ed84 | ||
|
|
66ff0dc406 | ||
|
|
e4eb23f10f | ||
|
|
406baf2a5d | ||
|
|
2471741462 | ||
|
|
5039b2a37c | ||
|
|
22bc2f218f | ||
|
|
c1354a3b98 | ||
|
|
f8255c42ed | ||
|
|
bd86051c13 | ||
|
|
34cde6f6f4 | ||
|
|
59f5d84de0 | ||
|
|
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,120 @@
|
||||
name: Sync branches into main
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 14 * * 1" # Monday
|
||||
- cron: "0 14 * * 3" # Wednesday
|
||||
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
source:
|
||||
description: Branch to sync into main
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- laptop
|
||||
- desktop
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Determine source branch
|
||||
id: branch
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||
echo "source=${{ inputs.source }}" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DOW=$(date -u +%u)
|
||||
|
||||
case "$DOW" in
|
||||
1)
|
||||
echo "source=laptop" >> "$GITHUB_OUTPUT"
|
||||
;;
|
||||
3)
|
||||
echo "source=desktop" >> "$GITHUB_OUTPUT"
|
||||
;;
|
||||
*)
|
||||
echo "No sync scheduled today."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
- name: Check for changes
|
||||
run: |
|
||||
git fetch origin main "${{ steps.branch.outputs.source }}"
|
||||
HAS_CHANGES=true
|
||||
if git diff --quiet \
|
||||
"origin/main...origin/${{ steps.branch.outputs.source }}"; then
|
||||
HAS_CHANGES=false
|
||||
fi
|
||||
|
||||
- name: Check for existing PR
|
||||
id: existing
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if $HAS_CHANGES; then
|
||||
PR_NUMBER=$(gh pr list \
|
||||
--base main \
|
||||
--head "${{ steps.branch.outputs.source }}" \
|
||||
--state open \
|
||||
--json number \
|
||||
--jq '.[0].number // empty')
|
||||
|
||||
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Create PR
|
||||
id: create
|
||||
if: steps.existing.outputs.number == ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if $HAS_CHANGES; then
|
||||
gh pr create \
|
||||
--base main \
|
||||
--head "${{ steps.branch.outputs.source }}" \
|
||||
--title "Weekly sync: ${{ steps.branch.outputs.source }} → main" \
|
||||
--body "This pull request was created automatically by GitHub Actions."
|
||||
|
||||
PR_NUMBER=$(gh pr list \
|
||||
--base main \
|
||||
--head "${{ steps.branch.outputs.source }}" \
|
||||
--state open \
|
||||
--json number \
|
||||
--jq '.[0].number')
|
||||
|
||||
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
- name: Determine PR number
|
||||
id: pr
|
||||
run: |
|
||||
if $HAS_CHANGES; then
|
||||
if [ -n "${{ steps.existing.outputs.number }}" ]; then
|
||||
echo "number=${{ steps.existing.outputs.number }}" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "number=${{ steps.create.outputs.number }}" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Enable auto-merge
|
||||
if: steps.pr.outputs.number != ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if $HAS_CHANGES; then
|
||||
gh pr merge \
|
||||
"${{ steps.pr.outputs.number }}" \
|
||||
--auto \
|
||||
--merge
|
||||
fi
|
||||
@@ -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
|
||||

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