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
|
# NixOS Configuration
|
||||||

|

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