Compare commits
331 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 924e9b7ab4 | |||
| beb9705d2f | |||
| b5a8a9a545 | |||
| 6365f7b4f3 | |||
| 27babd819c | |||
| 0d0d6ebb56 | |||
| fa8efef26a | |||
| e8af512370 | |||
| 15149a7968 | |||
| 9f53c984f4 | |||
| 4828dc5a21 | |||
| 2d801ae06a | |||
| d8f2812003 | |||
| e863aea052 | |||
| 04163b2c79 | |||
| 3f0333b4a0 | |||
| d7c245ed8e | |||
| 83831f6a75 | |||
| 9be3caddbc | |||
| 76ecdba67e | |||
| 03f0570342 | |||
| 4e9a1dae72 | |||
| b668212daf | |||
| 859a4b20a5 | |||
| 72c8a0e7e2 | |||
| 351bd99fdf | |||
| 1ea530a2a6 | |||
| 7277135a5b | |||
| 8c6fdd5b51 | |||
| 1d1b76b329 | |||
| 9ca56553f7 | |||
| 4361d6e0a9 | |||
| e6bdf0f984 | |||
| 8331e8c875 | |||
| ed8a6297b7 | |||
| eb5ebb056c | |||
| 8b86b1ccc0 | |||
| ce5be49975 | |||
| 85b1605ea9 | |||
| 0bfe20a736 | |||
| 5ddac8b95b | |||
| b1e5e83744 | |||
| c42c6cd83a | |||
| afab4c4d0a | |||
| 284bd502f0 | |||
| 9f7cf822ed | |||
| b8264643e6 | |||
| 8b9eae079e | |||
| c00ef6ab7c | |||
| 16f79d8a7d | |||
| c914256c97 | |||
| 2240c4e256 | |||
| 8f97bc80e3 | |||
| 392df35a1c | |||
| d916c8f36a | |||
| 03b73e7090 | |||
| d3a3617e29 | |||
| 4da3beb168 | |||
| 74175100c7 | |||
| c8d487d374 | |||
| 13c1d5864d | |||
| 91d0d875ea | |||
| 1b620d556b | |||
| 65eb518651 | |||
| e15a9c0c01 | |||
| 2c49a7318b | |||
| 93944f1391 | |||
| c777f0e5f1 | |||
| 0af0720268 | |||
| 3d91ef0932 | |||
| f445891c25 | |||
| cf08bc61b2 | |||
| 3fedba90c4 | |||
| fc803fd67e | |||
| a4f27b49af | |||
| 68218ec187 | |||
| 641ebc7ad9 | |||
| 8597f372c0 | |||
| 2fc9fe9e1a | |||
| 75312f7622 | |||
| 86fe2646d1 | |||
| 57125b4bf8 | |||
| 8fdeb93bc5 | |||
| ccebf381b0 | |||
| 09d0847ea4 | |||
| b6119bd2cc | |||
| 3e29186990 | |||
| e1c1ff801d | |||
| eb2a4ea67a | |||
| ae0393ae37 | |||
| cd876e3a17 | |||
| 69c5e8d9be | |||
| fb317980e2 | |||
| 2615b290a1 | |||
| e43910155c | |||
| 38df2ff9d6 | |||
| 0a00c2b25a | |||
| eecbb372cb | |||
| 28245e92f5 | |||
| 970da745ad | |||
| 338714285e | |||
| f934ff1092 | |||
| 164d665324 | |||
| 190010e31f | |||
| 2b42883523 | |||
| cd58dde5fd | |||
| 3af90c044f | |||
| 91e57025b7 | |||
| 48993bb1e6 | |||
| 64d2ca9c23 | |||
| 2df0370ce0 | |||
| 2fea832484 | |||
| 90028fb7fe | |||
| fb41beb270 | |||
| 5fc8c72a51 | |||
| 283ef9c680 | |||
| d824d6269c | |||
| 25cad55c78 | |||
| 820e082f49 | |||
| 264942168d | |||
| fe93e06d34 | |||
| a82ddf87df | |||
| 19493e8ef6 | |||
| a959fb46be | |||
| 7c242b437d | |||
| 98f9b3a8fc | |||
| fd0f27145a | |||
| d05764d3dd | |||
| d87450b305 | |||
| 2c6009b5b8 | |||
| a741b9b559 | |||
| bb801f4e4c | |||
| c37d347ba1 | |||
| 0bfc27e90f | |||
| 53df838182 | |||
| f29d5d4207 | |||
| 9aea5cd1f6 | |||
| 9666439eeb | |||
| 50e6fac406 | |||
| ce69f89492 | |||
| c2d28ac798 | |||
| 22896ea923 | |||
| 203ffb3738 | |||
| d2d28a968f | |||
| f7e9fd9cad | |||
| 6e5a9ca208 | |||
| 85c3c570dd | |||
| db6366a491 | |||
| f8140164d1 | |||
| 1a927b60be | |||
| f06d9b0e01 | |||
| 83977d50ae | |||
| 6292a84a01 | |||
| 28c64bd454 | |||
| a377ad8176 | |||
| dafbcb9f8d | |||
| 513dab012d | |||
| 630e634cd2 | |||
| f7a528a94f | |||
| 35f9aaca7d | |||
| 989f5407ec | |||
| cb1230214a | |||
| bc9098525b | |||
| 0bd973fb25 | |||
| 90b1e43b99 | |||
| 7fce74c605 | |||
| 1815e8e3f6 | |||
| a47d0a090d | |||
| 5832fcb26b | |||
| 00cbe6876e | |||
| b8a2c3c10d | |||
| 421a389bdb | |||
| c925026183 | |||
| 5d77bb0959 | |||
| 71a1bad913 | |||
| 8385b2d6e6 | |||
| 0c64697063 | |||
| a0fadd7a1b | |||
| c366ce1cbe | |||
| ba96c9b687 | |||
| 790b5ec4e7 | |||
| 6be10e325a | |||
| 965a5eef13 | |||
| 0617934f31 | |||
| 23d426f0ea | |||
| a7545faa45 | |||
| 92a6c20c18 | |||
| f3ee33177f | |||
| da57debd66 | |||
| a483112a32 | |||
| 68ea0f03f2 | |||
| cbbef2a3a6 | |||
| 8279721102 | |||
| 922c492412 | |||
| 36d0ee851e | |||
| d0a38fbfa3 | |||
| 40d2622862 | |||
| 5640408d9f | |||
| 789157e3bf | |||
| 1c7d4a513d | |||
| c46418c783 | |||
| 3dd73e0b24 | |||
| bdff3d97e9 | |||
| 8bfd76f23c | |||
| b123ab87df | |||
| 6adbd2d38c | |||
| ac36661d4e | |||
| 8a700174b1 | |||
| 786e3967e3 | |||
| f8bf8ed7a4 | |||
| bcff4d2cbe | |||
| 251f88df02 | |||
| 5847ecfe1b | |||
| 573fbdd240 | |||
| 65b7cf4ab6 | |||
| a59b356e9d | |||
| dec75b3f7e | |||
| 83f7d01824 | |||
| 91da240751 | |||
| 02fcfb5008 | |||
| 2f970835b2 | |||
| 77edacc9d4 | |||
| b6bd1ec321 | |||
| a60ca21925 | |||
| d713ba1f15 | |||
| 904bb98f36 | |||
| 36ac10c6dd | |||
| 24f4f270c1 | |||
| d93a2a7993 | |||
| 67989ca1a8 | |||
| d65b4380e7 | |||
| 3d4deae65a | |||
| daf1e39df3 | |||
| c154d91613 | |||
| 5631236aff | |||
| 8933b405d4 | |||
| c66d7c21da | |||
| bd0d7e5495 | |||
| 88235bb32e | |||
| a2bce9715d | |||
| 710e431dad | |||
| fb7b164a6c | |||
| 335205338f | |||
| ebbbc8da58 | |||
| dca3d05aec | |||
| f83298f632 | |||
| a1d47a2744 | |||
| c396ca7400 | |||
| a275c8d43e | |||
| 74ed35e5f4 | |||
| 21c8f8c7e4 | |||
| 98ebbcfbd3 | |||
| 7eeff4c125 | |||
| 16d3391714 | |||
| fcba25620b | |||
| 68994153d0 | |||
| 62cf076375 | |||
| 135cd0642b | |||
| 3733eb8b3a | |||
| 2d4374899c | |||
| ba2d6eb02a | |||
| 0c754f1930 | |||
| 577aa1cc33 | |||
| fe9678388d | |||
| 49130f062d | |||
| 0b3613086c | |||
| ce51dd5dd3 | |||
| d130ffb20d | |||
| 99056c9f32 | |||
| 5895f4beb1 | |||
| a2eacddd44 | |||
| 3eaabeacd9 | |||
| 4bb34105f1 | |||
| efc4b199a4 | |||
| 049a95e7b0 | |||
| 10f09226eb | |||
| 75e75a571e | |||
| 9aabffc52a | |||
| 5eab2e1ccc | |||
| 49e920ac97 | |||
| 16d61d8d73 | |||
| 45daaddfb6 | |||
| 818bb17a3f | |||
| cf66663534 | |||
| 22dc0e1915 | |||
| d7f7561cbb | |||
| a6a4f594cf | |||
| 581f281950 | |||
| aee3b50212 | |||
| 30e89ac9d3 | |||
| ff4ceecd67 | |||
| 7c98655a99 | |||
| fc51305ad6 | |||
| 5c8044283a | |||
| dc4f025318 | |||
| 565e5f8224 | |||
| bdc9c97289 | |||
| 4a4284bce2 | |||
| bcb20eb1ca | |||
| 74d858d5c5 | |||
| dd07992751 | |||
| e4f9e94269 | |||
| 69c9bfca26 | |||
| ed5cbe1a05 | |||
| 147be34498 | |||
| 221e4878b4 | |||
| 0f6f51975d | |||
| e952cfa34f | |||
| 84f5b7537b | |||
| 9cbd262e14 | |||
|
|
159dbbfe90 | ||
| 183ebd78d1 | |||
| 147c52ee20 | |||
| 4159ee98cc | |||
| 25db001181 | |||
| 3c72a10ec0 | |||
| aa17ed51c8 | |||
| 8bace4cb22 | |||
| 99e5c29a3b | |||
| 38281315f7 | |||
| c569ed03d2 | |||
| c666b582f6 | |||
| b20c1b53d1 | |||
| 7ad9530040 | |||
| fdad5d88bb | |||
| 32b291be20 | |||
| 3b5c8735be | |||
| e531e6cb68 | |||
| e15aa9ba44 | |||
| cd802ab3a6 | |||
|
|
3748aae1c5 |
119 changed files with 5878 additions and 1901 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,6 +2,7 @@
|
|||
# Ignore build outputs from performing a nix-build or `nix build` command
|
||||
result
|
||||
result-*
|
||||
repl-result*
|
||||
|
||||
# ---> Kate
|
||||
# Ignore kate's swap files
|
||||
|
|
|
|||
10
.justfile
10
.justfile
|
|
@ -14,14 +14,10 @@ print-recipes:
|
|||
update:
|
||||
nix flake update
|
||||
|
||||
# Update a single input
|
||||
update-input input:
|
||||
nix flake lock --update-input {{input}}
|
||||
|
||||
@edit-secrets:
|
||||
git clone ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets.git /tmp/secrets
|
||||
sed -i 's\git+ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets\/tmp/secrets\g' flake.nix
|
||||
just -q update-input secrets
|
||||
git clone ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets.git /tmp/secrets
|
||||
sed -i 's\git+ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets\/tmp/secrets\g' flake.nix
|
||||
nix flake update secrets
|
||||
echo "{{bold}}All done!"
|
||||
echo "{{normal}}Remember to restore flake.nix"
|
||||
echo ""
|
||||
|
|
|
|||
371
flake.lock
generated
371
flake.lock
generated
|
|
@ -10,11 +10,11 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1723293904,
|
||||
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
|
||||
"lastModified": 1762618334,
|
||||
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
||||
"rev": "fcdea223397448d35d9b31f798479227e80183f6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -24,12 +24,15 @@
|
|||
}
|
||||
},
|
||||
"catppuccin": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730036420,
|
||||
"narHash": "sha256-rv2bz7J6Wo7AenPiu4+ptCB1AFyaMcS77y89zbRAtI8=",
|
||||
"lastModified": 1765990358,
|
||||
"narHash": "sha256-l8x0gU8mnYaGMl+gWrsSHKBJlZWD8KXJfHTkRlFiPI0=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"rev": "0b7bf04628414a402d255924f65e9a0d1a53d92b",
|
||||
"rev": "de1b60ca45a578f59f7d84c8d338b346017b2161",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -38,32 +41,51 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"catppuccin-vsc": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"catppuccin-konsole": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1725822842,
|
||||
"narHash": "sha256-fOR805OwfINbMFzqSmE8piFAFHM9fE+BDdQQUahqDaQ=",
|
||||
"lastModified": 1720277724,
|
||||
"narHash": "sha256-d5+ygDrNl2qBxZ5Cn4U7d836+ZHz77m6/yxTIANd9BU=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "vscode",
|
||||
"rev": "54316f9afc31c3b5070a242cd3ca47d66ab0e9ac",
|
||||
"repo": "konsole",
|
||||
"rev": "3b64040e3f4ae5afb2347e7be8a38bc3cd8c73a8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "catppuccin",
|
||||
"repo": "vscode",
|
||||
"repo": "konsole",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"copyparty": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1766045858,
|
||||
"narHash": "sha256-lsbdHVSc5EB2+XgKDbeG1DjLLY5DnzlKQIPV0uQu/bQ=",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"rev": "0e6b167167eaf04036df8576f1ea96bc116ea951",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"eza-themes": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1730050654,
|
||||
"narHash": "sha256-Gs21+A/to2AqjQsqMlWeOuSowYPOuSZ3fK6LRdBPUmI=",
|
||||
"lastModified": 1765813820,
|
||||
"narHash": "sha256-WcwzKm2mi/tyA+zZCpyvTdrOrZ1R1ENA3t622SGzFas=",
|
||||
"owner": "eza-community",
|
||||
"repo": "eza-themes",
|
||||
"rev": "74be26bbd2ce76b29c37250a2fb7cb5d6644c964",
|
||||
"rev": "1239cb1dd23fa8b70865550db77701b164a53cde",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -72,48 +94,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726560853,
|
||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||
"lastModified": 1678901627,
|
||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -124,14 +111,14 @@
|
|||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726560853,
|
||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -142,32 +129,14 @@
|
|||
},
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_4"
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681202837,
|
||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_4": {
|
||||
"inputs": {
|
||||
"systems": "systems_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -214,11 +183,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1703113217,
|
||||
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
|
||||
"lastModified": 1745494811,
|
||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
|
||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -234,11 +203,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730450782,
|
||||
"narHash": "sha256-0AfApF8aexgB6o34qqLW2cCX4LaWJajBVdU6ddiWZBM=",
|
||||
"lastModified": 1765980955,
|
||||
"narHash": "sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs+zlQ07dGQFk4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "8ca921e5a806b5b6171add542defe7bdac79d189",
|
||||
"rev": "89c9508bbe9b40d36b3dc206c2483ef176f15173",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -254,16 +223,16 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1726989464,
|
||||
"narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=",
|
||||
"lastModified": 1765979862,
|
||||
"narHash": "sha256-/r9/1KamvbHJx6I40H4HsSXnEcBAkj46ZwibhBx9kg0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176",
|
||||
"rev": "d3135ab747fd9dac250ffb90b4a7e80634eacbe9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-24.05",
|
||||
"ref": "release-25.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
@ -276,11 +245,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730441026,
|
||||
"narHash": "sha256-xmZQFGeIm2TzXv4jGaQ3nfBoUbt4gKbIv/SHVWw93ag=",
|
||||
"lastModified": 1766067735,
|
||||
"narHash": "sha256-cRC/rOYRtZNzc5y9nTccozyo/mkI4/1eFE33Aqgs+SQ=",
|
||||
"owner": "Jovian-Experiments",
|
||||
"repo": "Jovian-NixOS",
|
||||
"rev": "bd1da5657b8903b293a0ff51eb896a91a544ebed",
|
||||
"rev": "34a16089be30f77ac9444907ec97c02b4b711896",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -292,11 +261,11 @@
|
|||
"lix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1730433081,
|
||||
"narHash": "sha256-1oqkMcFQyAqCvqkjG9K3NaRLyB1qkXXiZoxe4rwM6ag=",
|
||||
"rev": "834450e237b82230934b5d25ed212b5a55938cc5",
|
||||
"lastModified": 1765883751,
|
||||
"narHash": "sha256-clrWX/t2swPGBVs50Yegq2HK3q5bbwOt3kWMsL7JIZM=",
|
||||
"rev": "fc0073f54095f15ee272621d4746eb9f40946385",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/834450e237b82230934b5d25ed212b5a55938cc5.tar.gz?rev=834450e237b82230934b5d25ed212b5a55938cc5"
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/fc0073f54095f15ee272621d4746eb9f40946385.tar.gz?rev=fc0073f54095f15ee272621d4746eb9f40946385"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
|
@ -305,7 +274,7 @@
|
|||
},
|
||||
"lix-module": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flakey-profile": "flakey-profile",
|
||||
"lix": [
|
||||
"lix"
|
||||
|
|
@ -315,11 +284,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727752861,
|
||||
"narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=",
|
||||
"rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d",
|
||||
"lastModified": 1764519849,
|
||||
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
|
||||
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d.tar.gz?rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d"
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
|
@ -328,7 +297,7 @@
|
|||
},
|
||||
"lix-module-unstable": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"flakey-profile": "flakey-profile_2",
|
||||
"lix": [
|
||||
"lix"
|
||||
|
|
@ -338,11 +307,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727752861,
|
||||
"narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=",
|
||||
"rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d",
|
||||
"lastModified": 1764519849,
|
||||
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
|
||||
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d.tar.gz?rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d"
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
|
@ -351,11 +320,11 @@
|
|||
},
|
||||
"nix-flatpak": {
|
||||
"locked": {
|
||||
"lastModified": 1730108712,
|
||||
"narHash": "sha256-vIvmXmjAQIY39hACGFe/cdBK2r3ZprpHLwX2HIy7Mj8=",
|
||||
"lastModified": 1754777568,
|
||||
"narHash": "sha256-0bBqT+3XncgF8F03RFAamw9vdf0VmaDoIJLTGkjfQZs=",
|
||||
"owner": "gmodena",
|
||||
"repo": "nix-flatpak",
|
||||
"rev": "1cba177bb0a948c919af7596e40bef307543d40a",
|
||||
"rev": "62f636b87ef6050760a8cb325cadb90674d1e23e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -389,11 +358,11 @@
|
|||
},
|
||||
"nix-impermanence": {
|
||||
"locked": {
|
||||
"lastModified": 1730403150,
|
||||
"narHash": "sha256-W1FH5aJ/GpRCOA7DXT/sJHFpa5r8sq2qAUncWwRZ3Gg=",
|
||||
"lastModified": 1737831083,
|
||||
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "impermanence",
|
||||
"rev": "0d09341beeaa2367bac5d718df1404bf2ce45e6f",
|
||||
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -409,11 +378,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1729999765,
|
||||
"narHash": "sha256-LYsavZXitFjjyETZoij8usXjTa7fa9AIF3Sk3MJSX+Y=",
|
||||
"lastModified": 1765267181,
|
||||
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "0e3a8778c2ee218eff8de6aacf3d2fa6c33b2d4f",
|
||||
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -429,11 +398,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1729999765,
|
||||
"narHash": "sha256-LYsavZXitFjjyETZoij8usXjTa7fa9AIF3Sk3MJSX+Y=",
|
||||
"lastModified": 1765267181,
|
||||
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "0e3a8778c2ee218eff8de6aacf3d2fa6c33b2d4f",
|
||||
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -442,35 +411,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-minecraft": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730426071,
|
||||
"narHash": "sha256-2BkSiHqyWikpz9HSgTBk5kikaQ5m0Rs60C9KA2kf53o=",
|
||||
"owner": "Infinidoge",
|
||||
"repo": "nix-minecraft",
|
||||
"rev": "4b371c3d119493051d081ff5b6cff689a97ad1a1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Infinidoge",
|
||||
"repo": "nix-minecraft",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1730368399,
|
||||
"narHash": "sha256-F8vJtG389i9fp3k2/UDYHMed3PLCJYfxCqwiVP7b9ig=",
|
||||
"lastModified": 1764440730,
|
||||
"narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "da14839ac5f38ee6adbdb4e6db09b5eef6d6ccdc",
|
||||
"rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -482,11 +429,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1712963716,
|
||||
"narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=",
|
||||
"lastModified": 1763966396,
|
||||
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "cfd6b5fc90b15709b780a5a1619695a88505a176",
|
||||
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -498,26 +445,26 @@
|
|||
},
|
||||
"nixpkgs-raw": {
|
||||
"locked": {
|
||||
"lastModified": 1730327045,
|
||||
"narHash": "sha256-xKel5kd1AbExymxoIfQ7pgcX6hjw9jCgbiBjiUfSVJ8=",
|
||||
"lastModified": 1765838191,
|
||||
"narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "080166c15633801df010977d9d7474b4a6c549d7",
|
||||
"rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-24.05",
|
||||
"ref": "nixos-25.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable-raw": {
|
||||
"locked": {
|
||||
"lastModified": 1730200266,
|
||||
"narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
|
||||
"lastModified": 1765779637,
|
||||
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd",
|
||||
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -526,21 +473,6 @@
|
|||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nur": {
|
||||
"locked": {
|
||||
"lastModified": 1730455118,
|
||||
"narHash": "sha256-E5yWeAUKohUot11JBfH7apOyPjqs3z2/fAtUc2LNfHw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "5bf603459b923edbee4955e9fc94b94662add85c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plasma-manager": {
|
||||
"inputs": {
|
||||
"home-manager": [
|
||||
|
|
@ -551,11 +483,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730366788,
|
||||
"narHash": "sha256-0Ezvv4KkyFdLAblPBFDgZbiMLlJZtpHruT2i4KC2wIY=",
|
||||
"lastModified": 1763909441,
|
||||
"narHash": "sha256-56LwV51TX/FhgX+5LCG6akQ5KrOWuKgcJa+eUsRMxsc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "plasma-manager",
|
||||
"rev": "f634d5f6ee9be365b2ca08b2d00e0e3b0c240b9e",
|
||||
"rev": "b24ed4b272256dfc1cc2291f89a9821d5f9e14b4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -568,7 +500,8 @@
|
|||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
"catppuccin": "catppuccin",
|
||||
"catppuccin-vsc": "catppuccin-vsc",
|
||||
"catppuccin-konsole": "catppuccin-konsole",
|
||||
"copyparty": "copyparty",
|
||||
"eza-themes": "eza-themes",
|
||||
"home-manager": "home-manager_2",
|
||||
"home-manager-unstable": "home-manager-unstable",
|
||||
|
|
@ -580,30 +513,48 @@
|
|||
"nix-impermanence": "nix-impermanence",
|
||||
"nix-index-db": "nix-index-db",
|
||||
"nix-index-db-unstable": "nix-index-db-unstable",
|
||||
"nix-minecraft": "nix-minecraft",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs-raw": "nixpkgs-raw",
|
||||
"nixpkgs-unstable-raw": "nixpkgs-unstable-raw",
|
||||
"nur": "nur",
|
||||
"plasma-manager": "plasma-manager",
|
||||
"secrets": "secrets",
|
||||
"vscode-extensions": "vscode-extensions"
|
||||
"sops-nix": "sops-nix"
|
||||
}
|
||||
},
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1726137390,
|
||||
"narHash": "sha256-RaTOgscAl0pnAT/1DwyitTfFNwFDPZaqN/vTaqAoCTM=",
|
||||
"lastModified": 1766143747,
|
||||
"narHash": "sha256-bG4QoCZLUDrubYFuRvxiXhycBD3R+UjrzXrNZ+qRnio=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "994526ba9affd6e6d617b1743126a36846530c93",
|
||||
"revCount": 24,
|
||||
"rev": "8921f23861a82f0f8d706c276bc738ca72c053b1",
|
||||
"revCount": 41,
|
||||
"type": "git",
|
||||
"url": "ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets"
|
||||
"url": "ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets"
|
||||
"url": "ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765836173,
|
||||
"narHash": "sha256-hWRYfdH2ONI7HXbqZqW8Q1y9IRbnXWvtvt/ONZovSNY=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "443a7f2e7e118c4fc63b7fae05ab3080dd0e5c63",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
|
@ -650,58 +601,6 @@
|
|||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_4": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_5": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"vscode-extensions": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
"flake-utils": "flake-utils_4",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1730426202,
|
||||
"narHash": "sha256-swwKpE3lrdvcSh6Hjyf/eSe/zPnsZgeVlSl+B4yBpeo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "96dcbddd24edc60ad47f41bb2a73e06099eba4af",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
|
|||
77
flake.nix
77
flake.nix
|
|
@ -3,10 +3,10 @@
|
|||
|
||||
inputs = {
|
||||
secrets = {
|
||||
url = "git+ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets";
|
||||
url = "git+ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets";
|
||||
flake = false;
|
||||
};
|
||||
nixpkgs-raw.url = "nixpkgs/nixos-24.05";
|
||||
nixpkgs-raw.url = "nixpkgs/nixos-25.11";
|
||||
nixpkgs-unstable-raw.url = "nixpkgs/nixos-unstable";
|
||||
|
||||
agenix = {
|
||||
|
|
@ -16,9 +16,13 @@
|
|||
darwin.follows = ""; # Not using this on MacOS, so this doesn't pull it's dependencies
|
||||
};
|
||||
};
|
||||
sops-nix = {
|
||||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-24.05";
|
||||
url = "github:nix-community/home-manager/release-25.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
};
|
||||
|
||||
|
|
@ -36,6 +40,9 @@
|
|||
|
||||
nix-impermanence.url = "github:nix-community/impermanence";
|
||||
|
||||
copyparty.url = "github:9001/copyparty";
|
||||
copyparty.inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
|
||||
/*
|
||||
These are the same input, just following different nixpkgs versions
|
||||
This avoids some wierdness when using one that follows unstable on a stable nixpkgs
|
||||
|
|
@ -56,16 +63,8 @@
|
|||
inputs.home-manager.follows = "home-manager-unstable";
|
||||
};
|
||||
|
||||
catppuccin-vsc.url = "github:catppuccin/vscode";
|
||||
|
||||
vscode-extensions = {
|
||||
url = "github:nix-community/nix-vscode-extensions";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
};
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/main";
|
||||
|
||||
nur.url = "github:nix-community/NUR";
|
||||
|
||||
catppuccin.url = "github:catppuccin/nix";
|
||||
|
||||
lix-module = {
|
||||
|
|
@ -79,11 +78,6 @@
|
|||
inputs.lix.follows = "lix";
|
||||
};
|
||||
|
||||
nix-minecraft = {
|
||||
url = "github:Infinidoge/nix-minecraft";
|
||||
inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
};
|
||||
|
||||
# Non flake inputs / random things
|
||||
lix = {
|
||||
url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
|
||||
|
|
@ -94,6 +88,11 @@
|
|||
url = "github:eza-community/eza-themes";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
catppuccin-konsole = {
|
||||
url = "github:catppuccin/konsole";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {...} @ inputs:
|
||||
|
|
@ -105,20 +104,22 @@
|
|||
name = "patched-nixpkgs-unstable";
|
||||
src = nixpkgs-unstable-raw;
|
||||
patches = [
|
||||
./nixpkgs-patches/handheld-daemon-ui-init.patch
|
||||
./nixpkgs-patches/pr471291.patch
|
||||
./nixpkgs-patches/revert-mangohud-update.patch
|
||||
];
|
||||
};
|
||||
nixpkgs-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches {
|
||||
name = "patched-nixpkgs";
|
||||
src = nixpkgs-raw;
|
||||
patches = [];
|
||||
patches = [
|
||||
];
|
||||
};
|
||||
# https://discourse.nixos.org/t/proper-way-of-applying-patch-to-system-managed-via-flake/21073/26
|
||||
nixpkgs-unstable = (import "${nixpkgs-unstable-patched}/flake.nix").outputs {self = inputs.self;};
|
||||
nixpkgs = (import "${nixpkgs-patched}/flake.nix").outputs {self = inputs.self;};
|
||||
nixpkgs-unstable = (import "${nixpkgs-unstable-patched}/flake.nix").outputs {self = inputs.nixpkgs-unstable-raw;};
|
||||
nixpkgs = (import "${nixpkgs-patched}/flake.nix").outputs {self = inputs.nixpkgs-raw;};
|
||||
in {
|
||||
formatter.x86_64-linux = nixpkgs-unstable.legacyPackages.x86_64-linux.alejandra;
|
||||
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
|
||||
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShellNoCC {
|
||||
name = "toast-devshell";
|
||||
# The agenix cli is not needed to activate a configuration, so instead of installing it
|
||||
# I'll just add it to de devShell, since that's the only real time I'm going to use it.
|
||||
|
|
@ -135,11 +136,18 @@
|
|||
export PS1="$PS1(toast-configs)> "
|
||||
'';
|
||||
};
|
||||
overlays.default = final: prev: {
|
||||
kasane-teto-cursor = final.callPackage ./pkgs/kasane-teto-cursor {};
|
||||
kame-editor = final.callPackage ./pkgs/kame-editor {};
|
||||
kame-tools = final.callPackage ./pkgs/kame-tools {};
|
||||
rstmcpp = final.callPackage ./pkgs/rstmcpp {};
|
||||
};
|
||||
packages = {
|
||||
x86_64-linux = with import nixpkgs-unstable-raw {system = "x86_64-linux";}; {
|
||||
anything-sync-daemon = callPackage ./pkgs/anything-sync-daemon {};
|
||||
discord-krisp-fixer = callPackage ./pkgs/discord-krisp-fixer {};
|
||||
kasane-teto-cursor = callPackage ./pkgs/kasane-teto-cursor {};
|
||||
x86_64-linux = with import nixpkgs-unstable-raw {
|
||||
system = "x86_64-linux";
|
||||
overlays = [self.overlays.default];
|
||||
}; {
|
||||
inherit kasane-teto-cursor kame-editor kame-tools rstmcpp;
|
||||
};
|
||||
};
|
||||
nixosConfigurations = let
|
||||
|
|
@ -159,21 +167,20 @@
|
|||
pkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs =
|
||||
if stable
|
||||
then nixpkgs-patched
|
||||
else nixpkgs-unstable-patched;
|
||||
flakeSelf = self;
|
||||
};
|
||||
lib = import ./lib {nixpkgs = pkgs;};
|
||||
modules =
|
||||
[
|
||||
agenix.nixosModules.default
|
||||
sops-nix.nixosModules.sops
|
||||
(
|
||||
if stable
|
||||
then home-manager
|
||||
else home-manager-unstable
|
||||
)
|
||||
.nixosModule
|
||||
.nixosModules
|
||||
.home-manager
|
||||
(
|
||||
if stable
|
||||
then nix-index-db
|
||||
|
|
@ -215,26 +222,18 @@
|
|||
./roles/gaming
|
||||
];
|
||||
WinMax2.modules = [
|
||||
jovian.nixosModules.default
|
||||
nixos-hardware.nixosModules.gpd-win-max-2-2023
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
./roles/school
|
||||
];
|
||||
Everest = {
|
||||
stable = true;
|
||||
modules = [
|
||||
nix-minecraft.nixosModules.minecraft-servers
|
||||
{nixpkgs.overlays = [nix-minecraft.overlay];}
|
||||
copyparty.nixosModules.default
|
||||
./roles/server
|
||||
];
|
||||
};
|
||||
iMac.modules = [
|
||||
./roles/desktop
|
||||
./roles/gnome
|
||||
./roles/school
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
10
lib/default.nix
Normal file
10
lib/default.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{nixpkgs}:
|
||||
nixpkgs.lib.extend (final: prev: {
|
||||
toast = let
|
||||
importLib = file: import file {lib = final;};
|
||||
in {
|
||||
patches = importLib ./patches.nix;
|
||||
networkManager = importLib ./networkManager.nix;
|
||||
syncthing = importLib ./syncthing.nix;
|
||||
};
|
||||
})
|
||||
23
lib/networkManager.nix
Normal file
23
lib/networkManager.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{lib}: {
|
||||
/**
|
||||
Make a NetworkManager wifi profile, to be used with ensureProfiles
|
||||
*/
|
||||
mkWifiProfile = {
|
||||
id,
|
||||
ssid,
|
||||
priority ? 0,
|
||||
wifi-security,
|
||||
}: {
|
||||
connection = {
|
||||
inherit id;
|
||||
type = "wifi";
|
||||
autoconnect-priority = priority;
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
inherit ssid;
|
||||
};
|
||||
inherit wifi-security;
|
||||
};
|
||||
}
|
||||
13
lib/patches.nix
Normal file
13
lib/patches.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{lib}: {
|
||||
/**
|
||||
Get a list of patches from a path.
|
||||
*/
|
||||
patchesInPath = path: let
|
||||
pathContents = builtins.readDir path;
|
||||
filter = name: value:
|
||||
(value == "regular" || value == "symlink") && lib.strings.hasSuffix ".patch" name;
|
||||
filteredContents = lib.attrsets.filterAttrs filter pathContents;
|
||||
patchFilenames = builtins.attrNames filteredContents;
|
||||
in
|
||||
builtins.map (value: lib.path.append path value) patchFilenames;
|
||||
}
|
||||
5
lib/syncthing.nix
Normal file
5
lib/syncthing.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{lib}: let
|
||||
data = import ./../syncthing.nix;
|
||||
in {
|
||||
devices = builtins.getAttr "devices" data;
|
||||
}
|
||||
|
|
@ -14,27 +14,28 @@
|
|||
# Enable support for the Xbox One wireless dongle
|
||||
hardware.xone.enable = true;
|
||||
|
||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
|
||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "nvme" "sd_mod"];
|
||||
boot.initrd.kernelModules = ["amdgpu"];
|
||||
boot.kernelModules = ["kvm-amd"];
|
||||
boot.extraModulePackages = [];
|
||||
boot.extraModprobeConfig = "options snd_hda_intel power_save=0";
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@root" "compress=zstd"];
|
||||
options = ["subvol=@root"];
|
||||
};
|
||||
|
||||
fileSystems."/nix" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@nix" "compress=zstd"];
|
||||
options = ["subvol=@nix"];
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@boot" "compress=zstd"];
|
||||
options = ["subvol=@boot"];
|
||||
};
|
||||
|
||||
fileSystems."/boot/efi" = {
|
||||
|
|
@ -53,6 +54,12 @@
|
|||
fsType = config.fileSystems."/".fsType;
|
||||
options = ["subvolid=5" "ro"];
|
||||
};
|
||||
"/mnt/hdd" = {
|
||||
# device = "/dev/disk/by-id/ata-SAMSUNG_HD103SI_S1Y5J9CZA19763-part1";
|
||||
label = "Archie\\x20HDD";
|
||||
fsType = "bcachefs";
|
||||
options = ["x-systemd.automount"];
|
||||
};
|
||||
"/mnt/windows" = {
|
||||
device = "/dev/disk/by-uuid/B61AFDAC1AFD6A2F";
|
||||
fsType = "ntfs3";
|
||||
|
|
@ -62,12 +69,12 @@
|
|||
"/home" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@home" "compress=zstd"];
|
||||
options = ["subvol=@home"];
|
||||
};
|
||||
"/persist" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@persist" "compress=zstd"];
|
||||
options = ["subvol=@persist"];
|
||||
neededForBoot = true;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -22,18 +22,22 @@
|
|||
wakeOnLan.enable = true;
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "192.168.0.160";
|
||||
address = "192.168.1.160";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
};
|
||||
# I use networkd, so I need to declare the interface for the default gateway
|
||||
defaultGateway = {
|
||||
address = "192.168.0.1";
|
||||
address = "192.168.1.1";
|
||||
interface = "eno1";
|
||||
};
|
||||
nameservers = ["9.9.9.9"];
|
||||
};
|
||||
systemd.network.wait-online.extraArgs = ["--dns"];
|
||||
|
||||
time.timeZone = "Europe/Madrid";
|
||||
services.automatic-timezoned.enable = lib.mkForce false;
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.toast = {
|
||||
|
|
@ -53,11 +57,4 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
# No idea what ports 5201 and 21027 do tho
|
||||
networking.firewall.allowedTCPPorts = [5201];
|
||||
networking.firewall.allowedUDPPorts = [5201 21027];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
};
|
||||
|
||||
fileSystems."/boot/efi" = {
|
||||
device = "/dev/disk/by-label/Boot";
|
||||
device = "/dev/disk/by-uuid/FB87-4CBC";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,16 +7,19 @@
|
|||
lib,
|
||||
...
|
||||
}: {
|
||||
# Use grub boot loader
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = false;
|
||||
grub = {
|
||||
limine = {
|
||||
enable = true;
|
||||
device = "nodev";
|
||||
efiSupport = true;
|
||||
# No other OS on here :P
|
||||
useOSProber = false;
|
||||
enableEditor = true;
|
||||
secureBoot.enable = true;
|
||||
extraConfig = ''
|
||||
timeout: 3
|
||||
'';
|
||||
style = {
|
||||
graphicalTerminal.font.scale = "2x2";
|
||||
};
|
||||
};
|
||||
efi = {
|
||||
efiSysMountPoint = config.fileSystems."efi_boot_partition".mountPoint;
|
||||
|
|
@ -33,12 +36,10 @@
|
|||
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
};
|
||||
catppuccin.limine.enable = true;
|
||||
|
||||
networking.hostName = "WinMax2"; # Define your hostname.
|
||||
|
||||
# Direct scanout has some issues with my egpu so I just disable it
|
||||
environment.sessionVariables."KWIN_DRM_NO_DIRECT_SCANOUT" = 1;
|
||||
|
||||
# Sleep fixes
|
||||
boot.kernelParams = ["rtc_cmos.use_acpi_alarm=1" "panic=5"];
|
||||
services.udev.extraRules = ''
|
||||
|
|
@ -56,6 +57,8 @@
|
|||
};
|
||||
user = "toast";
|
||||
};
|
||||
# Input plumber conflicts with hhd, and it doesn't let me use mouse mode
|
||||
inputplumber.enable = lib.mkForce false;
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
|
|
@ -69,26 +72,6 @@
|
|||
xserver.xkb.layout = lib.mkForce "us";
|
||||
};
|
||||
|
||||
jovian = {
|
||||
# Steam Deck UI settings
|
||||
steam = {
|
||||
enable = true;
|
||||
autoStart = false;
|
||||
user = "toast";
|
||||
desktopSession = "plasma";
|
||||
};
|
||||
hardware.amd.gpu.enableBacklightControl = true;
|
||||
# Need patched mesa
|
||||
steamos = {
|
||||
enableMesaPatches = true;
|
||||
enableVendorRadv = true;
|
||||
};
|
||||
decky-loader = {
|
||||
enable = true;
|
||||
package = pkgs.decky-loader-prerelease;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable bluetooth
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
|
|
@ -102,18 +85,6 @@
|
|||
# services.printing.enable = true;
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
# Steam's hidpi support is bugged so it needds to be hardcoded
|
||||
xdg.desktopEntries = {
|
||||
steam-noScaling = {
|
||||
name = "Steam (2x scale)";
|
||||
exec = "env STEAM_FORCE_DESKTOPUI_SCALING=2 steam %U";
|
||||
icon = "steam";
|
||||
categories = ["Network" "FileTransfer" "Game"];
|
||||
comment = "Application for managing and playing games on Steam";
|
||||
prefersNonDefaultGPU = true;
|
||||
settings.X-KDE-RunOnDiscreteGpu = "true";
|
||||
};
|
||||
};
|
||||
programs.plasma.input.keyboard.layouts = lib.mkForce [{layout = "us";} {layout = "es";}];
|
||||
}
|
||||
];
|
||||
|
|
@ -158,4 +129,13 @@
|
|||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
specialisation.bootDebug.configuration = {
|
||||
boot.kernelParams = [
|
||||
"systemd.debug-shell=1"
|
||||
"systemd.log_level=debug"
|
||||
"systemd.log_target=kmsg"
|
||||
"log_buf_len=1M"
|
||||
"printk.devkmsg=on"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,84 +0,0 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
networking.hostName = "iMac"; # Define your hostname.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Madrid";
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Select internationalisation properties.
|
||||
# i18n.defaultLocale = "en_US.UTF-8";
|
||||
# console = {
|
||||
# font = "Lat2-Terminus16";
|
||||
# keyMap = "us";
|
||||
# useXkbConfig = true; # use xkb.options in tty.
|
||||
# };
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.xkb.layout = "es";
|
||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
hardware.pulseaudio.enable = false;
|
||||
# OR
|
||||
# services.pipewire = {
|
||||
# enable = true;
|
||||
# pulse.enable = true;
|
||||
# };
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.libinput.enable = true;
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
# environment.systemPackages = with pkgs; [
|
||||
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
# wget
|
||||
# ];
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# Copy the NixOS configuration file and link it from the resulting system
|
||||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
# 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,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sdhci_pci"];
|
||||
boot.initrd.kernelModules = [];
|
||||
boot.initrd.systemd.enable = true;
|
||||
boot.kernelModules = ["kvm-intel" "wl"];
|
||||
boot.kernelParams = [
|
||||
"acpi_backlight=video"
|
||||
"nouveau.config=NvClkMode=15"
|
||||
];
|
||||
boot.extraModulePackages = [config.boot.kernelPackages.broadcom_sta];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@" "compress=zstd"];
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices."SSD".device = "/dev/disk/by-uuid/482cd1b5-2a22-42f3-a497-4b4d7006d2e3";
|
||||
|
||||
fileSystems."/nix" = {
|
||||
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@nix" "compress=zstd"];
|
||||
};
|
||||
|
||||
fileSystems."/home" = {
|
||||
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@home" "compress=zstd"];
|
||||
};
|
||||
|
||||
fileSystems."/persist" = {
|
||||
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@persist" "compress=zstd"];
|
||||
neededForBoot = true;
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/0D30-3CEE";
|
||||
fsType = "vfat";
|
||||
options = ["fmask=0022" "dmask=0022"];
|
||||
};
|
||||
|
||||
swapDevices = [];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp4s0f0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
0
nixpkgs-patches/.gitkeep
Normal file
0
nixpkgs-patches/.gitkeep
Normal file
|
|
@ -1,213 +0,0 @@
|
|||
From 18cd88064d152491d5ba19602db5c5d65bc2d685 Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Thu, 18 Apr 2024 11:22:24 +0200
|
||||
Subject: [PATCH 1/6] handheld-daemon-ui: init at 3.1.1
|
||||
|
||||
---
|
||||
.../by-name/ha/handheld-daemon-ui/package.nix | 39 +++++++++++++++++++
|
||||
1 file changed, 39 insertions(+)
|
||||
create mode 100644 pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
|
||||
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
new file mode 100644
|
||||
index 000000000000000..81d318d88b5abd3
|
||||
--- /dev/null
|
||||
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
@@ -0,0 +1,39 @@
|
||||
+{
|
||||
+ lib,
|
||||
+ appimageTools,
|
||||
+ fetchurl,
|
||||
+}:
|
||||
+let
|
||||
+ pname = "handheld-daemon-ui";
|
||||
+ version = "3.1.1";
|
||||
+
|
||||
+ src = fetchurl {
|
||||
+ url = "https://github.com/hhd-dev/hhd-ui/releases/download/v${version}/hhd-ui.Appimage";
|
||||
+ hash = "sha256-KH01MvcCbvCqjp1UZHnwfh9G3Yh50CO9Ecjl1Y8VY9E=";
|
||||
+ };
|
||||
+ extractedFiles = appimageTools.extractType2 { inherit pname version src; };
|
||||
+in
|
||||
+appimageTools.wrapType2 {
|
||||
+ inherit pname version src;
|
||||
+
|
||||
+ extraInstallCommands = ''
|
||||
+ # Handheld-daemon expects the UI binary to be called hhd-ui
|
||||
+ mv $out/bin/${pname} $out/bin/hhd-ui
|
||||
+
|
||||
+ mkdir -p $out/share/applications
|
||||
+ substitute ${extractedFiles}/hhd-ui.desktop \
|
||||
+ $out/share/applications/hhd-ui.desktop \
|
||||
+ --replace-fail "Exec=AppRun" "Exec=hhd-ui"
|
||||
+ cp ${extractedFiles}/usr/share/icons $out/share -r
|
||||
+ '';
|
||||
+
|
||||
+ meta = with lib; {
|
||||
+ description = "The main UI for the Handheld Daemon";
|
||||
+ homepage = "https://github.com/hhd-dev/hhd-ui";
|
||||
+ license = licenses.gpl3Only;
|
||||
+ maintainers = with maintainers; [ toast ];
|
||||
+ mainProgram = "hhd-ui";
|
||||
+ platforms = [ "x86_64-linux" ];
|
||||
+ sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
+ };
|
||||
+}
|
||||
|
||||
From 8ebb1f0976c79c74eb0cea3975c348e36d86a7d1 Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Wed, 10 Jul 2024 12:59:01 +0200
|
||||
Subject: [PATCH 2/6] handheld-daemon: add options for handheld-daemon-ui
|
||||
|
||||
---
|
||||
.../modules/services/hardware/handheld-daemon.nix | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/nixos/modules/services/hardware/handheld-daemon.nix b/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
index 6c9d5aa3e22c86b..e8e283bca894130 100644
|
||||
--- a/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
+++ b/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
@@ -11,6 +11,11 @@ in
|
||||
enable = mkEnableOption "Enable Handheld Daemon";
|
||||
package = mkPackageOption pkgs "handheld-daemon" { };
|
||||
|
||||
+ ui = {
|
||||
+ enable = mkEnableOption "Handheld Daemon UI";
|
||||
+ package = mkPackageOption pkgs "handheld-daemon-ui" { };
|
||||
+ };
|
||||
+
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
@@ -20,7 +25,10 @@ in
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
- environment.systemPackages = [ cfg.package ];
|
||||
+ environment.systemPackages = [
|
||||
+ cfg.package
|
||||
+ (mkIf cfg.ui.enable cfg.ui.package)
|
||||
+ ];
|
||||
services.udev.packages = [ cfg.package ];
|
||||
systemd.packages = [ cfg.package ];
|
||||
|
||||
@@ -31,6 +39,11 @@ in
|
||||
|
||||
restartIfChanged = true;
|
||||
|
||||
+ path = mkIf cfg.ui.enable [
|
||||
+ pkgs.handheld-daemon-ui
|
||||
+ pkgs.lsof
|
||||
+ ];
|
||||
+
|
||||
serviceConfig = {
|
||||
ExecStart = "${ lib.getExe cfg.package } --user ${ cfg.user }";
|
||||
Nice = "-12";
|
||||
|
||||
From 1b034ab22605b29195dabce893282b05077d0fe7 Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Thu, 11 Jul 2024 12:11:00 +0200
|
||||
Subject: [PATCH 3/6] handheld-daemon: enable ui when enabling handheld-daemon
|
||||
|
||||
---
|
||||
nixos/modules/services/hardware/handheld-daemon.nix | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/nixos/modules/services/hardware/handheld-daemon.nix b/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
index e8e283bca894130..d78bae5e9bc4833 100644
|
||||
--- a/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
+++ b/nixos/modules/services/hardware/handheld-daemon.nix
|
||||
@@ -25,6 +25,7 @@ in
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
+ services.handheld-daemon.ui.enable = mkDefault true;
|
||||
environment.systemPackages = [
|
||||
cfg.package
|
||||
(mkIf cfg.ui.enable cfg.ui.package)
|
||||
|
||||
From 0686e34bb16f8538e28b0795a8e5957ead5abdf0 Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Tue, 8 Oct 2024 10:51:00 +0200
|
||||
Subject: [PATCH 4/6] handheld-daemon-ui: 3.1.1 -> 3.2.1
|
||||
|
||||
---
|
||||
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
index 81d318d88b5abd3..028ceeb58f05e96 100644
|
||||
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
@@ -5,11 +5,11 @@
|
||||
}:
|
||||
let
|
||||
pname = "handheld-daemon-ui";
|
||||
- version = "3.1.1";
|
||||
+ version = "3.2.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/hhd-dev/hhd-ui/releases/download/v${version}/hhd-ui.Appimage";
|
||||
- hash = "sha256-KH01MvcCbvCqjp1UZHnwfh9G3Yh50CO9Ecjl1Y8VY9E=";
|
||||
+ hash = "sha256-RRXVoeWOO/pR+CAEY0J6Buf/RhA+G0PdxGQVMdAHfwA=";
|
||||
};
|
||||
extractedFiles = appimageTools.extractType2 { inherit pname version src; };
|
||||
in
|
||||
@@ -18,7 +18,7 @@ appimageTools.wrapType2 {
|
||||
|
||||
extraInstallCommands = ''
|
||||
# Handheld-daemon expects the UI binary to be called hhd-ui
|
||||
- mv $out/bin/${pname} $out/bin/hhd-ui
|
||||
+ mv $out/bin/${pname}* $out/bin/hhd-ui
|
||||
|
||||
mkdir -p $out/share/applications
|
||||
substitute ${extractedFiles}/hhd-ui.desktop \
|
||||
|
||||
From d602ac7ac385613c082fe5b87b8462b2a2627a3e Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Tue, 8 Oct 2024 11:14:00 +0200
|
||||
Subject: [PATCH 5/6] handheld-daemon-ui: fix desktop item category
|
||||
|
||||
---
|
||||
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
index 028ceeb58f05e96..1aa8266ece44849 100644
|
||||
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
@@ -23,7 +23,8 @@ appimageTools.wrapType2 {
|
||||
mkdir -p $out/share/applications
|
||||
substitute ${extractedFiles}/hhd-ui.desktop \
|
||||
$out/share/applications/hhd-ui.desktop \
|
||||
- --replace-fail "Exec=AppRun" "Exec=hhd-ui"
|
||||
+ --replace-fail "Exec=AppRun" "Exec=hhd-ui" \
|
||||
+ --replace-fail "Categories=game;" "Categories=Game;"
|
||||
cp ${extractedFiles}/usr/share/icons $out/share -r
|
||||
'';
|
||||
|
||||
|
||||
From 09b2e9dcb32eb3d6eaa4ba0e65cf7102b50d1d13 Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Tue, 8 Oct 2024 11:40:05 +0200
|
||||
Subject: [PATCH 6/6] handheld-daemon-ui: copy icon to correct folder
|
||||
|
||||
---
|
||||
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
index 1aa8266ece44849..a1131ea5c23d64a 100644
|
||||
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
|
||||
@@ -25,7 +25,9 @@ appimageTools.wrapType2 {
|
||||
$out/share/applications/hhd-ui.desktop \
|
||||
--replace-fail "Exec=AppRun" "Exec=hhd-ui" \
|
||||
--replace-fail "Categories=game;" "Categories=Game;"
|
||||
- cp ${extractedFiles}/usr/share/icons $out/share -r
|
||||
+ iconDir=$out/share/icons/hicolor/512x512/apps
|
||||
+ mkdir -p $iconDir
|
||||
+ cp ${extractedFiles}/hhd-ui.png $iconDir
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
61
nixpkgs-patches/pr471291.patch
Normal file
61
nixpkgs-patches/pr471291.patch
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
From ef52b16862caa43dd4abc0aedf1814796342b664 Mon Sep 17 00:00:00 2001
|
||||
From: K900 <me@0upti.me>
|
||||
Date: Tue, 16 Dec 2025 11:48:37 +0300
|
||||
Subject: [PATCH] kdePackages.plasma-vault: refresh patch
|
||||
|
||||
No idea how this happened.
|
||||
---
|
||||
.../plasma/plasma-vault/hardcode-paths.patch | 26 +++++++++----------
|
||||
1 file changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch b/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
index d8a5f4a025de3..090df77eb15b0 100644
|
||||
--- a/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
+++ b/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/kded/engine/backends/cryfs/cryfsbackend.cpp b/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
-index f425eb3..5b8cd43 100644
|
||||
+index 64138b6..5d249aa 100644
|
||||
--- a/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
+++ b/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
@@ -207,7 +207,7 @@ QProcess *CryFsBackend::cryfs(const QStringList &arguments) const
|
||||
@@ -44,7 +44,7 @@ index b992f6f..eb828dd 100644
|
||||
|
||||
QString GocryptfsBackend::getConfigFilePath(const Device &device) const
|
||||
diff --git a/kded/engine/fusebackend_p.cpp b/kded/engine/fusebackend_p.cpp
|
||||
-index 8763304..e6860d2 100644
|
||||
+index 714b660..61d8bf5 100644
|
||||
--- a/kded/engine/fusebackend_p.cpp
|
||||
+++ b/kded/engine/fusebackend_p.cpp
|
||||
@@ -90,7 +90,7 @@ QProcess *FuseBackend::process(const QString &executable, const QStringList &arg
|
||||
@@ -57,19 +57,19 @@ index 8763304..e6860d2 100644
|
||||
|
||||
FutureResult<> FuseBackend::initialize(const QString &name, const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload)
|
||||
diff --git a/kded/engine/vault.cpp b/kded/engine/vault.cpp
|
||||
-index c101079..67c8a83 100644
|
||||
+index a7a4741..773b671 100644
|
||||
--- a/kded/engine/vault.cpp
|
||||
+++ b/kded/engine/vault.cpp
|
||||
-@@ -485,7 +485,7 @@ FutureResult<> Vault::close()
|
||||
- } else {
|
||||
- // We want to check whether there is an application
|
||||
- // that is accessing the vault
|
||||
-- AsynQt::Process::getOutput(QStringLiteral("lsof"), {QStringLiteral("-t"), mountPoint().data()}) | cast<QString>() | onError([this] {
|
||||
-+ AsynQt::Process::getOutput(QStringLiteral("@lsof@"), {QStringLiteral("-t"), mountPoint().data()}) | cast<QString>() | onError([this] {
|
||||
- d->updateMessage(i18n("Unable to lock the vault because an application is using it"));
|
||||
- }) | onSuccess([this](const QString &result) {
|
||||
- // based on ksolidnotify.cpp
|
||||
-@@ -538,7 +538,7 @@ FutureResult<> Vault::forceClose()
|
||||
+@@ -490,7 +490,7 @@ FutureResult<> Vault::close()
|
||||
+ } else {
|
||||
+ // We want to check whether there is an application
|
||||
+ // that is accessing the vault
|
||||
+- AsynQt::Process::getOutput(QStringLiteral("lsof"), { QStringLiteral("-t"), mountPoint().data() })
|
||||
++ AsynQt::Process::getOutput(QStringLiteral("@lsof@"), { QStringLiteral("-t"), mountPoint().data() })
|
||||
+ | cast<QString>()
|
||||
+ | onError([this] {
|
||||
+ d->updateMessage(i18n("Unable to close the vault because an application is using it"));
|
||||
+@@ -546,7 +546,7 @@ FutureResult<> Vault::forceClose()
|
||||
using namespace AsynQt::operators;
|
||||
|
||||
AsynQt::await(
|
||||
49
nixpkgs-patches/revert-mangohud-update.patch
Normal file
49
nixpkgs-patches/revert-mangohud-update.patch
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
diff --git a/pkgs/tools/graphics/mangohud/default.nix b/pkgs/tools/graphics/mangohud/default.nix
|
||||
index cf83d4254baa..992afd60d3cb 100644
|
||||
--- a/pkgs/tools/graphics/mangohud/default.nix
|
||||
+++ b/pkgs/tools/graphics/mangohud/default.nix
|
||||
@@ -24,8 +24,10 @@
|
||||
unzip,
|
||||
wayland,
|
||||
libXNVCtrl,
|
||||
+ nlohmann_json,
|
||||
spdlog,
|
||||
libxkbcommon,
|
||||
+ glew,
|
||||
glfw,
|
||||
libXrandr,
|
||||
x11Support ? true,
|
||||
@@ -93,14 +95,14 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mangohud";
|
||||
- version = "0.8.2";
|
||||
+ version = "0.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "flightlessmango";
|
||||
repo = "MangoHud";
|
||||
tag = "v${finalAttrs.version}";
|
||||
fetchSubmodules = true;
|
||||
- hash = "sha256-BZ3R7D2zOlg69rx4y2FzzjpXuPOv913TOz9kSvRN+Wg=";
|
||||
+ hash = "sha256-FvPhnOvcYE8vVB5R+ZRmuZxrC9U4GA338V7VAuUlHCE=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
@@ -188,6 +190,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
buildInputs = [
|
||||
dbus
|
||||
+ nlohmann_json
|
||||
spdlog
|
||||
]
|
||||
++ lib.optional waylandSupport wayland
|
||||
@@ -195,6 +198,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
++ lib.optional nvidiaSupport libXNVCtrl
|
||||
++ lib.optional (x11Support || waylandSupport) libxkbcommon
|
||||
++ lib.optionals mangoappSupport [
|
||||
+ glew
|
||||
glfw
|
||||
libXrandr
|
||||
];
|
||||
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
{
|
||||
stdenv,
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
makeWrapper,
|
||||
rsync,
|
||||
gawk,
|
||||
pv,
|
||||
gnutar,
|
||||
zstd,
|
||||
util-linux,
|
||||
coreutils,
|
||||
gnugrep,
|
||||
findutils,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "anything-sync-daemon";
|
||||
version = "6.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "graysky2";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-6nfaAMH5YgK6gimuZ8j1zWLTDOi11KIwW7Bf0Iwh7+I=";
|
||||
};
|
||||
|
||||
patches = [./disableDaemonStopTargets.patch];
|
||||
|
||||
nativeBuildInputs = [makeWrapper];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace init/asd* \
|
||||
--replace /usr/bin/anything-sync-daemon $out/bin/anything-sync-daemon
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DESTDIR=${placeholder "out"}"
|
||||
"PREFIX="
|
||||
"INITDIR_SYSTEMD=/lib/systemd/system"
|
||||
];
|
||||
|
||||
installTargets = ["install-systemd-all"];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/anything-sync-daemon \
|
||||
--suffix PATH : ${lib.makeBinPath [rsync gawk pv gnutar zstd util-linux coreutils gnugrep findutils]}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Symlinks and syncs user specified dirs to RAM";
|
||||
homepage = "https://github.com/graysky2/anything-sync-daemon/";
|
||||
license = lib.licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index ddf2d73..827ea8f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -31,17 +31,7 @@ common/$(PN): Makefile common/$(PN).in
|
||||
|
||||
help: install
|
||||
|
||||
-stop-asd:
|
||||
-ifneq ($(PREFIX), /usr)
|
||||
- sudo -E asd unsync
|
||||
-endif
|
||||
-
|
||||
-disable-systemd:
|
||||
-ifeq ($(PREFIX), /usr)
|
||||
- systemctl stop asd asd-resync || /bin/true
|
||||
-endif
|
||||
-
|
||||
-install-bin: stop-asd disable-systemd common/$(PN)
|
||||
+install-bin: common/$(PN)
|
||||
$(Q)echo -e '\033[1;32mInstalling main script...\033[0m'
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(BINDIR)"
|
||||
$(INSTALL_PROGRAM) common/$(PN) "$(DESTDIR)$(BINDIR)/$(PN)"
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{ writeShellApplication
|
||||
, rizin
|
||||
, discord
|
||||
}:
|
||||
|
||||
writeShellApplication rec {
|
||||
name = "discord-krisp-fixer";
|
||||
|
||||
runtimeInputs = [ rizin ];
|
||||
|
||||
text = ''
|
||||
discord_version="${discord.version}"
|
||||
file="$HOME/.config/discord/$discord_version/modules/discord_krisp/discord_krisp.node"
|
||||
addr=$(rz-find -x '4881ec00010000' "$file" | head -n1)
|
||||
rizin -q -w -c "s $addr + 0x30 ; wao nop" "$file"
|
||||
'';
|
||||
}
|
||||
59
pkgs/kame-editor/default.nix
Normal file
59
pkgs/kame-editor/default.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
qt6,
|
||||
portaudio,
|
||||
kame-tools,
|
||||
vgmstream,
|
||||
rstmcpp,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kame-editor";
|
||||
version = "1.4.1";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
# tag = version;
|
||||
rev = "82c9c445644b133b6d0ce3529e65b1a3df83c804";
|
||||
hash = "sha256-V2nMvVIjFRM8++XQ9tkE2OiZzCvdrg0jK69HM+ZIVyA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace kame-editor.pro \
|
||||
--replace-fail "/usr/local/bin/" "$out/bin"
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
qt6.qtbase
|
||||
portaudio
|
||||
];
|
||||
|
||||
qtWrapperArgs = [
|
||||
"--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
kame-tools
|
||||
vgmstream
|
||||
rstmcpp
|
||||
]
|
||||
}"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
qt6.qmake
|
||||
qt6.wrapQtAppsHook
|
||||
];
|
||||
|
||||
postBuild = ''
|
||||
bash ./buildicons.sh
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/icons/hicolor
|
||||
mkdir -p $out/share/applications
|
||||
|
||||
cp kame-editor.desktop $out/share/applications
|
||||
cp -r icons/. $out/share/icons/hicolor
|
||||
'';
|
||||
}
|
||||
29
pkgs/kame-tools/default.nix
Normal file
29
pkgs/kame-tools/default.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
zip,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kame-tools";
|
||||
version = "a1fe47cc";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-ETl5f8M4OJPFB7NEq2mVuMm4RhBtAbMzlrvGHD14zXw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace buildtools/make_base \
|
||||
--replace-fail "/usr/local/bin" "$out/bin"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp output/linux-x86_64/* $out/bin/
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [zip];
|
||||
}
|
||||
21
pkgs/rstmcpp/default.nix
Normal file
21
pkgs/rstmcpp/default.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "rstmcpp";
|
||||
version = "fe8bee01";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-T9mxTBj/eykvbBkbmEKTUFldtBp3cJgWAbeu44SwxiM=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp rstmcpp $out/bin
|
||||
'';
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@
|
|||
flakeSelf,
|
||||
...
|
||||
}: {
|
||||
imports = [flakeSelf.inputs.nur.nixosModules.nur];
|
||||
environment = {
|
||||
# As of the 1st of May 2023, the default packages are nano, perl, rsync and strace
|
||||
# I don't need any of them, so I just empty the list
|
||||
|
|
@ -19,6 +18,8 @@
|
|||
cleanOnBoot = !config.boot.tmp.useTmpfs;
|
||||
};
|
||||
|
||||
environment.localBinInPath = lib.mkDefault true;
|
||||
|
||||
# Set up zram
|
||||
zramSwap = {
|
||||
enable = true;
|
||||
|
|
@ -89,16 +90,20 @@
|
|||
};
|
||||
|
||||
# Set up my user
|
||||
users.mutableUsers = false;
|
||||
users.users.toast = {
|
||||
isNormalUser = true;
|
||||
description = "Toast";
|
||||
extraGroups = ["wheel"];
|
||||
hashedPasswordFile = config.sops.secrets.toast.path;
|
||||
};
|
||||
|
||||
# Set up time zone.
|
||||
time.timeZone = "Europe/Madrid";
|
||||
time.timeZone = lib.mkDefault "Europe/Madrid";
|
||||
services.automatic-timezoned.enable = true;
|
||||
|
||||
nixpkgs.overlays = [
|
||||
flakeSelf.outputs.overlays.default
|
||||
(
|
||||
final: prev: {
|
||||
catppuccin = prev.catppuccin.override {
|
||||
|
|
@ -111,15 +116,6 @@
|
|||
"grub"
|
||||
];
|
||||
};
|
||||
adw-gtk3 = prev.adw-gtk3.overrideAttrs {
|
||||
version = "5.3";
|
||||
src = final.fetchFromGitHub {
|
||||
owner = "lassekongo83";
|
||||
repo = "adw-gtk3";
|
||||
rev = "v5.3";
|
||||
sha256 = "sha256-DpJLX9PJX1Q8dDOx7YOXQzgNECsKp5uGiCVTX6iSlbI=";
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
|
|
@ -135,11 +131,14 @@
|
|||
backupFileExtension = "hm-backup";
|
||||
useGlobalPkgs = true;
|
||||
verbose = true;
|
||||
sharedModules = [flakeSelf.inputs.catppuccin.homeManagerModules.catppuccin];
|
||||
sharedModules = with flakeSelf; [
|
||||
inputs.catppuccin.homeModules.catppuccin
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
users.toast = {osConfig, ...}: {
|
||||
catppuccin.flavor = osConfig.catppuccin.flavor;
|
||||
catppuccin.accent = osConfig.catppuccin.accent;
|
||||
home.stateVersion = "24.05";
|
||||
home.stateVersion = "25.05";
|
||||
manual = {
|
||||
manpages.enable = true;
|
||||
html.enable = true;
|
||||
|
|
@ -152,6 +151,7 @@
|
|||
publicShare = null; # Disable the public folder
|
||||
};
|
||||
};
|
||||
systemd.user.startServices = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -161,8 +161,16 @@
|
|||
"/persist/id_host"
|
||||
];
|
||||
};
|
||||
sops = {
|
||||
age.sshKeyPaths = ["/persist/id_host"];
|
||||
defaultSopsFile = "${flakeSelf.inputs.secrets}/${config.networking.hostName}.yaml";
|
||||
secrets.toast = {
|
||||
sopsFile = "${flakeSelf.inputs.secrets}/passwd.yaml";
|
||||
neededForUsers = true;
|
||||
};
|
||||
};
|
||||
|
||||
boot.loader.grub.catppuccin.enable = true;
|
||||
catppuccin.grub.enable = true;
|
||||
|
||||
/*
|
||||
I used to keep the host keys in the repo as a secret, but since I use the
|
||||
|
|
@ -173,9 +181,12 @@
|
|||
*/
|
||||
|
||||
system = {
|
||||
stateVersion = "24.05";
|
||||
stateVersion = "25.05";
|
||||
# Nix on nixos 23.05 does not have dirtyRev
|
||||
configurationRevision = flakeSelf.sourceInfo.rev or flakeSelf.sourceInfo.dirtyRev or "dirty";
|
||||
nixos.variant_id = lib.strings.toLower config.networking.hostName;
|
||||
nixos.variant_id = lib.mkDefault (lib.strings.toLower config.networking.hostName);
|
||||
};
|
||||
image.modules.iso = {
|
||||
system.nixos.variant_id = "${lib.strings.toLower config.networking.hostName}-iso";
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,20 @@
|
|||
{...}: {
|
||||
home-manager.users.toast.programs.atuin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enter_accept = false;
|
||||
workspaces = true;
|
||||
stats = {
|
||||
common_prefix = [
|
||||
"sudo"
|
||||
","
|
||||
];
|
||||
home-manager.users.toast = {
|
||||
catppuccin.atuin.enable = true;
|
||||
programs.atuin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enter_accept = true;
|
||||
workspaces = true;
|
||||
filter_mode = "workspace";
|
||||
style = "auto";
|
||||
inline_height = 0;
|
||||
stats = {
|
||||
common_prefix = [
|
||||
"sudo"
|
||||
","
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{...}: {
|
||||
home-manager = {
|
||||
users.toast.programs.bat = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
users.toast = {
|
||||
programs.bat.enable = true;
|
||||
catppuccin.bat.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{...}: {
|
||||
home-manager = {
|
||||
users.toast = {
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
catppuccin.btop.enable = true;
|
||||
programs.btop.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
git = true;
|
||||
icons =
|
||||
if config.system.nixos.release == "24.05"
|
||||
then true
|
||||
else "auto";
|
||||
icons = "auto";
|
||||
extraOptions = [
|
||||
"--group"
|
||||
];
|
||||
};
|
||||
xdg.configFile."eza/theme.yml".source = "${flakeSelf.inputs.eza-themes}/themes/catppuccin.yml";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@
|
|||
};
|
||||
|
||||
home-manager.users.toast = {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
catppuccin.fish.enable = true;
|
||||
programs.fish.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,25 @@
|
|||
{...}: {
|
||||
programs.ssh.knownHosts = {
|
||||
"[git.everest.tailscale]:4222".publicKey = ''
|
||||
"[git.toast003.xyz]:4222".publicKey = ''
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoUcWx56NZ3kqydN3d0gLNz6SlBm1ArkHhqR9Fwd8qs
|
||||
'';
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Toast";
|
||||
userEmail = "toast003@tutamail.com";
|
||||
delta = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
extraConfig = {
|
||||
settings = {
|
||||
user.name = "toast";
|
||||
user.email = "toast003@tutamail.com";
|
||||
init.defaultBranch = "main";
|
||||
diff.colorMoved = "default";
|
||||
commit.verbose = "true";
|
||||
};
|
||||
};
|
||||
|
||||
programs.delta = {
|
||||
enable = true;
|
||||
enableGitIntegration = true;
|
||||
};
|
||||
catppuccin.delta.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,12 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
programs.nano.enable = false;
|
||||
home-manager.users.toast = {
|
||||
catppuccin.helix = {
|
||||
enable = true;
|
||||
useItalics = true;
|
||||
};
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
|
@ -12,10 +17,6 @@
|
|||
nil
|
||||
taplo
|
||||
];
|
||||
catppuccin = {
|
||||
enable = true;
|
||||
useItalics = true;
|
||||
};
|
||||
settings = {
|
||||
editor = {
|
||||
mouse = true;
|
||||
|
|
@ -28,6 +29,8 @@
|
|||
select = "Select";
|
||||
};
|
||||
indent-guides.render = true;
|
||||
end-of-line-diagnostics = "hint";
|
||||
inline-diagnostics.cursor-line = "warning";
|
||||
};
|
||||
};
|
||||
languages = {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
systemPkgs,
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
|
|
@ -20,6 +19,8 @@
|
|||
'';
|
||||
};
|
||||
|
||||
system.tools.nixos-option.enable = false;
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
auto-optimise-store = true;
|
||||
|
|
@ -56,11 +57,6 @@
|
|||
type = "github";
|
||||
};
|
||||
};
|
||||
# Write the system's nixpkgs into the registry to avoid mixing nixpkgs versions
|
||||
# https://dataswamp.org/~solene/2022-07-20-nixos-flakes-command-sync-with-system.html
|
||||
system.flake = systemPkgs;
|
||||
};
|
||||
# I removed this in the past since I thought that I didn't need it, but turns out comma does :)
|
||||
nixPath = ["nixpkgs=${systemPkgs}"];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,5 +3,6 @@
|
|||
./avahi.nix
|
||||
./tailscale.nix
|
||||
./syncthing.nix
|
||||
./kmscon.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
29
roles/common/services/kmscon.nix
Normal file
29
roles/common/services/kmscon.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{pkgs, ...}: {
|
||||
services.kmscon = {
|
||||
enable = true;
|
||||
useXkbConfig = true;
|
||||
fonts = [
|
||||
{
|
||||
name = "JetBrains Mono Nerd Font";
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
}
|
||||
];
|
||||
extraConfig = ''
|
||||
term=xterm-256color
|
||||
font-size=10
|
||||
'';
|
||||
package = pkgs.kmscon.overrideAttrs (old: {
|
||||
patches =
|
||||
old.patches
|
||||
++ [
|
||||
# https://github.com/kmscon/kmscon/issues/133
|
||||
(
|
||||
pkgs.fetchpatch {
|
||||
url = "https://github.com/Aetf/kmscon/pull/135.patch";
|
||||
hash = "sha256-hJrKkONdQmz9gGMXbk11+4MF8Vn4guE3Bl1Ni6SGDw4=";
|
||||
}
|
||||
)
|
||||
];
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
|
|
@ -22,44 +23,18 @@ in {
|
|||
urAccepted = 3;
|
||||
};
|
||||
# Set up devices and folders common to every device
|
||||
devices = {
|
||||
"phone" = {
|
||||
name = "Xiaomi Redmi Note 10 Pro";
|
||||
id = "K7KNZ5V-XREUADL-CROQXPV-6AA4H65-2VUD34Z-VQWKJ6S-LWWW4EE-XPNEZQ6";
|
||||
};
|
||||
"pc" = {
|
||||
name = "Archie";
|
||||
id = "NJPX754-64AQNP3-7GZFIRZ-W2EDRJQ-27ORWYM-X5YXEXQ-ERRTRTQ-BSYD4AY";
|
||||
};
|
||||
"steamdeck" = {
|
||||
name = "Steam Deck";
|
||||
id = "DNFEGEA-PDEVW5A-O5VBVQK-IUXI7J5-MAHCQAG-2JLEFFM-DSXB6AS-TX6ZHAN";
|
||||
};
|
||||
"server" = {
|
||||
name = "Everest";
|
||||
id = "2GXFZJZ-CF56ER2-SISBGOF-VNXJIG5-GQC6ECA-NHCHAPX-677RSJT-RI5POAZ";
|
||||
};
|
||||
"surface" = {
|
||||
name = "Surface Go";
|
||||
id = "HTVSF3O-AHY3TNH-BLVSEGK-HRRSMHC-H5LJWVF-NDKGM6O-ATWZALC-YXNV2Q4";
|
||||
};
|
||||
"winmax2" = {
|
||||
name = "Win Max 2";
|
||||
id = "X2NILRM-ADRBQ23-AFREAZA-62GVFDF-UVMPR4L-KGHMUNY-BJ2C3CQ-RBT43QS";
|
||||
};
|
||||
"imac" = {
|
||||
name = "iMac";
|
||||
id = "KRHGSJF-64UXAE2-CNSDV6L-QAUV2HU-JTSIEIC-KSHLCBU-IFIQGDX-K5UCSQR";
|
||||
compression = "always";
|
||||
};
|
||||
};
|
||||
devices = lib.toast.syncthing.devices;
|
||||
folders = {
|
||||
"passwords" = {
|
||||
label = "KeePassXC Passwords";
|
||||
id = "rdyaq-ex659";
|
||||
devices = ["phone" "pc" "steamdeck" "server" "surface" "winmax2" "imac"];
|
||||
devices = ["phone" "pc" "steamdeck" "server" "surface" "winmax2"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [22000];
|
||||
allowedUDPPorts = [22000 21027];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,12 +14,22 @@
|
|||
};
|
||||
|
||||
# Set up fonts
|
||||
fonts.packages = [
|
||||
(pkgs.nerdfonts.override {fonts = ["Hack" "JetBrainsMono"];})
|
||||
fonts.packages = with pkgs.nerd-fonts; [
|
||||
hack
|
||||
jetbrains-mono
|
||||
|
||||
# Japanese fonts
|
||||
pkgs.noto-fonts-cjk-sans
|
||||
pkgs.noto-fonts-cjk-serif
|
||||
];
|
||||
|
||||
# Already use electron apps (discord) so this only adds 20 mb more
|
||||
environment.systemPackages = [pkgs.tetrio-desktop];
|
||||
|
||||
hardware.keyboard.qmk.enable = true;
|
||||
home-manager.users.toast.home.packages = [pkgs.qmk];
|
||||
|
||||
home-manager.users.toast.xdg.autostart.enable = true;
|
||||
|
||||
boot.plymouth.enable = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@
|
|||
./firefox.nix
|
||||
./keepassxc.nix
|
||||
./jamesdsp.nix
|
||||
./vscode.nix
|
||||
./git.nix
|
||||
./ssh.nix
|
||||
./appimage.nix
|
||||
./mpv.nix
|
||||
./sysdvr-qt.nix
|
||||
./spotify.nix
|
||||
./distrobox.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,52 @@
|
|||
in {
|
||||
nixpkgs.overlays = [discordOverlay];
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
vesktop
|
||||
];
|
||||
catppuccin.vesktop.enable = true;
|
||||
programs.vesktop = {
|
||||
enable = true;
|
||||
settings = {
|
||||
arRPC = true;
|
||||
minimizeToTray = true;
|
||||
discordBranch = "stable";
|
||||
customTitleBar = true;
|
||||
spellCheckLanguages = ["en-US" "en" "es"];
|
||||
enableMenu = false;
|
||||
};
|
||||
vencord = {
|
||||
settings = {
|
||||
plugins = {
|
||||
BetterGifPicker.enabled = true;
|
||||
BetterSettings.enabled = true;
|
||||
CallTimer.enabled = true;
|
||||
ClearURLs.enabled = true;
|
||||
FakeNitro.enabled = true;
|
||||
FixSpotifyEmbeds.enabled = true;
|
||||
FixYoutubeEmbeds.enabled = true;
|
||||
FriendsSince.enabled = true;
|
||||
iLoveSpam.enabled = true;
|
||||
LoadingQuotes = {
|
||||
enabled = true;
|
||||
enableDiscordPresetQuotes = true;
|
||||
};
|
||||
MessageClickActions.enabled = true;
|
||||
MessageLinkEmbeds.enabled = true;
|
||||
MessageLogger.enabled = true;
|
||||
Moyai = {
|
||||
enabled = true;
|
||||
volume = 1;
|
||||
quality = "HD";
|
||||
};
|
||||
OpenInApp.enabled = true;
|
||||
petpet.enabled = true;
|
||||
PlatformIndicators.enabled = true;
|
||||
ShowHiddenChannels.enabled = true;
|
||||
ShowHiddenThings.enabled = true;
|
||||
SpotifyControls.enabled = true;
|
||||
Translate.enabled = true;
|
||||
YoutubeAdblock.enabled = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
28
roles/desktop/programs/distrobox.nix
Normal file
28
roles/desktop/programs/distrobox.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{...}: {
|
||||
virtualisation.podman = {
|
||||
# Due to limitations with home-manager, podman has to be available system wide
|
||||
enable = true;
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.distrobox = {
|
||||
enable = true;
|
||||
containers = {
|
||||
uav = {
|
||||
image = "quay.io/toolbx/ubuntu-toolbox:24.04";
|
||||
# additional_packages = "lsb-release dmidecode git";
|
||||
additional_packages = "git";
|
||||
init_hooks = [
|
||||
"git clone https://github.com/PX4/PX4-Autopilot.git --recursive /tmp/px4"
|
||||
"cd /tmp/px4/Tools/setup/"
|
||||
# The install scripts wants to add things to .bashrc, so it errors out
|
||||
# This removes the line that does that
|
||||
"sed -i '181d' ubuntu.sh"
|
||||
"bash ubuntu.sh"
|
||||
"rm -rf /tmp/px4 --one-file-system"
|
||||
];
|
||||
entry = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,55 +1,147 @@
|
|||
{lib, ...}: {
|
||||
# System wide firefox settings
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
policies = {
|
||||
"DisablePocket" = true;
|
||||
"DisableTelemetry" = true;
|
||||
# You need these for Spotify
|
||||
"EncryptedMediaExtensions" = {"Enabled" = true;};
|
||||
"ExtensionSettings" = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"uBlock0@raymondhill.net" = {
|
||||
"installation_mode" = "force_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
# System wide firefox settings
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
policies = {
|
||||
DisableTelemetry = true;
|
||||
GenerativeAI = {
|
||||
Chatbot = false;
|
||||
LinkPreviews = false;
|
||||
TabGroups = false;
|
||||
Locked = true;
|
||||
};
|
||||
# You need these for Spotify
|
||||
EncryptedMediaExtensions.Enabled = true;
|
||||
ExtensionSettings = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"uBlock0@raymondhill.net" = {
|
||||
installation_mode = "force_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||
};
|
||||
# Decentraleyes
|
||||
"jid1-BoFifL9Vbdl2zQ@jetpack" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi";
|
||||
};
|
||||
"jid1-MnnxcxisBPnSXQ@jetpack" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
|
||||
};
|
||||
# Uninstall undeclared extensions
|
||||
"*" = {
|
||||
installation_mode = "blocked";
|
||||
blocked_install_message = "Extensions are managed by home-manager";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
# Enable video hardware acceleration
|
||||
"media.ffmpeg.vaapi.enabled" = {
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
"dom.security.https_only_mode" = {
|
||||
Value = true;
|
||||
Status = "locked";
|
||||
};
|
||||
"browser.ml.chat.page" = {
|
||||
Value = false;
|
||||
Status = "Locked";
|
||||
};
|
||||
};
|
||||
PromptForDownloadLocation = true;
|
||||
# I use an external password manager, so the built in one just bothers me
|
||||
PasswordManagerEnabled = false;
|
||||
Permissions = {
|
||||
Autoplay = {
|
||||
Allow = [
|
||||
"https://www.youtube.com"
|
||||
"https://sync-tube.de"
|
||||
];
|
||||
Default = "block-audio-video";
|
||||
};
|
||||
};
|
||||
FirefoxHome.SponsoredTopSites = false;
|
||||
};
|
||||
# Decentraleyes
|
||||
"jid1-BoFifL9Vbdl2zQ@jetpack" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi";
|
||||
};
|
||||
"jid1-MnnxcxisBPnSXQ@jetpack" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
|
||||
};
|
||||
# Uninstall the kde plasma integration extension if KDE is not installed
|
||||
"plasma-browser-integration@kde.org"."installation_mode" = lib.mkDefault "blocked";
|
||||
};
|
||||
"Preferences" = {
|
||||
# Enable video hardware acceleration
|
||||
"media.ffmpeg.vaapi.enabled" = {
|
||||
"Value" = true;
|
||||
"Status" = "default";
|
||||
}
|
||||
];
|
||||
# Per-user settings
|
||||
home-manager.users.toast = {
|
||||
programs.firefox.policies = {
|
||||
DisablePocket = true;
|
||||
ExtensionSettings = {
|
||||
"sponsorBlocker@ajay.app" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi";
|
||||
};
|
||||
"dom.security.https_only_mode" = {
|
||||
"Value" = true;
|
||||
"Status" = "locked";
|
||||
"@testpilot-containers" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/multi-account-containers/latest.xpi";
|
||||
};
|
||||
"{5cce4ab5-3d47-41b9-af5e-8203eea05245}" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/control-panel-for-twitter/latest.xpi";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
"general.smoothScroll.msdPhysics.enabled" = {
|
||||
"Value" = true;
|
||||
"Status" = "default";
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
"browser.ctrlTab.sortByRecentlyUsed" = {
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
# This should be set automatically, but it isn't for some reason
|
||||
"extensions.webextensions.ExtensionStorageIDB.enabled" = {
|
||||
Value = false;
|
||||
Status = "locked";
|
||||
};
|
||||
};
|
||||
"PromptForDownloadLocation" = true;
|
||||
# I use an external password manager, so the built in one just bothers me
|
||||
"PasswordManagerEnabled" = false;
|
||||
"Permissions" = {
|
||||
"Autoplay" = {
|
||||
"Allow" = ["https://www.youtube.com"];
|
||||
"Default" = "block-audio-video";
|
||||
};
|
||||
programs.firefox.profiles = {
|
||||
personal = {
|
||||
name = "Personal";
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
containersForce = true;
|
||||
containers = {
|
||||
work = {
|
||||
name = "Work";
|
||||
id = 1;
|
||||
icon = "briefcase";
|
||||
color = "green";
|
||||
};
|
||||
};
|
||||
extensions.force = true;
|
||||
extensions.settings = {
|
||||
"@testpilot-containers".settings = {
|
||||
onboarding-stage = 8;
|
||||
"siteContainerMap@@_teams.microsoft.com" = {
|
||||
userContextId = "1";
|
||||
neverAsk = false;
|
||||
identityMacAddonUUID = "b50e5b1e-6f3b-4245-8eac-5654d889156e";
|
||||
};
|
||||
"siteContainerMap@@_outlook.office.com" = {
|
||||
userContextId = "1";
|
||||
neverAsk = false;
|
||||
identityMacAddonUUID = "b50e5b1e-6f3b-4245-8eac-5654d889156e";
|
||||
};
|
||||
};
|
||||
# Control panel for twitter
|
||||
"{5cce4ab5-3d47-41b9-af5e-8203eea05245}".settings = {
|
||||
hideForYouTimeline = false;
|
||||
alwaysUseLatestTweets = false;
|
||||
retweets = "ignore";
|
||||
restoreOtherInteractionLinks = true;
|
||||
navBaseFontSize = false;
|
||||
followButtonStyle = "themed";
|
||||
hideSidebarContent = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
"FirefoxHome" = {"SponsoredTopSites" = false;};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,7 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
package = pkgs.gitFull;
|
||||
extraConfig = {
|
||||
cola = {
|
||||
icontheme = lib.mkDefault "dark";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = [pkgs.git-cola];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
{pkgs, ...}: {
|
||||
users.users.toast.packages = [pkgs.jamesdsp];
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
jamesdsp
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,61 +1,32 @@
|
|||
{lib, ...}: let
|
||||
kpxcSettings = lib.generators.toINI {} {
|
||||
General = {
|
||||
# Not sure what changing this does, I'll leave it alone
|
||||
ConfigVersion = 2;
|
||||
MinimizeAfterUnlock = true;
|
||||
AutoSaveAfterEveryChange = false;
|
||||
};
|
||||
GUI = {
|
||||
ApplicationTheme = "classic";
|
||||
MinimizeOnStartup = false;
|
||||
MinimizeOnClose = true;
|
||||
MinimizeToTray = true;
|
||||
ShowTrayIcon = true;
|
||||
# 0 is icons, 1 is text, 2 is text next to icons, 3 is text under icons, and 4 is follow style
|
||||
ToolButtonStyle = 0; # Would choose 4 but it's too big for a small window
|
||||
# monochrome-light, monochrome-dark or colorful
|
||||
TrayIconAppearance = "monochrome-light";
|
||||
};
|
||||
Security = {
|
||||
HideNotes = true;
|
||||
IconDownloadFallback = true;
|
||||
};
|
||||
SSHAgent.Enabled = true;
|
||||
};
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home-manager = {
|
||||
extraSpecialArgs = {kpxcSettings = kpxcSettings;};
|
||||
users.toast = {
|
||||
pkgs,
|
||||
kpxcSettings,
|
||||
...
|
||||
}: {
|
||||
# No module for KeePassXC config :(
|
||||
home = {
|
||||
packages = [pkgs.keepassxc];
|
||||
file = {
|
||||
".config/keepassxc/keepassxc.ini".text = kpxcSettings;
|
||||
# For some reason the autostart .desktop is not the same as the regular one
|
||||
".config/autostart/org.keepassxc.KeePassXC.desktop".text = ''
|
||||
[Desktop Entry]
|
||||
Name=KeePassXC
|
||||
GenericName=Password Manager
|
||||
Exec=keepassxc
|
||||
TryExec=keepassxc
|
||||
Icon=keepassxc
|
||||
StartupWMClass=keepassxc
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Categories=Utility;Security;Qt;
|
||||
MimeType=application/x-keepass2;
|
||||
X-GNOME-Autostart-enabled=true
|
||||
X-GNOME-Autostart-Delay=2
|
||||
X-KDE-autostart-after=panel
|
||||
X-LXQt-Need-Tray=true
|
||||
'';
|
||||
programs.keepassxc = {
|
||||
enable = true;
|
||||
autostart = true;
|
||||
settings = {
|
||||
General = {
|
||||
# Not sure what changing this does, I'll leave it alone
|
||||
ConfigVersion = 2;
|
||||
MinimizeAfterUnlock = true;
|
||||
AutoSaveAfterEveryChange = false;
|
||||
};
|
||||
GUI = {
|
||||
ApplicationTheme = "classic";
|
||||
MinimizeOnStartup = false;
|
||||
MinimizeOnClose = true;
|
||||
MinimizeToTray = true;
|
||||
ShowTrayIcon = true;
|
||||
# 0 is icons, 1 is text, 2 is text next to icons, 3 is text under icons, and 4 is follow style
|
||||
ToolButtonStyle = 0; # Would choose 4 but it's too big for a small window
|
||||
# monochrome-light, monochrome-dark or colorful
|
||||
TrayIconAppearance = "monochrome-light";
|
||||
};
|
||||
Security = {
|
||||
HideNotes = true;
|
||||
IconDownloadFallback = true;
|
||||
};
|
||||
SSHAgent.Enabled = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,13 @@
|
|||
{pkgs, ...}: {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
mpv-unwrapped = prev.mpv-unwrapped.override {
|
||||
cddaSupport = true;
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
home-manager.users.toast = {
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
|
|
@ -8,6 +17,7 @@
|
|||
config = {
|
||||
hwdec = "auto";
|
||||
cache = true;
|
||||
cdda-speed = "8";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
5
roles/desktop/programs/spotify.nix
Normal file
5
roles/desktop/programs/spotify.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home.packages = [pkgs.spotify];
|
||||
};
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
home-manager.users.toast = {
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
enableDefaultConfig = false;
|
||||
matchBlocks = {
|
||||
"everest" = {
|
||||
host = "toast003.xyz";
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
inputs = flakeSelf.inputs;
|
||||
in {
|
||||
nixpkgs.overlays = [inputs.catppuccin-vsc.overlays.default];
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
nixpkgs-fmt
|
||||
];
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
package = pkgs.vscodium;
|
||||
mutableExtensionsDir = false;
|
||||
extensions = with inputs.vscode-extensions.extensions.x86_64-linux.open-vsx; [
|
||||
jnoortheen.nix-ide
|
||||
(pkgs.catppuccin-vsc.override {
|
||||
workbenchMode = "flat";
|
||||
extraBordersEnabled = true;
|
||||
})
|
||||
catppuccin.catppuccin-vsc-icons
|
||||
waderyan.gitblame
|
||||
];
|
||||
userSettings = {
|
||||
# VSCode doesn't like nested settings
|
||||
# https://stackoverflow.com/questions/74134436/is-it-possible-to-express-settings-in-vs-codes-settings-json-where-each-dot-sep
|
||||
# TODO: write a function that unnests settings
|
||||
"workbench.colorTheme" = "Catppuccin Mocha";
|
||||
"workbench.iconTheme" = "catppuccin-mocha";
|
||||
"editor.fontFamily" = "JetBrainsMono Nerd Font";
|
||||
"editor.semanticHighlighting.enabled" = true;
|
||||
"nix.enableLanguageServer" = true;
|
||||
"nix.serverPath" = "${pkgs.nil}/bin/nil";
|
||||
"nix.serverSettings" = {
|
||||
"nil"."formatting"."command" = ["nixpkgs-fmt"];
|
||||
};
|
||||
"terminal.integrated.minimumContrastRatio" = 1;
|
||||
"window.titleBarStyle" = "custom";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -6,5 +6,6 @@
|
|||
./pipewire.nix
|
||||
./printing.nix
|
||||
./networkmanager.nix
|
||||
./tailscale.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,56 +1,51 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
tailscaleName = config.services.tailscale.interfaceName;
|
||||
in {
|
||||
age.secrets = {
|
||||
wifiPasswords.file = "${flakeSelf.inputs.secrets}/wifi-passwords.age";
|
||||
sops.secrets.wifiPasswords = {
|
||||
sopsFile = "${flakeSelf.inputs.secrets}/wifi-passwords.env";
|
||||
format = "dotenv";
|
||||
};
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
unmanaged = [
|
||||
"interface-name:${tailscaleName}"
|
||||
];
|
||||
wifi.macAddress = "random";
|
||||
ensureProfiles = {
|
||||
environmentFiles = [config.age.secrets.wifiPasswords.path];
|
||||
profiles = {
|
||||
"4g-modem" = {
|
||||
connection = {
|
||||
id = "4G Modem";
|
||||
type = "wifi";
|
||||
autoconnect-priority = 5;
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
ssid = "TP-Link_CCB4";
|
||||
};
|
||||
environmentFiles = [config.sops.secrets.wifiPasswords.path];
|
||||
profiles = with lib.toast.networkManager; {
|
||||
"4g-modem" = mkWifiProfile {
|
||||
id = "4G Modem";
|
||||
priority = 5;
|
||||
ssid = "TP-Link_CCB4";
|
||||
wifi-security = {
|
||||
auth-alg = "open";
|
||||
key-mgmt = "wpa-psk";
|
||||
psk = "$MODEM";
|
||||
};
|
||||
};
|
||||
phone = {
|
||||
connection = {
|
||||
id = "Phone";
|
||||
type = "wifi";
|
||||
autoconnect-priority = 5;
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
ssid = "Redmi Note 10 Pro_5197";
|
||||
};
|
||||
phone = mkWifiProfile {
|
||||
id = "Phone";
|
||||
priority = 5;
|
||||
ssid = "Redmi Note 10 Pro_5197";
|
||||
wifi-security = {
|
||||
auth-alg = "open";
|
||||
key-mgmt = "sae";
|
||||
psk = "$PHONE";
|
||||
};
|
||||
};
|
||||
home = mkWifiProfile {
|
||||
id = "Home";
|
||||
ssid = "MOVISTAR-WIFI6-DC98";
|
||||
wifi-security = {
|
||||
key-mgmt = "sae";
|
||||
psk = "$HOME";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,23 +1,57 @@
|
|||
{config, ...}: {
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
user = "toast";
|
||||
group = "users";
|
||||
dataDir = config.users.users.toast.home;
|
||||
# enable = true;
|
||||
# user = "toast";
|
||||
# group = "users";
|
||||
# dataDir = config.users.users.toast.home;
|
||||
settings.folders."passwords".path = "~/Documents/Passwords";
|
||||
};
|
||||
# Allow regular users to stop syncthing
|
||||
# https://stackoverflow.com/questions/61480914/using-policykit-to-allow-non-root-users-to-start-and-stop-a-service
|
||||
security.polkit.extraConfig = ''
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (
|
||||
action.id == "org.freedesktop.systemd1.manage-units" &&
|
||||
action.lookup("unit") == "syncthing.service" &&
|
||||
subject.user == "${config.services.syncthing.user}"
|
||||
)
|
||||
{
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
})
|
||||
'';
|
||||
age.secrets = {
|
||||
syncthingCert = {
|
||||
owner = "toast";
|
||||
group = "users";
|
||||
};
|
||||
syncthingKey = {
|
||||
owner = "toast";
|
||||
group = "users";
|
||||
};
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
osConfig,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
systemConfig = osConfig.services.syncthing;
|
||||
missingOptions = [
|
||||
"all_proxy"
|
||||
"configDir"
|
||||
"dataDir"
|
||||
"databaseDir"
|
||||
"declarative"
|
||||
"devices"
|
||||
"folders"
|
||||
"extraFlags"
|
||||
"user"
|
||||
"group"
|
||||
"systemService"
|
||||
"openDefaultPorts"
|
||||
"options"
|
||||
"relay"
|
||||
"useInotify"
|
||||
"guiPasswordFile"
|
||||
];
|
||||
removeMissingOptions = rawOptions: (
|
||||
# lib.attrsets.filterAttrs (n: v: n == "all_proxy") rawOptions
|
||||
builtins.removeAttrs rawOptions missingOptions
|
||||
);
|
||||
in {
|
||||
services.syncthing =
|
||||
removeMissingOptions systemConfig
|
||||
// {
|
||||
enable = true;
|
||||
# Renamed options
|
||||
allProxy = systemConfig.all_proxy;
|
||||
extraOptions = systemConfig.extraFlags;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
16
roles/desktop/services/tailscale.nix
Normal file
16
roles/desktop/services/tailscale.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
services.tailscale-systray = {
|
||||
enable = true;
|
||||
package = pkgs.tailscale.overrideAttrs {
|
||||
postPatch = ''
|
||||
substituteInPlace client/systray/logo.go --replace-fail \
|
||||
"color.NRGBA{0, 0, 0, 255}" "color.NRGBA{0, 0, 0, 0}"
|
||||
'';
|
||||
# Only use this for the tray, so no testing is needed
|
||||
# Makes the build last a lot less too
|
||||
doCheck = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,6 +1,16 @@
|
|||
{...}: {
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./programs
|
||||
./services
|
||||
];
|
||||
system.replaceDependencies.replacements = [
|
||||
{
|
||||
oldDependency = pkgs.sdl3;
|
||||
newDependency = pkgs.sdl3.overrideAttrs {
|
||||
patches = [
|
||||
./sdl-keychron-blacklist.patch
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
|||
18
roles/gaming/programs/azahar.nix
Normal file
18
roles/gaming/programs/azahar.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{pkgs, ...}: {
|
||||
# nixpkgs.overlays = [
|
||||
# (
|
||||
# final: prev: {
|
||||
# azahar = prev.azahar.overrideAttrs (old: {
|
||||
# version = "2120.3";
|
||||
# src = final.fetchzip {
|
||||
# url = "https://github.com/azahar-emu/azahar/releases/download/2120.3/azahar-unified-source-20250414-00e3bbb.tar.xz";
|
||||
# hash = "sha256-3QKicmpmWDM7x9GDJ8sxm2Xu+0Yfho4LkSWMp+ixzRk=";
|
||||
# };
|
||||
# });
|
||||
# }
|
||||
# )
|
||||
# ];
|
||||
home-manager.users.toast = {
|
||||
home.packages = [pkgs.azahar];
|
||||
};
|
||||
}
|
||||
|
|
@ -2,20 +2,6 @@
|
|||
home-manager.users.toast = {
|
||||
home = {
|
||||
packages = [pkgs.cemu];
|
||||
file = {
|
||||
"Games/Isos/Wii U/Kirby and the Rainbow Paintbrush.wux".source = (
|
||||
pkgs.fetchurl {
|
||||
url = "http://dl.everest.tailscale/Wii%20U/Kirby%20and%20the%20Rainbow%20Paintbrush.wux";
|
||||
hash = "sha256-taPGf709N2p3GlqqT92+SbOeD7QNKFUfB9X5urWVQps=";
|
||||
}
|
||||
);
|
||||
"Games/Isos/Wii U/Mario Kary 8.wux".source = (
|
||||
pkgs.fetchurl {
|
||||
url = "http://dl.everest.tailscale/Wii%20U/Mario%20Kart%208.wux";
|
||||
hash = "sha256-O6lOkLUKPZi+FiEWJQQEeiEXOo+GTUecoSpGjE811k0=";
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
./retroarch.nix
|
||||
./pcsx2.nix
|
||||
./cemu.nix
|
||||
./azahar.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
heroic
|
||||
|
|
|
|||
|
|
@ -3,134 +3,113 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
ps2-isos = pkgs.symlinkJoin {
|
||||
name = "ps2-isos";
|
||||
paths =
|
||||
lib.lists.forEach [
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202/007%20-%20Nightfire%20%28USA%29.zip";
|
||||
hash = "sha256-66Ey0SqC3Tk02Af+xR6rpxYSkO0n83NWYPCt4M3CUWo=";
|
||||
})
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202/TimeSplitters%202%20%28USA%29.zip";
|
||||
hash = "sha256-UPED4/MF9fjTOgiIJy+CSbuO9cJr3CsR/gEquY6GfsU=";
|
||||
})
|
||||
]
|
||||
compress;
|
||||
};
|
||||
|
||||
compress = iso:
|
||||
pkgs.runCommand "compressed-ps2-isos" {} ''
|
||||
mkdir $out
|
||||
cd ${iso}
|
||||
for file in ./*
|
||||
do
|
||||
${pkgs.mame-tools}/bin/chdman createdvd -i "$file" -o "$out/''${file%.iso}.chd"
|
||||
done
|
||||
'';
|
||||
|
||||
pcsx2-bios = pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202%20-%20BIOS%20Images/ps2-0200a-20040614.zip";
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202%20-%20BIOS%20Images%20%28DoM%20Version%29/ps2-0200a-20040614.zip";
|
||||
hash = "sha256-wMvswgmsKl+cJl49VlVW84tvU5Jzd+2dl07SOiUDtwA=";
|
||||
};
|
||||
toPcsx2INI = lib.generators.toINI {listsAsDuplicateKeys = true;};
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
pcsx2
|
||||
];
|
||||
file."Games/Isos/PS2".source = ps2-isos;
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
pcsx2
|
||||
];
|
||||
xdg.configFile = {
|
||||
#PCSX2 silently overwrites the symlink so I need to force it's creation
|
||||
"PCSX2/inis/PCSX2.ini".force = true;
|
||||
"PCSX2/inis/PCSX2.ini".text =
|
||||
lib.generators.toINI {
|
||||
listsAsDuplicateKeys = true;
|
||||
} {
|
||||
UI = {
|
||||
SettingsVersion = 1;
|
||||
# Use the system theme
|
||||
Theme = "";
|
||||
HideMouseCursor = true;
|
||||
};
|
||||
Folders = {
|
||||
Bios = "/home/toast/.local/share/PCSX2/bios";
|
||||
};
|
||||
GameList.RecursivePaths = [
|
||||
"/home/toast/Games/Isos/PS2/"
|
||||
];
|
||||
"EmuCore/GS" = {
|
||||
dithering_ps2 = 1;
|
||||
upscale_multiplier = 2;
|
||||
};
|
||||
EmuCore = {
|
||||
EnableDiscordPresence = true;
|
||||
EnableFastBoot = true;
|
||||
McdFolderAutoManage = false;
|
||||
};
|
||||
|
||||
MemoryCards.Slot1_Filename = "MemoryCard1.ps2";
|
||||
|
||||
# Controller settings
|
||||
Pad1 = {
|
||||
Up = "SDL-0/DPadUp";
|
||||
Right = "SDL-0/DPadRight";
|
||||
Down = "SDL-0/DPadDown";
|
||||
Left = "SDL-0/DPadLeft";
|
||||
Triangle = "SDL-0/Y";
|
||||
Circle = "SDL-0/B";
|
||||
Cross = "SDL-0/A";
|
||||
Square = "SDL-0/X";
|
||||
Select = "SDL-0/Back";
|
||||
Start = "SDL-0/Start";
|
||||
L1 = "SDL-0/LeftShoulder";
|
||||
L2 = "SDL-0/+LeftTrigger";
|
||||
R1 = "SDL-0/RightShoulder";
|
||||
R2 = "SDL-0/+RightTrigger";
|
||||
L3 = "SDL-0/LeftStick";
|
||||
R3 = "SDL-0/RightStick";
|
||||
Analog = "SDL-0/Guide";
|
||||
LUp = "SDL-0/-LeftY";
|
||||
LRight = "SDL-0/+LeftX";
|
||||
LDown = "SDL-0/+LeftY";
|
||||
LLeft = "SDL-0/-LeftX";
|
||||
RUp = "SDL-0/-RightY";
|
||||
RRight = "SDL-0/+RightX";
|
||||
RDown = "SDL-0/+RightY";
|
||||
RLeft = "SDL-0/-RightX";
|
||||
LargeMotor = "SDL-0/LargeMotor";
|
||||
SmallMotor = "SDL-0/SmallMotor";
|
||||
};
|
||||
# Default hotkeys
|
||||
Hotkeys = {
|
||||
ToggleFullscreen = "Keyboard/Alt & Keyboard/Return";
|
||||
CycleAspectRatio = "Keyboard/F6";
|
||||
CycleInterlaceMode = "Keyboard/F5";
|
||||
CycleMipmapMode = "Keyboard/Insert";
|
||||
GSDumpMultiFrame = "Keyboard/Control & Keyboard/Shift & Keyboard/F8";
|
||||
Screenshot = "Keyboard/F8";
|
||||
GSDumpSingleFrame = "Keyboard/Shift & Keyboard/F8";
|
||||
ToggleSoftwareRendering = "Keyboard/F9";
|
||||
ZoomIn = "Keyboard/Control & Keyboard/Plus";
|
||||
ZoomOut = "Keyboard/Control & Keyboard/Minus";
|
||||
InputRecToggleMode = "Keyboard/Shift & Keyboard/R";
|
||||
LoadStateFromSlot = "Keyboard/F3";
|
||||
SaveStateToSlot = "Keyboard/F1";
|
||||
NextSaveStateSlot = "Keyboard/F2";
|
||||
PreviousSaveStateSlot = "Keyboard/Shift & Keyboard/F2";
|
||||
OpenPauseMenu = "Keyboard/Escape";
|
||||
ToggleFrameLimit = "Keyboard/F4";
|
||||
TogglePause = "Keyboard/Space";
|
||||
ToggleSlowMotion = "Keyboard/Shift & Keyboard/Backtab";
|
||||
ToggleTurbo = "Keyboard/Tab";
|
||||
HoldTurbo = "Keyboard/Period";
|
||||
};
|
||||
"PCSX2/inis/PCSX2.ini".text = toPcsx2INI {
|
||||
UI = {
|
||||
SettingsVersion = 1;
|
||||
# Use the system theme
|
||||
Theme = "";
|
||||
HideMouseCursor = true;
|
||||
};
|
||||
Folders = {
|
||||
Bios = "/home/toast/.local/share/PCSX2/bios";
|
||||
};
|
||||
GameList.RecursivePaths = [
|
||||
"/home/toast/Games/PS2/"
|
||||
];
|
||||
"EmuCore/GS" = {
|
||||
dithering_ps2 = 1;
|
||||
upscale_multiplier = 2;
|
||||
};
|
||||
EmuCore = {
|
||||
EnableDiscordPresence = true;
|
||||
EnableFastBoot = true;
|
||||
McdFolderAutoManage = false;
|
||||
};
|
||||
|
||||
MemoryCards.Slot1_Filename = "MemoryCard1.ps2";
|
||||
|
||||
# Controller settings
|
||||
Pad1 = {
|
||||
Up = "SDL-0/DPadUp";
|
||||
Right = "SDL-0/DPadRight";
|
||||
Down = "SDL-0/DPadDown";
|
||||
Left = "SDL-0/DPadLeft";
|
||||
Triangle = "SDL-0/Y";
|
||||
Circle = "SDL-0/B";
|
||||
Cross = "SDL-0/A";
|
||||
Square = "SDL-0/X";
|
||||
Select = "SDL-0/Back";
|
||||
Start = "SDL-0/Start";
|
||||
L1 = "SDL-0/LeftShoulder";
|
||||
L2 = "SDL-0/+LeftTrigger";
|
||||
R1 = "SDL-0/RightShoulder";
|
||||
R2 = "SDL-0/+RightTrigger";
|
||||
L3 = "SDL-0/LeftStick";
|
||||
R3 = "SDL-0/RightStick";
|
||||
Analog = "SDL-0/Guide";
|
||||
LUp = "SDL-0/-LeftY";
|
||||
LRight = "SDL-0/+LeftX";
|
||||
LDown = "SDL-0/+LeftY";
|
||||
LLeft = "SDL-0/-LeftX";
|
||||
RUp = "SDL-0/-RightY";
|
||||
RRight = "SDL-0/+RightX";
|
||||
RDown = "SDL-0/+RightY";
|
||||
RLeft = "SDL-0/-RightX";
|
||||
LargeMotor = "SDL-0/LargeMotor";
|
||||
SmallMotor = "SDL-0/SmallMotor";
|
||||
};
|
||||
# Default hotkeys
|
||||
Hotkeys = {
|
||||
ToggleFullscreen = "Keyboard/Alt & Keyboard/Return";
|
||||
CycleAspectRatio = "Keyboard/F6";
|
||||
CycleInterlaceMode = "Keyboard/F5";
|
||||
CycleMipmapMode = "Keyboard/Insert";
|
||||
GSDumpMultiFrame = "Keyboard/Control & Keyboard/Shift & Keyboard/F8";
|
||||
Screenshot = "Keyboard/F8";
|
||||
GSDumpSingleFrame = "Keyboard/Shift & Keyboard/F8";
|
||||
ToggleSoftwareRendering = "Keyboard/F9";
|
||||
ZoomIn = "Keyboard/Control & Keyboard/Plus";
|
||||
ZoomOut = "Keyboard/Control & Keyboard/Minus";
|
||||
InputRecToggleMode = "Keyboard/Shift & Keyboard/R";
|
||||
LoadStateFromSlot = "Keyboard/F3";
|
||||
SaveStateToSlot = "Keyboard/F1";
|
||||
NextSaveStateSlot = "Keyboard/F2";
|
||||
PreviousSaveStateSlot = "Keyboard/Shift & Keyboard/F2";
|
||||
OpenPauseMenu = "Keyboard/Escape";
|
||||
ToggleFrameLimit = "Keyboard/F4";
|
||||
TogglePause = "Keyboard/Space";
|
||||
ToggleSlowMotion = "Keyboard/Shift & Keyboard/Backtab";
|
||||
ToggleTurbo = "Keyboard/Tab";
|
||||
HoldTurbo = "Keyboard/Period";
|
||||
};
|
||||
};
|
||||
# 007 nightfire
|
||||
"PCSX2/gamesettings/SLUS-20579_5B86BB62.ini".text = lib.generators.toINI {} {
|
||||
"PCSX2/gamesettings/SLUS-20579_5B86BB62.ini".text = toPcsx2INI {
|
||||
"EmuCore/GS".AspectRatio = "16:9";
|
||||
};
|
||||
"PCSX2/gamesettings/SLUS-21050_BEBF8793.ini".text = toPcsx2INI {
|
||||
"EmuCore/GS".AspectRatio = "16:9";
|
||||
Patches.Enable = [
|
||||
"60 FPS for Crashes"
|
||||
"60 FPS for Menus"
|
||||
"Progressive Scan"
|
||||
"MPH to KPH"
|
||||
"Extra Particles While Driving"
|
||||
];
|
||||
};
|
||||
};
|
||||
xdg.dataFile = {
|
||||
# I would prefer to use symlinkJoin like I do for the ISOs, but
|
||||
|
|
@ -150,10 +129,10 @@ in {
|
|||
};
|
||||
home-manager.users.toast.xdg.configFile = {
|
||||
"PCSX2/.stignore".text = ''
|
||||
cahe
|
||||
cache
|
||||
bios
|
||||
gamesettings
|
||||
inis/PCSX2.int*
|
||||
inis/PCSX2.ini*
|
||||
inis/debuggersettings
|
||||
inputprofiles
|
||||
logs
|
||||
|
|
|
|||
|
|
@ -1,27 +1,9 @@
|
|||
{pkgs, ...}: let
|
||||
snes-roms = [
|
||||
# ActRaiser
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/ActRaiser%20%28USA%29.zip";
|
||||
hash = "sha256-yxIL5Pqlp8xsx7wvNO1MlB8ffDjS0xpE+yrEfMj61As=";
|
||||
})
|
||||
# Kirby Super Star
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/Kirby%20Super%20Star%20%28USA%29.zip";
|
||||
hash = "sha256-NX5OjCthf4ZiAhamclRBRk8GiMjZX3JLeShm8sQdDfc=";
|
||||
})
|
||||
# Super Mario Kart
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/Super%20Mario%20Kart%20%28USA%29.zip";
|
||||
hash = "sha256-RLBxPBmBrXCuPdnWE07KamBNgGJ5IntQVUPeij+2HUI=";
|
||||
})
|
||||
];
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home = {
|
||||
packages = [
|
||||
(
|
||||
pkgs.retroarch.override {
|
||||
pkgs.wrapRetroArch {
|
||||
cores = with pkgs.libretro; [
|
||||
snes9x
|
||||
];
|
||||
|
|
@ -62,15 +44,6 @@ in {
|
|||
}
|
||||
)
|
||||
];
|
||||
file."Games/Roms/SNES/" = {
|
||||
onChange = ''
|
||||
${pkgs.retroarch}/bin/retroarch --scan "/home/toast/Games/Roms/SNES"
|
||||
'';
|
||||
source = pkgs.symlinkJoin {
|
||||
name = "snes-roms";
|
||||
paths = [snes-roms];
|
||||
};
|
||||
};
|
||||
};
|
||||
# Retroarch is dumb since it doesn't generate some folders (but it does for others)
|
||||
systemd.user.tmpfiles.rules = [
|
||||
|
|
@ -78,6 +51,28 @@ in {
|
|||
"d /%h/.local/share/retroarch/saves"
|
||||
"d /%h/.local/share/retroarch/states"
|
||||
];
|
||||
systemd.user.paths = {
|
||||
snes-roms = {
|
||||
Unit.Description = "Monitor SNES rom path for changes";
|
||||
Path = {
|
||||
PathChanged = "/%h/Games/SNES";
|
||||
Unit = "update-retroarch-library.service";
|
||||
};
|
||||
Install.WantedBy = ["default.target"];
|
||||
};
|
||||
};
|
||||
systemd.user.services.update-retroarch-library = {
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = pkgs.writeShellScript "scan-snes-games" ''
|
||||
${pkgs.libnotify}/bin/notify-send -a RetroArch \
|
||||
-i retroarch \
|
||||
"SNES games changed!" \
|
||||
"Scanning $TRIGGER_PATH..."
|
||||
${pkgs.retroarch}/bin/retroarch --scan "/home/toast/Games/SNES"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Sync saves and some other stuff
|
||||
|
|
|
|||
|
|
@ -1,12 +1,7 @@
|
|||
{config, ...}: {
|
||||
environment.systemPackages = with config; [
|
||||
nur.repos.ataraxiasjel.rpcs3
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
rpcs3
|
||||
];
|
||||
# Compiling RPCS3 takes quite a while
|
||||
nix.settings = {
|
||||
substituters = ["https://ataraxiadev-foss.cachix.org"];
|
||||
trusted-public-keys = ["ataraxiadev-foss.cachix.org-1:ws/jmPRUF5R8TkirnV1b525lP9F/uTBsz2KraV61058="];
|
||||
};
|
||||
|
||||
# Increase the memory lock limit
|
||||
security.pam.loginLimits = [
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
}: {
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
localNetworkGameTransfers.openFirewall = true;
|
||||
# Doubt that I'll use it, but I'll enable it anyways
|
||||
remotePlay.openFirewall = true;
|
||||
|
||||
|
|
@ -19,14 +20,15 @@
|
|||
then true
|
||||
else false;
|
||||
|
||||
# Celeste mod manager
|
||||
home-manager.users.toast = {
|
||||
systemd.user.tmpfiles.rules = [
|
||||
"r '/%h/.local/share/applications/Steam Linux Runtime *.desktop'"
|
||||
"r '/%h/.local/share/applications/Proton *.desktop'"
|
||||
];
|
||||
services.flatpak.packages = [
|
||||
# Celeste mod manager
|
||||
"io.github.everestapi.Olympus"
|
||||
];
|
||||
home.packages = [pkgs.sgdboop];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
13
roles/gaming/sdl-keychron-blacklist.patch
Normal file
13
roles/gaming/sdl-keychron-blacklist.patch
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
|
||||
index 5ce36de86..37bf5ca85 100644
|
||||
--- a/src/joystick/SDL_joystick.c
|
||||
+++ b/src/joystick/SDL_joystick.c
|
||||
@@ -281,6 +281,8 @@ static Uint32 initial_blacklist_devices[] = {
|
||||
MAKE_VIDPID(0x3297, 0x1969), // Moonlander MK1 Keyboard
|
||||
MAKE_VIDPID(0x3434, 0x0211), // Keychron K1 Pro System Control
|
||||
MAKE_VIDPID(0x04f2, 0xa13c), // HP Deluxe Webcam KQ246AA
|
||||
+ MAKE_VIDPID(0x3434, 0x0353), // Keychron V5 System Control
|
||||
+ MAKE_VIDPID(0x3434, 0xd030), // Keychron Link
|
||||
};
|
||||
static SDL_vidpid_list blacklist_devices = {
|
||||
SDL_HINT_JOYSTICK_BLACKLIST_DEVICES, 0, 0, NULL,
|
||||
|
|
@ -11,6 +11,24 @@
|
|||
devices = ["steamdeck" "server" "pc" "winmax2"];
|
||||
path = "~/.local/share/Steam/steamapps/compatdata/201810/pfx/drive_c/users/steamuser/Saved Games/MachineGames/Wolfenstein The New Order/";
|
||||
};
|
||||
"project-diva-mods" = {
|
||||
label = "Project Diva Mods";
|
||||
id = "7pscj-6egww";
|
||||
devices = ["steamdeck" "server" "pc" "winmax2"];
|
||||
path = "~/.local/share/Steam/steamapps/common/Hatsune Miku Project DIVA Mega Mix Plus/mods/";
|
||||
};
|
||||
"project-eden-saves" = {
|
||||
label = "Project Eden saves";
|
||||
id = "xa3qx-3ax5k";
|
||||
devices = ["server" "pc" "winmax2" "steamdeck"];
|
||||
path = "~/.local/share/Steam/steamapps/compatdata/1761390/pfx/drive_c/users/steamuser/AppData/Roaming/EDEN/";
|
||||
};
|
||||
"games" = {
|
||||
label = "Games";
|
||||
id = "mwzph-gf2df";
|
||||
devices = ["server" "pc" "winmax2" "steamdeck"];
|
||||
path = "~/Games";
|
||||
};
|
||||
};
|
||||
home-manager.users.toast.home.file."steam-201810-ignore" = {
|
||||
target = ".local/share/Steam/steamapps/compatdata/201810/pfx/drive_c/users/steamuser/Saved Games/MachineGames/Wolfenstein The New Order/.stignore";
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./programs
|
||||
./gnome.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
flakeSelf,
|
||||
...
|
||||
}: {
|
||||
services = {
|
||||
xserver = {
|
||||
displayManager.gdm.enable = true;
|
||||
desktopManager.gnome.enable = true;
|
||||
};
|
||||
gnome.gnome-browser-connector.enable = true;
|
||||
};
|
||||
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme = "gnome";
|
||||
style = "adwaita-dark";
|
||||
};
|
||||
|
||||
# Manage this with home-manager
|
||||
services.gnome.gnome-keyring.enable = lib.mkForce false;
|
||||
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
services.gnome-keyring.enable = true;
|
||||
}
|
||||
];
|
||||
|
||||
# Extensions
|
||||
environment.systemPackages = with pkgs.gnomeExtensions; [
|
||||
appindicator
|
||||
dash-to-dock
|
||||
panel-workspace-scroll
|
||||
];
|
||||
|
||||
home-manager.users.toast = {
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = "adw-gtk3-dark";
|
||||
package = pkgs.adw-gtk3;
|
||||
};
|
||||
cursorTheme = {
|
||||
name = "Kasane Teto";
|
||||
package = flakeSelf.outputs.packages.x86_64-linux.kasane-teto-cursor;
|
||||
};
|
||||
};
|
||||
services.gnome-keyring.components = ["pkcs11" "secrets"];
|
||||
|
||||
dconf.settings = {
|
||||
"org/gnome/shell" = {
|
||||
enabled-extensions = [
|
||||
"appindicatorsupport@rgcjonas.gmail.com"
|
||||
"dash-to-dock@micxgx.gmail.com"
|
||||
"panel-workspace-scroll@polymeilex.github.io"
|
||||
];
|
||||
favorite-apps = ["firefox.desktop" "com.raggesilver.BlackBox.desktop" "org.gnome.Nautilus.desktop" "android-studio.desktop"];
|
||||
};
|
||||
"org/gnome/desktop/interface" = {
|
||||
color-scheme = "prefer-dark";
|
||||
};
|
||||
"org/gnome/desktop/wm/preferences" = {
|
||||
resize-with-right-button = true;
|
||||
};
|
||||
"org/gnome/mutter" = {
|
||||
dynamic-workspaces = true;
|
||||
edge-tiling = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
programs.gnome-terminal.enable = false;
|
||||
environment = with pkgs; {
|
||||
gnome.excludePackages = [gnome-console];
|
||||
systemPackages = [
|
||||
blackbox-terminal
|
||||
nautilus-open-in-blackbox
|
||||
];
|
||||
};
|
||||
|
||||
home-manager.users.toast = {
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.file.".local/share/blackbox/schemes".source =
|
||||
(pkgs.fetchgit {
|
||||
url = "https://github.com/catppuccin/tilix.git";
|
||||
hash = "sha256-jWnxEtoqqqitHsaDErQNNYjv8DBcrJD0XeIKNopbO3c=";
|
||||
})
|
||||
+ /themes;
|
||||
dconf.settings = with lib.hm.gvariant; {
|
||||
"com/raggesilver/BlackBox" = {
|
||||
# Dark mode
|
||||
style-preference = mkUint32 2;
|
||||
theme-dark = "Catppuccin Mocha";
|
||||
# Default working directory is home folder
|
||||
working-directory-mode = mkUint32 1;
|
||||
custom-font = "JetBrainsMono Nerd Font Mono 12";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./blackbox.nix
|
||||
./firefox.nix
|
||||
./nautilus.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
gnome-tweaks
|
||||
dconf-editor
|
||||
];
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
{pkgs, ...}: let
|
||||
firefox-gnome-theme = pkgs.fetchFromGitHub {
|
||||
owner = "rafaelmardojai";
|
||||
repo = "firefox-gnome-theme";
|
||||
rev = "v129";
|
||||
hash = "sha256-MOE9NeU2i6Ws1GhGmppMnjOHkNLl2MQMJmGhaMzdoJM=";
|
||||
};
|
||||
profile-location = ".mozilla/firefox/jdnxpg97.temp";
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
programs.firefox = {
|
||||
enableGnomeExtensions = true;
|
||||
};
|
||||
home.file."${profile-location}/chrome".source = firefox-gnome-theme;
|
||||
};
|
||||
programs.firefox = {
|
||||
autoConfig = ''
|
||||
lockPref("toolkit.legacyUserProfileCustomizations.stylesheets",true);
|
||||
lockPref("svg.context-properties.content.enabled",true);
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
nautilus-python
|
||||
];
|
||||
|
||||
home-manager.users.toast = {
|
||||
dconf.settings = {
|
||||
"org/gnome/preferences" = {
|
||||
date-time-format = "detailed";
|
||||
show-create-link = true;
|
||||
show-delete-permanently = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -3,5 +3,6 @@
|
|||
./plasma.nix
|
||||
./sddm.nix
|
||||
./programs
|
||||
./patches
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,191 +0,0 @@
|
|||
diff --git a/share/color-schemes/BreezeClassic.colors b/share/color-schemes/BreezeClassicTint.colors
|
||||
similarity index 70%
|
||||
rename from share/color-schemes/BreezeClassic.colors
|
||||
rename to share/color-schemes/BreezeClassicTint.colors
|
||||
index 8dbc299..d64e300 100644
|
||||
--- a/share/color-schemes/BreezeClassic.colors
|
||||
+++ b/share/color-schemes/BreezeClassicTint.colors
|
||||
@@ -103,48 +103,12 @@ ForegroundPositive=46,204,113
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeClassic
|
||||
-Name=Breeze Classic
|
||||
-Name[ar]=نسيم التقليدي
|
||||
-Name[az]=Breeze klassik
|
||||
-Name[bg]=Breeze Класически
|
||||
-Name[ca]=Brisa clàssica
|
||||
-Name[ca@valencia]=Brisa clàssica
|
||||
-Name[cs]=Breeze Classic
|
||||
-Name[da]=Breeze Classic
|
||||
-Name[de]=Breeze Klassisch
|
||||
-Name[el]=Breeze κλασικό
|
||||
-Name[en_GB]=Breeze Classic
|
||||
-Name[es]=Brisa clásico
|
||||
-Name[eu]=Breeze klasikoa
|
||||
-Name[fi]=Perinteinen Breeze
|
||||
-Name[fr]=Breeze classique
|
||||
-Name[gl]=Brisa clásica
|
||||
-Name[hi]=ब्रीज़ क्लासिक
|
||||
-Name[hu]=Breeze Classic
|
||||
-Name[ia]=Brisa Classic
|
||||
-Name[id]=Breeze Klasik
|
||||
-Name[it]=Brezza classico
|
||||
-Name[ja]=Breeze クラシック
|
||||
-Name[ka]=Breeze კლასიკური
|
||||
-Name[ko]=Breeze 고전
|
||||
-Name[nl]=Breeze Classic
|
||||
-Name[nn]=Breeze klassisk
|
||||
-Name[pl]=Klasyczna Bryza
|
||||
-Name[pt]=Brisa Clássica
|
||||
-Name[pt_BR]=Breeze Classic
|
||||
-Name[ro]=Briză, clasic
|
||||
-Name[ru]=Breeze, классический вариант
|
||||
-Name[sk]=Klasický vánok
|
||||
-Name[sl]=Sapica, klasična
|
||||
-Name[sv]=Breeze klassisk
|
||||
-Name[tr]=Esinti Klasik
|
||||
-Name[uk]=Класична Breeze
|
||||
-Name[x-test]=xxBreeze Classicxx
|
||||
-Name[zh_CN]=Breeze 微风经典
|
||||
-Name[zh_TW]=Breeze Classic
|
||||
+ColorScheme=BreezeClassicTint
|
||||
+Name=Breeze Classic (Tint)
|
||||
accentActiveTitlebar=true
|
||||
accentInactiveTitlebar=false
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
diff --git a/share/color-schemes/BreezeDark.colors b/share/color-schemes/BreezeDarkTint.colors
|
||||
similarity index 71%
|
||||
rename from share/color-schemes/BreezeDark.colors
|
||||
rename to share/color-schemes/BreezeDarkTint.colors
|
||||
index fc1fcb0..a97a552 100644
|
||||
--- a/share/color-schemes/BreezeDark.colors
|
||||
+++ b/share/color-schemes/BreezeDarkTint.colors
|
||||
@@ -131,57 +131,10 @@ ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeDark
|
||||
-Name=Breeze Dark
|
||||
-Name[ar]=نسيم داكن
|
||||
-Name[az]=Breeze - Tünd
|
||||
-Name[bg]=Breeze Тъмен
|
||||
-Name[bs]=Breeze tamna
|
||||
-Name[ca]=Brisa fosca
|
||||
-Name[ca@valencia]=Brisa fosca
|
||||
-Name[cs]=Breeze Tmavé
|
||||
-Name[da]=Breeze Dark
|
||||
-Name[de]=Breeze Dunkel
|
||||
-Name[el]=Breeze σκούρο
|
||||
-Name[en_GB]=Breeze Dark
|
||||
-Name[es]=Brisa oscuro
|
||||
-Name[et]=Breeze tume
|
||||
-Name[eu]=Breeze iluna
|
||||
-Name[fi]=Tumma Breeze
|
||||
-Name[fr]=Brise sombre
|
||||
-Name[gl]=Brisa escura
|
||||
-Name[he]=Breeze Dark
|
||||
-Name[hi]=ब्रीज़ गहरा
|
||||
-Name[hu]=Breeze Dark
|
||||
-Name[ia]=Brisa obscure
|
||||
-Name[id]=Breeze Gelap
|
||||
-Name[it]=Brezza scuro
|
||||
-Name[ja]=Breeze ダーク
|
||||
-Name[ka]=Breeze მუქი
|
||||
-Name[ko]=어두운 Breeze
|
||||
-Name[lt]=Breeze tamsus
|
||||
-Name[nb]=Breeze mørk
|
||||
-Name[nl]=Breeze Dark
|
||||
-Name[nn]=Breeze mørk
|
||||
-Name[pa]=ਬਰੀਜ਼ ਗੂੜ੍ਹਾ
|
||||
-Name[pl]=Ciemna Bryza
|
||||
-Name[pt]=Brisa Escura
|
||||
-Name[pt_BR]=Breeze Dark
|
||||
-Name[ro]=Briză, întunecat
|
||||
-Name[ru]=Breeze, тёмный вариант
|
||||
-Name[sk]=Tmavý vánok
|
||||
-Name[sl]=Sapica, temna
|
||||
-Name[sr]=Поветарац тамни
|
||||
-Name[sr@ijekavian]=Поветарац тамни
|
||||
-Name[sr@ijekavianlatin]=Povetarac tamni
|
||||
-Name[sr@latin]=Povetarac tamni
|
||||
-Name[sv]=Breeze mörk
|
||||
-Name[tg]=Насими торик
|
||||
-Name[tr]=Esinti Koyu
|
||||
-Name[uk]=Темна Breeze
|
||||
-Name[x-test]=xxBreeze Darkxx
|
||||
-Name[zh_CN]=Breeze 微风深色
|
||||
-Name[zh_TW]=Breeze Dark
|
||||
+ColorScheme=BreezeDarkTint
|
||||
+Name=Breeze Dark (Tint)
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
diff --git a/share/color-schemes/BreezeLight.colors b/share/color-schemes/BreezeLightTint.colors
|
||||
similarity index 75%
|
||||
rename from share/color-schemes/BreezeLight.colors
|
||||
rename to share/color-schemes/BreezeLightTint.colors
|
||||
index 5bfdc22..223509c 100644
|
||||
--- a/share/color-schemes/BreezeLight.colors
|
||||
+++ b/share/color-schemes/BreezeLightTint.colors
|
||||
@@ -131,50 +131,10 @@ ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeLight
|
||||
-Name=Breeze Light
|
||||
-Name[ar]=نسيم فاتح
|
||||
-Name[az]=Breeze - İşıqlı
|
||||
-Name[bg]=Breeze Светъл
|
||||
-Name[ca]=Brisa clara
|
||||
-Name[ca@valencia]=Brisa clara
|
||||
-Name[cs]=Breeze Světlé
|
||||
-Name[da]=Breeze Light
|
||||
-Name[de]=Breeze Hell
|
||||
-Name[el]=Breeze φωτεινό
|
||||
-Name[en_GB]=Breeze Light
|
||||
-Name[es]=Brisa claro
|
||||
-Name[et]=Breeze hele
|
||||
-Name[eu]=Breeze argia
|
||||
-Name[fi]=Vaalea Breeze
|
||||
-Name[fr]=Brise clair
|
||||
-Name[gl]=Brisa clara
|
||||
-Name[hi]=ब्रीज़ हलका
|
||||
-Name[hu]=Breeze Light
|
||||
-Name[ia]=Brisa Ligier
|
||||
-Name[id]=Breeze Terang
|
||||
-Name[it]=Brezza chiaro
|
||||
-Name[ja]=Breeze ライト
|
||||
-Name[ka]=Breeze ღია
|
||||
-Name[ko]=밝은 Breeze
|
||||
-Name[lt]=Breeze šviesus
|
||||
-Name[nl]=Breeze Light
|
||||
-Name[nn]=Breeze lys
|
||||
-Name[pa]=ਬਰੀਜ਼ ਹਲਕਾ
|
||||
-Name[pl]=Jasna Bryza
|
||||
-Name[pt]=Brisa Clara
|
||||
-Name[pt_BR]=Breeze Light
|
||||
-Name[ro]=Briză, luminos
|
||||
-Name[ru]=Breeze, светлый вариант
|
||||
-Name[sk]=Svetlý vánok
|
||||
-Name[sl]=Sapica, svetla
|
||||
-Name[sv]=Breeze ljus
|
||||
-Name[tg]=Насими сабук
|
||||
-Name[tr]=Esinti Açık
|
||||
-Name[uk]=Світла Breeze
|
||||
-Name[x-test]=xxBreeze Lightxx
|
||||
-Name[zh_CN]=Breeze 微风浅色
|
||||
-Name[zh_TW]=Breeze Light
|
||||
+ColorScheme=BreezeLightTint
|
||||
+Name=Breeze Light (Tint)
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
29
roles/kde/patches/default.nix
Normal file
29
roles/kde/patches/default.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{lib, ...}: let
|
||||
rootDirs = builtins.readDir ./.;
|
||||
removeFiles = lib.attrsets.filterAttrs (n: v: v == "directory") rootDirs;
|
||||
programsToPatch = builtins.attrNames removeFiles;
|
||||
|
||||
bigOverlay = final: prev:
|
||||
lib.attrsets.mergeAttrsList (
|
||||
lib.lists.forEach programsToPatch (
|
||||
program: let
|
||||
unpatchedProgram = prev."${program}";
|
||||
newPatches = lib.toast.patches.patchesInPath (lib.path.append ./. program);
|
||||
in {
|
||||
"${program}" = unpatchedProgram.overrideAttrs {
|
||||
version = "${unpatchedProgram.version}-patched";
|
||||
__intentionallyOverridingVersion = true;
|
||||
patches = unpatchedProgram.patches ++ newPatches;
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
in {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
kdePackages = prev.kdePackages.overrideScope bigOverlay;
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
6
roles/kde/patches/plasma-desktop/patches.txt
Normal file
6
roles/kde/patches/plasma-desktop/patches.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
Plasma 6.6.0:
|
||||
|
||||
Pr 3256 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3256
|
||||
Pr 3259 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3259
|
||||
Pr 3269 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3269
|
||||
Pr 3356 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3356
|
||||
94
roles/kde/patches/plasma-desktop/pr3256.patch
Normal file
94
roles/kde/patches/plasma-desktop/pr3256.patch
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
From 79d010f4bcdb19d5a19d222dd3c3cb581fde891d Mon Sep 17 00:00:00 2001
|
||||
From: David Redondo <kde@david-redondo.de>
|
||||
Date: Fri, 17 Oct 2025 15:15:51 +0200
|
||||
Subject: [PATCH] applets/taskmanager: Allow changing a tasks volume by
|
||||
scrolling
|
||||
|
||||
FEATURE:510668
|
||||
FIXED-IN:6.6
|
||||
---
|
||||
.../package/contents/config/main.xml | 1 +
|
||||
.../package/contents/ui/ConfigBehavior.qml | 3 ++-
|
||||
.../package/contents/ui/MouseHandler.qml | 20 +++++++++++++++++++
|
||||
3 files changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/applets/taskmanager/package/contents/config/main.xml b/applets/taskmanager/package/contents/config/main.xml
|
||||
index f71a7a8457..8c3b68785b 100644
|
||||
--- a/applets/taskmanager/package/contents/config/main.xml
|
||||
+++ b/applets/taskmanager/package/contents/config/main.xml
|
||||
@@ -90,6 +90,7 @@
|
||||
<choice name="None"/>
|
||||
<choice name="AllTask"/>
|
||||
<choice name="TaskOnly"/>
|
||||
+ <choice name="AdjustVolume"/>
|
||||
</choices>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
diff --git a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
index 2c0dc19154..73357e9dcd 100644
|
||||
--- a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
+++ b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
@@ -202,13 +202,14 @@ KCMUtils.SimpleKCM {
|
||||
|
||||
QQC2.ComboBox {
|
||||
id: wheelEnabled
|
||||
- Kirigami.FormData.label: i18nc("@label:listbox Part of a sentence: 'Scrolling behavior does nothing/cycles through tasks/cycles through the selected task's windows'", "Scrolling behavior:")
|
||||
+ Kirigami.FormData.label: i18nc("@label:listbox Part of a sentence: 'Scrolling behavior does nothing/cycles through tasks/cycles through the selected task's windows/adjusts the hovered task’s volume''", "Scrolling behavior:")
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: Kirigami.Units.gridUnit * 14
|
||||
model: [
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior does nothing'", "Does nothing"),
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior cycles through all tasks'", "Cycles through all tasks"),
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior cycles through the hovered task's windows'", "Cycles through the hovered task’s windows"),
|
||||
+ i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior adjusts the hovered task’s volume'", "Adjusts the hovered task’s volume"),
|
||||
]
|
||||
}
|
||||
|
||||
diff --git a/applets/taskmanager/package/contents/ui/MouseHandler.qml b/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
index cf2362835a..3f8d703d73 100644
|
||||
--- a/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
+++ b/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
@@ -8,6 +8,7 @@ import QtQuick
|
||||
|
||||
import org.kde.taskmanager as TaskManager
|
||||
import org.kde.plasma.plasmoid
|
||||
+import org.kde.plasma.private.volume as PlasmaPa
|
||||
|
||||
import "code/tools.js" as TaskTools
|
||||
|
||||
@@ -157,6 +158,10 @@ DropArea {
|
||||
}
|
||||
}
|
||||
|
||||
+ PlasmaPa.GlobalConfig {
|
||||
+ id: plasmaPaConfig
|
||||
+ }
|
||||
+
|
||||
WheelHandler {
|
||||
id: wheelHandler
|
||||
|
||||
@@ -179,6 +184,21 @@ DropArea {
|
||||
increment--;
|
||||
}
|
||||
const anchor = dropArea.target.childAt(event.x, event.y);
|
||||
+ if (Plasmoid.configuration.wheelEnabled === 3) {
|
||||
+ const loudest = anchor?.audioStreams?.reduce((loudest, stream) => Math.max(loudest, stream.volume), 0)
|
||||
+ const step = (pulseAudio.item.normalVolume - pulseAudio.item.minimalVolume) * plasmaPaConfig.volumeStep / 100;
|
||||
+ anchor?.audioStreams?.forEach((stream) => {
|
||||
+ let delta = step * increment;
|
||||
+ if (loudest > 0) {
|
||||
+ delta *= stream.volume / loudest;
|
||||
+ }
|
||||
+ const volume = stream.volume + delta;
|
||||
+ console.log(volume, Math.max(pulseAudio.item.minimalVolume, Math.min(volume, pulseAudio.item.normalVolume)));
|
||||
+ stream.model.Volume = Math.max(pulseAudio.item.minimalVolume, Math.min(volume, pulseAudio.item.normalVolume));
|
||||
+ stream.model.Muted = volume === 0
|
||||
+ })
|
||||
+ return;
|
||||
+ }
|
||||
while (increment !== 0) {
|
||||
TaskTools.activateNextPrevTask(anchor, increment < 0, Plasmoid.configuration.wheelSkipMinimized, Plasmoid.configuration.wheelEnabled, tasks);
|
||||
increment += (increment < 0) ? 1 : -1;
|
||||
--
|
||||
GitLab
|
||||
|
||||
78
roles/kde/patches/plasma-desktop/pr3259.patch
Normal file
78
roles/kde/patches/plasma-desktop/pr3259.patch
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
From 57885ba4ec524bdc1c1326228f27c1c3a3561bba Mon Sep 17 00:00:00 2001
|
||||
From: Nate Graham <nate@kde.org>
|
||||
Date: Tue, 21 Oct 2025 13:39:40 -0600
|
||||
Subject: [PATCH] applets/kickoff: add spacing between non-switch-on-hover
|
||||
category items
|
||||
|
||||
Otherwise, their highlight effects touch, and it looks bad.
|
||||
|
||||
To avoid blowing up the layout as a result of this change, slightly
|
||||
decrease the height of these category list items too, which also reduces
|
||||
some code complexity.
|
||||
|
||||
BUG: 508985
|
||||
FIXED-IN: 6.6.0
|
||||
---
|
||||
applets/kickoff/ApplicationsPage.qml | 1 +
|
||||
applets/kickoff/KickoffListDelegate.qml | 9 ---------
|
||||
applets/kickoff/KickoffListView.qml | 5 +++++
|
||||
3 files changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/applets/kickoff/ApplicationsPage.qml b/applets/kickoff/ApplicationsPage.qml
|
||||
index c2baa75b52..fe8d6eaafb 100644
|
||||
--- a/applets/kickoff/ApplicationsPage.qml
|
||||
+++ b/applets/kickoff/ApplicationsPage.qml
|
||||
@@ -20,6 +20,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: kickoff.rootModel
|
||||
+ showingCategories: true
|
||||
// needed otherwise app displayed at top-level will show a first character as group.
|
||||
section.property: ""
|
||||
delegate: KickoffListDelegate {
|
||||
diff --git a/applets/kickoff/KickoffListDelegate.qml b/applets/kickoff/KickoffListDelegate.qml
|
||||
index b1f8afb3ce..02bfcfcacd 100644
|
||||
--- a/applets/kickoff/KickoffListDelegate.qml
|
||||
+++ b/applets/kickoff/KickoffListDelegate.qml
|
||||
@@ -72,15 +72,6 @@ AbstractKickoffItemDelegate {
|
||||
id: label
|
||||
Layout.fillWidth: !descriptionLabel.visible
|
||||
Layout.maximumWidth: root.width - root.leftPadding - root.rightPadding - icon.width - row.spacing
|
||||
- Layout.preferredHeight: {
|
||||
- if (root.isCategoryListItem) {
|
||||
- return root.compact ? implicitHeight : Math.round(implicitHeight * 1.5);
|
||||
- }
|
||||
- if (!root.compact && !descriptionLabel.visible) {
|
||||
- return implicitHeight + descriptionLabel.implicitHeight
|
||||
- }
|
||||
- return implicitHeight;
|
||||
- }
|
||||
text: root.text
|
||||
textFormat: root.isMultilineText ? Text.StyledText : Text.PlainText
|
||||
elide: Text.ElideRight
|
||||
diff --git a/applets/kickoff/KickoffListView.qml b/applets/kickoff/KickoffListView.qml
|
||||
index c7787493e0..382d146428 100644
|
||||
--- a/applets/kickoff/KickoffListView.qml
|
||||
+++ b/applets/kickoff/KickoffListView.qml
|
||||
@@ -33,6 +33,7 @@ EmptyPage {
|
||||
property alias section: view.section
|
||||
property alias highlight: view.highlight
|
||||
property alias view: view
|
||||
+ property bool showingCategories: false
|
||||
|
||||
property bool mainContentView: false
|
||||
property bool hasSectionView: false
|
||||
@@ -144,6 +145,10 @@ EmptyPage {
|
||||
width: view.availableWidth
|
||||
}
|
||||
|
||||
+ // Without switch-on-hover, it's possible for the selected category and the hovered category to be adjacent.
|
||||
+ // When this happens, their highlights tuoch and look ungly without some artificial spacing added.
|
||||
+ spacing: root.showingCategories && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
+
|
||||
section {
|
||||
property: "group"
|
||||
criteria: ViewSection.FullString
|
||||
--
|
||||
GitLab
|
||||
|
||||
66
roles/kde/patches/plasma-desktop/pr3269.patch
Normal file
66
roles/kde/patches/plasma-desktop/pr3269.patch
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
From a63fce38f285b59407c24f44639023d41b5d3ca9 Mon Sep 17 00:00:00 2001
|
||||
From: Nate Graham <nate@kde.org>
|
||||
Date: Thu, 30 Oct 2025 20:01:32 -0600
|
||||
Subject: [PATCH] applets/kickoff: add separation between Places page list
|
||||
items too
|
||||
|
||||
Missed in 57885ba4ec524bdc1c1326228f27c1c3a3561bba
|
||||
|
||||
BUG: 508985
|
||||
FIXED-IN: 6.6.0
|
||||
---
|
||||
applets/kickoff/ApplicationsPage.qml | 2 +-
|
||||
applets/kickoff/KickoffListView.qml | 4 ++--
|
||||
applets/kickoff/PlacesPage.qml | 1 +
|
||||
3 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/applets/kickoff/ApplicationsPage.qml b/applets/kickoff/ApplicationsPage.qml
|
||||
index fe8d6eaafb..206ddd958d 100644
|
||||
--- a/applets/kickoff/ApplicationsPage.qml
|
||||
+++ b/applets/kickoff/ApplicationsPage.qml
|
||||
@@ -20,7 +20,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: kickoff.rootModel
|
||||
- showingCategories: true
|
||||
+ isSidebar: true
|
||||
// needed otherwise app displayed at top-level will show a first character as group.
|
||||
section.property: ""
|
||||
delegate: KickoffListDelegate {
|
||||
diff --git a/applets/kickoff/KickoffListView.qml b/applets/kickoff/KickoffListView.qml
|
||||
index 382d146428..2d67bd59b7 100644
|
||||
--- a/applets/kickoff/KickoffListView.qml
|
||||
+++ b/applets/kickoff/KickoffListView.qml
|
||||
@@ -33,7 +33,7 @@ EmptyPage {
|
||||
property alias section: view.section
|
||||
property alias highlight: view.highlight
|
||||
property alias view: view
|
||||
- property bool showingCategories: false
|
||||
+ property bool isSidebar: false
|
||||
|
||||
property bool mainContentView: false
|
||||
property bool hasSectionView: false
|
||||
@@ -147,7 +147,7 @@ EmptyPage {
|
||||
|
||||
// Without switch-on-hover, it's possible for the selected category and the hovered category to be adjacent.
|
||||
// When this happens, their highlights tuoch and look ungly without some artificial spacing added.
|
||||
- spacing: root.showingCategories && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
+ spacing: root.isSidebar && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
|
||||
section {
|
||||
property: "group"
|
||||
diff --git a/applets/kickoff/PlacesPage.qml b/applets/kickoff/PlacesPage.qml
|
||||
index ff92f535e4..7f81096834 100644
|
||||
--- a/applets/kickoff/PlacesPage.qml
|
||||
+++ b/applets/kickoff/PlacesPage.qml
|
||||
@@ -19,6 +19,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: placesCategoryModel
|
||||
+ isSidebar: true
|
||||
delegate: KickoffListDelegate {
|
||||
url: ""
|
||||
description: ""
|
||||
--
|
||||
GitLab
|
||||
|
||||
37
roles/kde/patches/plasma-desktop/pr3356.patch
Normal file
37
roles/kde/patches/plasma-desktop/pr3356.patch
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
From 04c747a41d8c01248c7baeec5c852c2298f76fc3 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Wolk <cwo.kde@posteo.net>
|
||||
Date: Mon, 1 Dec 2025 14:36:09 +0100
|
||||
Subject: [PATCH] applets/kickoff: also close when triggering from footer menu
|
||||
|
||||
Kickoff already closes when one of the power/session buttons from the
|
||||
menu is pressed, but the same does not happen if the same action is
|
||||
shown in the overflow menu.
|
||||
|
||||
Instead, also close kickoff in that case.
|
||||
|
||||
CCBUG: 508725
|
||||
---
|
||||
applets/kickoff/LeaveButtons.qml | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/applets/kickoff/LeaveButtons.qml b/applets/kickoff/LeaveButtons.qml
|
||||
index c9a14dc3254..acf83639341 100644
|
||||
--- a/applets/kickoff/LeaveButtons.qml
|
||||
+++ b/applets/kickoff/LeaveButtons.qml
|
||||
@@ -214,7 +214,12 @@ RowLayout {
|
||||
|
||||
text: model.display
|
||||
icon: model.decoration
|
||||
- onClicked: filteredMenuItemsModel.trigger(index)
|
||||
+ onClicked: {
|
||||
+ filteredMenuItemsModel.trigger(index)
|
||||
+ if (kickoff.hideOnWindowDeactivate) {
|
||||
+ kickoff.expanded = false;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
onObjectAdded: (index, object) => contextMenu.addMenuItem(object)
|
||||
onObjectRemoved: (index, object) => contextMenu.removeMenuItem(object)
|
||||
--
|
||||
GitLab
|
||||
|
||||
5
roles/kde/patches/spectacle/patches.txt
Normal file
5
roles/kde/patches/spectacle/patches.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
Pr 462 https://invent.kde.org/plasma/spectacle/-/merge_requests/462
|
||||
Pr 487 https://invent.kde.org/plasma/spectacle/-/merge_requests/487
|
||||
|
||||
Plasma 6.6.0:
|
||||
Pr 493 https://invent.kde.org/plasma/spectacle/-/merge_requests/493
|
||||
2844
roles/kde/patches/spectacle/pr462.patch
Normal file
2844
roles/kde/patches/spectacle/pr462.patch
Normal file
File diff suppressed because it is too large
Load diff
704
roles/kde/patches/spectacle/pr487.patch
Normal file
704
roles/kde/patches/spectacle/pr487.patch
Normal file
|
|
@ -0,0 +1,704 @@
|
|||
From d72a6fcb76053139ea709d7b1a4f45aa430a066d Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 17:32:20 -0500
|
||||
Subject: [PATCH 1/4] Enhance OCR language settings management and
|
||||
synchronization
|
||||
|
||||
- Improved signal handling in OcrLanguageSelector to prevent unnecessary updates.
|
||||
- Added config sync suspension functionality in OcrManager to manage settings changes.
|
||||
- Adjusted SettingsDialog to ensure proper synchronization of OCR configurations.
|
||||
---
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.cpp | 7 +-
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.h | 4 +-
|
||||
.../SettingsDialog/OcrLanguageSelector.cpp | 132 ++++++++----------
|
||||
src/Gui/SettingsDialog/OcrLanguageSelector.h | 7 +-
|
||||
src/Gui/SettingsDialog/SettingsDialog.cpp | 25 +++-
|
||||
src/Gui/SettingsDialog/SettingsDialog.h | 1 +
|
||||
src/OcrManager.cpp | 25 ++++
|
||||
src/OcrManager.h | 3 +
|
||||
8 files changed, 117 insertions(+), 87 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
index f6be13d56..ae0a997c3 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
#include "OcrLanguageSelector.h"
|
||||
#include "OcrManager.h"
|
||||
-#include "settings.h"
|
||||
#include "ui_GeneralOptions.h"
|
||||
|
||||
#include <KLocalizedString>
|
||||
@@ -49,7 +48,7 @@ GeneralOptionsPage::GeneralOptionsPage(QWidget *parent)
|
||||
|
||||
GeneralOptionsPage::~GeneralOptionsPage() = default;
|
||||
|
||||
-void GeneralOptionsPage::refreshOcrLanguageSettings()
|
||||
+void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
{
|
||||
OcrManager *ocrManager = OcrManager::instance();
|
||||
|
||||
@@ -62,7 +61,9 @@ void GeneralOptionsPage::refreshOcrLanguageSettings()
|
||||
m_ui->ocrLanguageScrollArea->setVisible(true);
|
||||
m_ui->ocrUnavailableWidget->setVisible(false);
|
||||
|
||||
- m_ocrLanguageSelector->refresh();
|
||||
+ if (rebuildSelector) {
|
||||
+ m_ocrLanguageSelector->refresh();
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.h b/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
index a3a5cb17d..bbb6d79a8 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
@@ -20,8 +20,8 @@ class GeneralOptionsPage : public QWidget
|
||||
public:
|
||||
explicit GeneralOptionsPage(QWidget *parent = nullptr);
|
||||
~GeneralOptionsPage() override;
|
||||
-
|
||||
- void refreshOcrLanguageSettings();
|
||||
+
|
||||
+ void refreshOcrLanguageSettings(bool rebuildSelector = true);
|
||||
|
||||
/**
|
||||
* @brief Get direct access to the OCR language selector widget
|
||||
diff --git a/src/Gui/SettingsDialog/OcrLanguageSelector.cpp b/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
index d1d809323..815b4c707 100644
|
||||
--- a/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
+++ b/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <KLocalizedString>
|
||||
|
||||
#include <QCheckBox>
|
||||
+#include <QSignalBlocker>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
@@ -19,7 +20,6 @@ using namespace Qt::Literals::StringLiterals;
|
||||
OcrLanguageSelector::OcrLanguageSelector(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_layout(new QVBoxLayout(this))
|
||||
- , m_blockSignals(false)
|
||||
, m_ocrManager(OcrManager::instance())
|
||||
{
|
||||
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||
@@ -46,15 +46,14 @@ QStringList OcrLanguageSelector::selectedLanguages() const
|
||||
|
||||
void OcrLanguageSelector::setSelectedLanguages(const QStringList &languages)
|
||||
{
|
||||
- m_blockSignals = true;
|
||||
+ QSignalBlocker blocker(this);
|
||||
|
||||
for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
const QString langCode = checkbox->property("languageCode").toString();
|
||||
+ QSignalBlocker checkboxBlocker(checkbox);
|
||||
checkbox->setChecked(languages.contains(langCode));
|
||||
}
|
||||
|
||||
- m_blockSignals = false;
|
||||
-
|
||||
enforceSelectionLimits();
|
||||
}
|
||||
|
||||
@@ -67,18 +66,11 @@ bool OcrLanguageSelector::isDefault() const
|
||||
return false;
|
||||
}
|
||||
|
||||
- // Check if it's English (preferred default)
|
||||
- for (const QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- // English is available, so default is English
|
||||
- return current.contains(u"eng"_s);
|
||||
- }
|
||||
- }
|
||||
+ QCheckBox *defaultCheckbox = findDefaultCheckbox();
|
||||
|
||||
- // English not available, default is the first available language
|
||||
- if (!m_languageCheckboxes.isEmpty()) {
|
||||
- QString firstLangCode = m_languageCheckboxes.first()->property("languageCode").toString();
|
||||
- return current.contains(firstLangCode);
|
||||
+ if (defaultCheckbox) {
|
||||
+ QString defaultLangCode = defaultCheckbox->property("languageCode").toString();
|
||||
+ return current.contains(defaultLangCode);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -91,36 +83,28 @@ bool OcrLanguageSelector::hasChanges() const
|
||||
|
||||
void OcrLanguageSelector::applyDefaults()
|
||||
{
|
||||
- if (!m_languageCheckboxes.isEmpty()) {
|
||||
- m_blockSignals = true;
|
||||
-
|
||||
- for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- checkbox->setChecked(false);
|
||||
- }
|
||||
+ if (m_languageCheckboxes.isEmpty()) {
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- // Try to select English first
|
||||
- bool foundDefault = false;
|
||||
- for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- checkbox->setChecked(true);
|
||||
- foundDefault = true;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
+ QSignalBlocker blocker(this);
|
||||
|
||||
- // If English not available, select first language
|
||||
- if (!foundDefault) {
|
||||
- m_languageCheckboxes.first()->setChecked(true);
|
||||
- }
|
||||
+ QCheckBox *defaultCheckbox = findDefaultCheckbox();
|
||||
|
||||
- m_blockSignals = false;
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ QSignalBlocker checkboxBlocker(checkbox);
|
||||
+ checkbox->setChecked(checkbox == defaultCheckbox);
|
||||
+ }
|
||||
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- Settings::setOcrLanguages(selected);
|
||||
+ const int selectedCount = defaultCheckbox ? 1 : 0;
|
||||
+ updateCheckboxEnabledStates(selectedCount);
|
||||
|
||||
- // Emit signal to notify changes
|
||||
- Q_EMIT selectedLanguagesChanged(selected);
|
||||
+ QStringList selected;
|
||||
+ if (defaultCheckbox) {
|
||||
+ selected.append(defaultCheckbox->property("languageCode").toString());
|
||||
}
|
||||
+
|
||||
+ Q_EMIT selectedLanguagesChanged(selected);
|
||||
}
|
||||
|
||||
void OcrLanguageSelector::refresh()
|
||||
@@ -142,13 +126,17 @@ void OcrLanguageSelector::updateWidgets()
|
||||
|
||||
void OcrLanguageSelector::onLanguageCheckboxChanged()
|
||||
{
|
||||
- if (m_blockSignals) {
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
enforceSelectionLimits();
|
||||
|
||||
- const QStringList selected = selectedLanguages();
|
||||
+ QStringList selected;
|
||||
+ selected.reserve(OcrManager::MAX_OCR_LANGUAGES);
|
||||
+
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ if (checkbox->isChecked()) {
|
||||
+ selected.append(checkbox->property("languageCode").toString());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
Q_EMIT selectedLanguagesChanged(selected);
|
||||
}
|
||||
|
||||
@@ -167,21 +155,20 @@ void OcrLanguageSelector::setupLanguageCheckboxes()
|
||||
}
|
||||
|
||||
m_languageCheckboxes.clear();
|
||||
- m_availableLanguages.clear();
|
||||
|
||||
if (!m_ocrManager || !m_ocrManager->isAvailable()) {
|
||||
qCWarning(SPECTACLE_LOG) << "OCR is not available; language selector will remain empty.";
|
||||
return;
|
||||
}
|
||||
|
||||
- m_availableLanguages = m_ocrManager->availableLanguagesWithNames();
|
||||
+ const QMap<QString, QString> availableLanguages = m_ocrManager->availableLanguagesWithNames();
|
||||
|
||||
- if (m_availableLanguages.isEmpty()) {
|
||||
+ if (availableLanguages.isEmpty()) {
|
||||
qCWarning(SPECTACLE_LOG) << "No OCR language data available.";
|
||||
return;
|
||||
}
|
||||
|
||||
- for (auto it = m_availableLanguages.cbegin(); it != m_availableLanguages.cend(); ++it) {
|
||||
+ for (auto it = availableLanguages.cbegin(); it != availableLanguages.cend(); ++it) {
|
||||
const QString &langCode = it.key();
|
||||
if (langCode == u"osd"_s) {
|
||||
continue;
|
||||
@@ -208,64 +195,57 @@ void OcrLanguageSelector::setupLanguageCheckboxes()
|
||||
|
||||
void OcrLanguageSelector::enforceSelectionLimits()
|
||||
{
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- const int count = selected.size();
|
||||
+ int selectedCount = 0;
|
||||
+
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ if (checkbox->isChecked()) {
|
||||
+ ++selectedCount;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- if (count > OcrManager::MAX_OCR_LANGUAGES) { // Max languages for performance
|
||||
+ if (selectedCount > OcrManager::MAX_OCR_LANGUAGES) {
|
||||
for (int i = m_languageCheckboxes.size() - 1; i >= 0; --i) {
|
||||
QCheckBox *checkbox = m_languageCheckboxes[i];
|
||||
if (checkbox->isChecked()) {
|
||||
- blockSignalsAndSetChecked(checkbox, false);
|
||||
+ QSignalBlocker blocker(checkbox);
|
||||
+ checkbox->setChecked(false);
|
||||
+ --selectedCount;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- updateCheckboxEnabledStates();
|
||||
+ updateCheckboxEnabledStates(selectedCount);
|
||||
|
||||
- if (selectedLanguages().size() == 0 && !m_languageCheckboxes.isEmpty()) {
|
||||
+ if (selectedCount == 0 && !m_languageCheckboxes.isEmpty()) {
|
||||
applyDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
-QString OcrLanguageSelector::getDefaultLanguageCode() const
|
||||
+QCheckBox *OcrLanguageSelector::findDefaultCheckbox() const
|
||||
{
|
||||
if (m_languageCheckboxes.isEmpty()) {
|
||||
- return QString();
|
||||
+ return nullptr;
|
||||
}
|
||||
|
||||
// Try English first
|
||||
- for (const QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- return u"eng"_s;
|
||||
+ return checkbox;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to first available
|
||||
- return m_languageCheckboxes.first()->property("languageCode").toString();
|
||||
+ return m_languageCheckboxes.first();
|
||||
}
|
||||
|
||||
-void OcrLanguageSelector::updateCheckboxEnabledStates()
|
||||
+void OcrLanguageSelector::updateCheckboxEnabledStates(int selectedCount)
|
||||
{
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- const int count = selected.size();
|
||||
+ const bool enableUnchecked = selectedCount < OcrManager::MAX_OCR_LANGUAGES;
|
||||
|
||||
- // If we have max languages selected, disable all unchecked checkboxes
|
||||
- // If we have less than max, enable all checkboxes
|
||||
for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->isChecked()) {
|
||||
- checkbox->setEnabled(true);
|
||||
- } else {
|
||||
- checkbox->setEnabled(count < OcrManager::MAX_OCR_LANGUAGES);
|
||||
- }
|
||||
+ checkbox->setEnabled(checkbox->isChecked() || enableUnchecked);
|
||||
}
|
||||
}
|
||||
|
||||
-void OcrLanguageSelector::blockSignalsAndSetChecked(QCheckBox *checkbox, bool checked)
|
||||
-{
|
||||
- m_blockSignals = true;
|
||||
- checkbox->setChecked(checked);
|
||||
- m_blockSignals = false;
|
||||
-}
|
||||
-
|
||||
#include "moc_OcrLanguageSelector.cpp"
|
||||
\ No newline at end of file
|
||||
diff --git a/src/Gui/SettingsDialog/OcrLanguageSelector.h b/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
index 59b1a3d42..e938e06fa 100644
|
||||
--- a/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
+++ b/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
@@ -96,14 +96,11 @@ private Q_SLOTS:
|
||||
private:
|
||||
void setupLanguageCheckboxes();
|
||||
void enforceSelectionLimits();
|
||||
- void updateCheckboxEnabledStates();
|
||||
- QString getDefaultLanguageCode() const;
|
||||
- void blockSignalsAndSetChecked(QCheckBox *checkbox, bool checked);
|
||||
+ void updateCheckboxEnabledStates(int selectedCount);
|
||||
+ QCheckBox *findDefaultCheckbox() const;
|
||||
|
||||
QVBoxLayout *m_layout;
|
||||
QList<QCheckBox *> m_languageCheckboxes;
|
||||
- QMap<QString, QString> m_availableLanguages; // code -> display name
|
||||
- bool m_blockSignals;
|
||||
|
||||
OcrManager *m_ocrManager;
|
||||
};
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.cpp b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
index 532bfd3c3..696636685 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "GeneralOptionsPage.h"
|
||||
#include "ImageSaveOptionsPage.h"
|
||||
#include "OcrLanguageSelector.h"
|
||||
+#include "OcrManager.h"
|
||||
#include "ShortcutsOptionsPage.h"
|
||||
#include "VideoSaveOptionsPage.h"
|
||||
#include "settings.h"
|
||||
@@ -46,6 +47,16 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
||||
connect(this, &KConfigDialog::currentPageChanged, this, &SettingsDialog::updateButtons);
|
||||
}
|
||||
|
||||
+SettingsDialog::~SettingsDialog()
|
||||
+{
|
||||
+ // Ensure OCR config sync is resumed
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ if (ocrManager->isConfigSyncSuspended()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
QSize SettingsDialog::sizeHint() const
|
||||
{
|
||||
// Avoid having pages that need to be scrolled,
|
||||
@@ -91,6 +102,10 @@ void SettingsDialog::updateSettings()
|
||||
m_shortcutsPage->saveChanges();
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
}
|
||||
|
||||
void SettingsDialog::updateWidgets()
|
||||
@@ -100,15 +115,23 @@ void SettingsDialog::updateWidgets()
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
m_generalPage->refreshOcrLanguageSettings();
|
||||
+
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
}
|
||||
|
||||
void SettingsDialog::updateWidgetsDefault()
|
||||
{
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(true);
|
||||
+ }
|
||||
+
|
||||
KConfigDialog::updateWidgetsDefault();
|
||||
m_shortcutsPage->defaults();
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
- m_generalPage->refreshOcrLanguageSettings();
|
||||
+ m_generalPage->refreshOcrLanguageSettings(false);
|
||||
}
|
||||
|
||||
#include "moc_SettingsDialog.cpp"
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.h b/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
index 50f6d85bf..64281dd09 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
@@ -20,6 +20,7 @@ class SettingsDialog : public KConfigDialog
|
||||
|
||||
public:
|
||||
explicit SettingsDialog(QWidget *parent = nullptr);
|
||||
+ ~SettingsDialog() override;
|
||||
|
||||
protected:
|
||||
QSize sizeHint() const override;
|
||||
diff --git a/src/OcrManager.cpp b/src/OcrManager.cpp
|
||||
index 1d09db8ef..56d467993 100644
|
||||
--- a/src/OcrManager.cpp
|
||||
+++ b/src/OcrManager.cpp
|
||||
@@ -56,6 +56,9 @@ OcrManager::OcrManager(QObject *parent)
|
||||
m_workerThread->start();
|
||||
|
||||
connect(Settings::self(), &Settings::ocrLanguagesChanged, this, [this]() {
|
||||
+ if (m_configSyncSuspended) {
|
||||
+ return;
|
||||
+ }
|
||||
const QStringList newLanguages = Settings::ocrLanguages();
|
||||
const QString combinedLanguages = newLanguages.join(u"+"_s);
|
||||
if (combinedLanguages != m_currentLanguageCode) {
|
||||
@@ -150,6 +153,28 @@ QString OcrManager::currentLanguageCode() const
|
||||
return m_currentLanguageCode;
|
||||
}
|
||||
|
||||
+void OcrManager::setConfigSyncSuspended(bool suspended)
|
||||
+{
|
||||
+ if (m_configSyncSuspended == suspended) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ m_configSyncSuspended = suspended;
|
||||
+
|
||||
+ // On resume, apply any changes made to Settings
|
||||
+ if (!m_configSyncSuspended) {
|
||||
+ const QStringList settingsLanguages = Settings::ocrLanguages();
|
||||
+ if (settingsLanguages != m_configuredLanguages) {
|
||||
+ setLanguagesByCode(settingsLanguages);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+bool OcrManager::isConfigSyncSuspended() const
|
||||
+{
|
||||
+ return m_configSyncSuspended;
|
||||
+}
|
||||
+
|
||||
void OcrManager::recognizeText(const QImage &image)
|
||||
{
|
||||
#ifdef HAVE_TESSERACT_OCR
|
||||
diff --git a/src/OcrManager.h b/src/OcrManager.h
|
||||
index c71505b3e..37f490600 100644
|
||||
--- a/src/OcrManager.h
|
||||
+++ b/src/OcrManager.h
|
||||
@@ -98,6 +98,8 @@ public:
|
||||
* @return Current language code (e.g., "eng", "spa")
|
||||
*/
|
||||
QString currentLanguageCode() const;
|
||||
+ void setConfigSyncSuspended(bool suspended);
|
||||
+ bool isConfigSyncSuspended() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
/**
|
||||
@@ -169,6 +171,7 @@ private:
|
||||
bool m_shouldRestoreToConfigured;
|
||||
QStringList m_availableLanguages;
|
||||
QMap<QString, QString> m_languageNames;
|
||||
+ bool m_configSyncSuspended = false;
|
||||
bool m_initialized;
|
||||
|
||||
private:
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 642600410714c783515f2416a9be08ef3406b0d9 Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 21:30:41 -0500
|
||||
Subject: [PATCH 2/4] Fix flickering in settings dialog during OCR
|
||||
initialization
|
||||
|
||||
---
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.cpp | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
index ae0a997c3..adfc045e6 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
@@ -38,7 +38,7 @@ GeneralOptionsPage::GeneralOptionsPage(QWidget *parent)
|
||||
|
||||
connect(m_ocrLanguageSelector, &OcrLanguageSelector::selectedLanguagesChanged, this, &GeneralOptionsPage::ocrLanguageChanged);
|
||||
|
||||
- refreshOcrLanguageSettings();
|
||||
+ refreshOcrLanguageSettings(false);
|
||||
|
||||
//On Wayland we can't programmatically raise and focus the window so we have to hide the option
|
||||
if (KWindowSystem::isPlatformWayland() || qstrcmp(qgetenv("XDG_SESSION_TYPE").constData(), "wayland") == 0) {
|
||||
@@ -51,8 +51,9 @@ GeneralOptionsPage::~GeneralOptionsPage() = default;
|
||||
void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
{
|
||||
OcrManager *ocrManager = OcrManager::instance();
|
||||
-
|
||||
- if (!ocrManager->isAvailable()) {
|
||||
+ const bool ocrAvailable = ocrManager->isAvailable();
|
||||
+
|
||||
+ if (!ocrAvailable) {
|
||||
m_ui->ocrLanguageLabel->setVisible(false);
|
||||
m_ui->ocrLanguageScrollArea->setVisible(false);
|
||||
m_ui->ocrUnavailableWidget->setVisible(true);
|
||||
@@ -60,10 +61,10 @@ void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
m_ui->ocrLanguageLabel->setVisible(true);
|
||||
m_ui->ocrLanguageScrollArea->setVisible(true);
|
||||
m_ui->ocrUnavailableWidget->setVisible(false);
|
||||
+ }
|
||||
|
||||
- if (rebuildSelector) {
|
||||
- m_ocrLanguageSelector->refresh();
|
||||
- }
|
||||
+ if (ocrAvailable && rebuildSelector) {
|
||||
+ m_ocrLanguageSelector->refresh();
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 6c6d95f3fd87ff70f8c1d25786a5a7f047e9d74f Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 21:51:05 -0500
|
||||
Subject: [PATCH 3/4] Improve OCR language handling in settings dialog
|
||||
|
||||
---
|
||||
src/Gui/SettingsDialog/SettingsDialog.cpp | 24 ++++++++++++++++++-----
|
||||
1 file changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.cpp b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
index 696636685..0bfab8bb9 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
@@ -88,12 +88,20 @@ void SettingsDialog::showEvent(QShowEvent *event)
|
||||
|
||||
bool SettingsDialog::hasChanged()
|
||||
{
|
||||
- return m_shortcutsPage->isModified() || m_generalPage->ocrLanguageSelector()->hasChanges() || KConfigDialog::hasChanged();
|
||||
+ bool ocrHasChanges = false;
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ ocrHasChanges = m_generalPage->ocrLanguageSelector()->hasChanges();
|
||||
+ }
|
||||
+ return m_shortcutsPage->isModified() || ocrHasChanges || KConfigDialog::hasChanged();
|
||||
}
|
||||
|
||||
bool SettingsDialog::isDefault()
|
||||
{
|
||||
- return currentPage()->name() != i18n("Shortcuts") && m_generalPage->ocrLanguageSelector()->isDefault() && KConfigDialog::isDefault();
|
||||
+ bool ocrIsDefault = true;
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ ocrIsDefault = m_generalPage->ocrLanguageSelector()->isDefault();
|
||||
+ }
|
||||
+ return currentPage()->name() != i18n("Shortcuts") && ocrIsDefault && KConfigDialog::isDefault();
|
||||
}
|
||||
|
||||
void SettingsDialog::updateSettings()
|
||||
@@ -101,7 +109,9 @@ void SettingsDialog::updateSettings()
|
||||
KConfigDialog::updateSettings();
|
||||
m_shortcutsPage->saveChanges();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+ }
|
||||
|
||||
if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
ocrManager->setConfigSyncSuspended(false);
|
||||
@@ -113,7 +123,9 @@ void SettingsDialog::updateWidgets()
|
||||
KConfigDialog::updateWidgets();
|
||||
m_shortcutsPage->resetChanges();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
+ }
|
||||
m_generalPage->refreshOcrLanguageSettings();
|
||||
|
||||
if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
@@ -130,7 +142,9 @@ void SettingsDialog::updateWidgetsDefault()
|
||||
KConfigDialog::updateWidgetsDefault();
|
||||
m_shortcutsPage->defaults();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
+ }
|
||||
m_generalPage->refreshOcrLanguageSettings(false);
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 174b4a4a10e2c42fa28eb361cd4b6a833af60dc7 Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Mon, 10 Nov 2025 22:10:51 -0500
|
||||
Subject: [PATCH 4/4] Remove Tesseract language pack validation test and
|
||||
simplify OCR support check
|
||||
|
||||
---
|
||||
CMakeLists.txt | 24 ++----------------------
|
||||
cmake/tesseract_test.cpp | 40 ----------------------------------------
|
||||
2 files changed, 2 insertions(+), 62 deletions(-)
|
||||
delete mode 100644 cmake/tesseract_test.cpp
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index ea44e71d4..2adf8a9ac 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -96,28 +96,8 @@ if(PkgConfig_FOUND)
|
||||
pkg_check_modules(TESSERACT tesseract)
|
||||
|
||||
if(TESSERACT_FOUND)
|
||||
- # Test if Tesseract has usable language packs
|
||||
- try_run(
|
||||
- TESSERACT_TEST_RUN_RESULT
|
||||
- TESSERACT_TEST_COMPILE_RESULT
|
||||
- ${CMAKE_CURRENT_BINARY_DIR}
|
||||
- ${CMAKE_CURRENT_SOURCE_DIR}/cmake/tesseract_test.cpp
|
||||
- LINK_LIBRARIES ${TESSERACT_LIBRARIES}
|
||||
- CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${TESSERACT_INCLUDE_DIRS}"
|
||||
- COMPILE_OUTPUT_VARIABLE TESSERACT_COMPILE_OUTPUT
|
||||
- RUN_OUTPUT_VARIABLE TESSERACT_RUN_OUTPUT
|
||||
- )
|
||||
-
|
||||
- if(TESSERACT_TEST_COMPILE_RESULT AND TESSERACT_TEST_RUN_RESULT EQUAL 0)
|
||||
- message(STATUS "Tesseract OCR support enabled")
|
||||
- message(STATUS "${TESSERACT_RUN_OUTPUT}")
|
||||
- set(HAVE_TESSERACT_OCR TRUE)
|
||||
- else()
|
||||
- message(WARNING "Tesseract library found but no usable language packs detected")
|
||||
- message(WARNING "${TESSERACT_RUN_OUTPUT}")
|
||||
- message(WARNING "OCR functionality will be disabled. Install language data packages (e.g., tesseract-ocr-eng)")
|
||||
- set(HAVE_TESSERACT_OCR FALSE)
|
||||
- endif()
|
||||
+ message(STATUS "Tesseract OCR support enabled")
|
||||
+ set(HAVE_TESSERACT_OCR TRUE)
|
||||
else()
|
||||
message(STATUS "Tesseract not found - OCR functionality disabled")
|
||||
set(HAVE_TESSERACT_OCR FALSE)
|
||||
diff --git a/cmake/tesseract_test.cpp b/cmake/tesseract_test.cpp
|
||||
deleted file mode 100644
|
||||
index 4ebae9779..000000000
|
||||
--- a/cmake/tesseract_test.cpp
|
||||
+++ /dev/null
|
||||
@@ -1,40 +0,0 @@
|
||||
-#include <iostream>
|
||||
-#include <string>
|
||||
-#include <tesseract/baseapi.h>
|
||||
-#include <vector>
|
||||
-
|
||||
-int main()
|
||||
-{
|
||||
- tesseract::TessBaseAPI api;
|
||||
-
|
||||
- if (api.Init(nullptr, nullptr) != 0) {
|
||||
- std::cerr << "Failed to initialize Tesseract" << std::endl;
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- std::vector<std::string> languages;
|
||||
- api.GetAvailableLanguagesAsVector(&languages);
|
||||
-
|
||||
- // Filter out 'osd' as it's not a usable language for OCR
|
||||
- std::vector<std::string> usableLanguages;
|
||||
- for (const auto &lang : languages) {
|
||||
- if (lang != "osd") {
|
||||
- usableLanguages.push_back(lang);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (usableLanguages.empty()) {
|
||||
- std::cerr << "No usable Tesseract language packs found. Install language data files (e.g., tesseract-ocr-eng)" << std::endl;
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- std::cout << "Found " << usableLanguages.size() << " Tesseract language pack(s): ";
|
||||
- for (size_t i = 0; i < usableLanguages.size(); ++i) {
|
||||
- std::cout << usableLanguages[i];
|
||||
- if (i < usableLanguages.size() - 1)
|
||||
- std::cout << ", ";
|
||||
- }
|
||||
- std::cout << std::endl;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
--
|
||||
GitLab
|
||||
|
||||
129
roles/kde/patches/spectacle/pr493.patch
Normal file
129
roles/kde/patches/spectacle/pr493.patch
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
From 49c615c1989d9fcfce7ed1be805538a9dca6a8a8 Mon Sep 17 00:00:00 2001
|
||||
From: Taras Oleksyn <taras.oleksyn@gmail.com>
|
||||
Date: Sat, 29 Nov 2025 10:17:28 +0200
|
||||
Subject: [PATCH] Add cancel button to capture window to improve touchscreen
|
||||
usability
|
||||
|
||||
BUG: 490980
|
||||
---
|
||||
src/CMakeLists.txt | 1 +
|
||||
src/Gui/CancelAction.qml | 11 +++++++++++
|
||||
src/Gui/CaptureOverlay.qml | 14 ++++++++++++++
|
||||
src/Gui/CaptureWindow.cpp | 5 +++++
|
||||
src/Gui/CaptureWindow.h | 1 +
|
||||
src/PlasmaVersion.h | 2 +-
|
||||
6 files changed, 33 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/Gui/CancelAction.qml
|
||||
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 23fc4f483..f4957bda7 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -158,6 +158,7 @@ qt_target_qml_sources(spectacle
|
||||
Gui/AnnotationOptionsToolBarContents.qml
|
||||
Gui/AnnotationsToolBarContents.qml
|
||||
Gui/ButtonGrid.qml
|
||||
+ Gui/CancelAction.qml
|
||||
Gui/CaptureModeButtonsColumn.qml
|
||||
Gui/CaptureOptions.qml
|
||||
Gui/CaptureOverlay.qml
|
||||
diff --git a/src/Gui/CancelAction.qml b/src/Gui/CancelAction.qml
|
||||
new file mode 100644
|
||||
index 000000000..74bf54816
|
||||
--- /dev/null
|
||||
+++ b/src/Gui/CancelAction.qml
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* SPDX-FileCopyrightText: 2025 Noah Davis <noahadvs@gmail.com>
|
||||
+ * SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+import QtQuick.Templates as T
|
||||
+
|
||||
+T.Action {
|
||||
+ icon.name: "dialog-cancel"
|
||||
+ text: i18nc("@action cancel selection", "Cancel")
|
||||
+ onTriggered: contextWindow.cancel()
|
||||
+}
|
||||
diff --git a/src/Gui/CaptureOverlay.qml b/src/Gui/CaptureOverlay.qml
|
||||
index e5089934d..5c15d9939 100644
|
||||
--- a/src/Gui/CaptureOverlay.qml
|
||||
+++ b/src/Gui/CaptureOverlay.qml
|
||||
@@ -491,6 +491,11 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: AcceptAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ display: TtToolButton.TextBesideIcon
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
ToolButton {
|
||||
display: TtToolButton.IconOnly
|
||||
visible: action.enabled
|
||||
@@ -527,6 +532,10 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: AcceptAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
ToolButton {
|
||||
visible: action.enabled
|
||||
action: SaveAction {}
|
||||
@@ -560,6 +569,11 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: RecordAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ display: TtToolButton.TextBesideIcon
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/Gui/CaptureWindow.cpp b/src/Gui/CaptureWindow.cpp
|
||||
index cb8ce97ab..c263d1b45 100644
|
||||
--- a/src/Gui/CaptureWindow.cpp
|
||||
+++ b/src/Gui/CaptureWindow.cpp
|
||||
@@ -129,6 +129,11 @@ bool CaptureWindow::accept()
|
||||
return SelectionEditor::instance()->acceptSelection();
|
||||
}
|
||||
|
||||
+void CaptureWindow::cancel()
|
||||
+{
|
||||
+ SpectacleCore::instance()->cancelScreenshot();
|
||||
+}
|
||||
+
|
||||
void CaptureWindow::save()
|
||||
{
|
||||
SelectionEditor::instance()->acceptSelection(ExportManager::Save | ExportManager::UserAction);
|
||||
diff --git a/src/Gui/CaptureWindow.h b/src/Gui/CaptureWindow.h
|
||||
index b5e87a834..0d50aac90 100644
|
||||
--- a/src/Gui/CaptureWindow.h
|
||||
+++ b/src/Gui/CaptureWindow.h
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
|
||||
public Q_SLOTS:
|
||||
bool accept();
|
||||
+ void cancel();
|
||||
void save() override;
|
||||
void saveAs() override;
|
||||
void copyImage() override;
|
||||
diff --git a/src/PlasmaVersion.h b/src/PlasmaVersion.h
|
||||
index 08502c895..9518da62b 100644
|
||||
--- a/src/PlasmaVersion.h
|
||||
+++ b/src/PlasmaVersion.h
|
||||
@@ -15,7 +15,7 @@ public:
|
||||
static quint32 get();
|
||||
|
||||
/**
|
||||
- * Use this for plasama versions the same way you'd use QT_VERSION_CHECK()
|
||||
+ * Use this for plasma versions the same way you'd use QT_VERSION_CHECK()
|
||||
*/
|
||||
static quint32 check(quint8 major, quint8 minor, quint8 patch);
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -49,10 +49,13 @@ in {
|
|||
plasma-vault
|
||||
];
|
||||
|
||||
# Allows controlling brightness on external monitors
|
||||
hardware.i2c.enable = true;
|
||||
|
||||
# Plasma configs should be on all users
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
imports = [flakeSelf.inputs.plasma-manager.homeManagerModules.plasma-manager];
|
||||
imports = [flakeSelf.inputs.plasma-manager.homeModules.plasma-manager];
|
||||
home.packages = [
|
||||
(
|
||||
pkgs.catppuccin-kde.override {
|
||||
|
|
@ -72,21 +75,35 @@ in {
|
|||
theme = "default";
|
||||
colorScheme = "CatppuccinMochaMauve";
|
||||
};
|
||||
kwin = {
|
||||
titlebarButtons = {
|
||||
left = ["on-all-desktops" "keep-above-windows"];
|
||||
right = ["minimize" "maximize" "close"];
|
||||
};
|
||||
virtualDesktops = {
|
||||
rows = 1;
|
||||
number = 2;
|
||||
};
|
||||
};
|
||||
input = {
|
||||
keyboard = {
|
||||
layouts = [{layout = "es";}];
|
||||
numlockOnStartup = "off";
|
||||
};
|
||||
mice = let
|
||||
settings = {
|
||||
enable = true;
|
||||
accelerationProfile = "none";
|
||||
};
|
||||
mice = [
|
||||
{
|
||||
productId = "d030";
|
||||
vendorId = "3434";
|
||||
name = "Keychron Keychron Link ";
|
||||
}
|
||||
{
|
||||
productId = "d03f";
|
||||
vendorId = "3434";
|
||||
name = "Keychron Keychron M6 ";
|
||||
}
|
||||
{
|
||||
productId = "d03f";
|
||||
vendorId = "3434";
|
||||
name = "Keychron M6 Mouse";
|
||||
}
|
||||
];
|
||||
in
|
||||
lib.lists.forEach mice (miceInfo: miceInfo // settings);
|
||||
};
|
||||
panels = [
|
||||
{
|
||||
|
|
@ -97,6 +114,7 @@ in {
|
|||
{
|
||||
kickoff = {
|
||||
icon = "nix-snowflake-white";
|
||||
settings.General.switchCategoryOnHover = true;
|
||||
};
|
||||
}
|
||||
"org.kde.plasma.pager"
|
||||
|
|
@ -112,17 +130,7 @@ in {
|
|||
];
|
||||
}
|
||||
];
|
||||
shortcuts = {
|
||||
"kwin" = {
|
||||
"Switch One Desktop to the Left" = ["Meta+Ctrl+Left"];
|
||||
"Switch One Desktop to the Right" = ["Meta+Ctrl+Right"];
|
||||
};
|
||||
};
|
||||
configFile = {
|
||||
"kwinrc" = {
|
||||
"org.kde.kdecoration2"."BorderSize".value = "None";
|
||||
"TabBox"."LayoutName".value = "thumbnail_grid";
|
||||
};
|
||||
"kdeglobals"."General"."AccentColor".value = null;
|
||||
"auroraerc"."CatppuccinMocha-Classic"."ButtonSize".value = 0;
|
||||
"plasmanotifyrc"."Notifications"."NormalAlwaysOnTop".value = true;
|
||||
|
|
|
|||
16
roles/kde/programs/baloo.nix
Normal file
16
roles/kde/programs/baloo.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{lib, ...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.plasma.configFile = {
|
||||
"baloofilerc"."General" = {
|
||||
"exclude folders".shellExpand = true;
|
||||
"exclude folders".value = with lib.strings;
|
||||
concatStrings (
|
||||
intersperse "," [
|
||||
"$HOME/Documents/Repos"
|
||||
"$HOME/Documents/Android"
|
||||
]
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{...}: {
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./kate.nix
|
||||
./firefox.nix
|
||||
|
|
@ -6,9 +6,12 @@
|
|||
# Neochat depends on olm which is unsafe now
|
||||
# ./neochat.nix
|
||||
./konsole.nix
|
||||
./git.nix
|
||||
./kwin.nix
|
||||
./baloo.nix
|
||||
./spectacle.nix
|
||||
];
|
||||
|
||||
# Enable the kde partition manager
|
||||
programs.partition-manager.enable = true;
|
||||
programs.steam.extraPackages = [pkgs.kdePackages.breeze];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,30 +1,35 @@
|
|||
{...}: {
|
||||
# KDE specific firefox settings
|
||||
programs.firefox = {
|
||||
policies = {
|
||||
"ExtensionSettings" = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"plasma-browser-integration@kde.org" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/plasma-integration/latest.xpi";
|
||||
{pkgs, ...}: {
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
# KDE specific firefox settings
|
||||
programs.firefox = {
|
||||
nativeMessagingHosts = [pkgs.kdePackages.plasma-browser-integration];
|
||||
policies = {
|
||||
ExtensionSettings = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"plasma-browser-integration@kde.org" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/plasma-integration/latest.xpi";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
# Make firefox use the kde file picker
|
||||
"widget.use-xdg-desktop-portal.file-picker" = {
|
||||
Value = 1;
|
||||
Status = "default";
|
||||
};
|
||||
/*
|
||||
https://wiki.archlinux.org/title/Firefox#KDE_integration tells me to enable this,
|
||||
but strangely enough doing so makes firefox ask to be set as the default browser
|
||||
every time you start it up, so I'll disable it
|
||||
*/
|
||||
"widget.use-xdg-desktop-portal.mime-handler" = {
|
||||
Value = 0;
|
||||
Status = "default";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
"Preferences" = {
|
||||
# Make firefox use the kde file picker
|
||||
"widget.use-xdg-desktop-portal.file-picker" = {
|
||||
"Value" = 1;
|
||||
"Status" = "default";
|
||||
};
|
||||
/*
|
||||
https://wiki.archlinux.org/title/Firefox#KDE_integration tells me to enable this,
|
||||
but strangely enough doing so makes firefox ask to be set as the default browser
|
||||
every time you start it up, so I'll disable it
|
||||
*/
|
||||
"widget.use-xdg-desktop-portal.mime-handler" = {
|
||||
"Value" = 0;
|
||||
"Status" = "default";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
{...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
extraConfig = {
|
||||
cola = {
|
||||
terminal = "konsole";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{pkgs, ...}: {
|
||||
environment.systemPackages = [pkgs.kate];
|
||||
environment.systemPackages = [pkgs.kdePackages.kate];
|
||||
|
||||
# Use kwrite to open text files, and kate if I'm developing stuff
|
||||
xdg.mime.defaultApplications = {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,5 @@
|
|||
{pkgs, ...}: let
|
||||
catppuccinKonsole =
|
||||
pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "konsole";
|
||||
# Latest commit is 7d86b8a1e56e58f6b5649cdaac543a573ac194ca
|
||||
rev = "main";
|
||||
hash = "sha256-EwSJMTxnaj2UlNJm1t6znnatfzgm1awIQQUF3VPfCTM=";
|
||||
}
|
||||
+ /Catppuccin-Mocha.colorscheme;
|
||||
{flakeSelf, ...}: let
|
||||
catppuccinKonsole = "${flakeSelf.inputs.catppuccin-konsole}/themes/catppuccin-mocha.colorscheme";
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
xdg.dataFile = {
|
||||
|
|
|
|||
33
roles/kde/programs/kwin.nix
Normal file
33
roles/kde/programs/kwin.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{pkgs, ...}: {
|
||||
environment.plasma6.excludePackages = [pkgs.kdePackages.kwin-x11];
|
||||
environment.variables = {
|
||||
KWIN_WAYLAND_SUPPORT_XX_PIP_V1 = 1;
|
||||
KWIN_USE_OVERLAYS = 1;
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.plasma = {
|
||||
kwin = {
|
||||
titlebarButtons = {
|
||||
left = ["on-all-desktops" "keep-above-windows"];
|
||||
right = ["minimize" "maximize" "close"];
|
||||
};
|
||||
virtualDesktops = {
|
||||
rows = 1;
|
||||
number = 2;
|
||||
};
|
||||
};
|
||||
configFile = {
|
||||
"kwinrc" = {
|
||||
"org.kde.kdecoration2"."BorderSize".value = "None";
|
||||
"TabBox"."LayoutName".value = "thumbnail_grid";
|
||||
};
|
||||
};
|
||||
shortcuts = {
|
||||
"kwin" = {
|
||||
"Switch One Desktop to the Left" = ["Meta+Ctrl+Left"];
|
||||
"Switch One Desktop to the Right" = ["Meta+Ctrl+Right"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
}: {
|
||||
# Only install skanpage if scanning is set up
|
||||
config = lib.mkIf config.hardware.sane.enable {
|
||||
environment.systemPackages = [pkgs.skanpage];
|
||||
environment.systemPackages = [pkgs.kdePackages.skanpage];
|
||||
};
|
||||
# environment.systemPackages = if config.hardware.sane.enable == true then [ pkgs.skanpage ] else [];
|
||||
}
|
||||
|
|
|
|||
24
roles/kde/programs/spectacle.nix
Normal file
24
roles/kde/programs/spectacle.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{...}: {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
kdePackages = prev.kdePackages.overrideScope (
|
||||
kFinal: kPrev: {
|
||||
# Needed for OCR
|
||||
spectacle = kPrev.spectacle.overrideAttrs (old: {
|
||||
nativeBuildInputs = old.nativeBuildInputs ++ [final.pkg-config];
|
||||
buildInputs = with final;
|
||||
old.buildInputs
|
||||
++ [
|
||||
tesseract
|
||||
leptonica
|
||||
libarchive
|
||||
curl
|
||||
];
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./programs
|
||||
./services
|
||||
];
|
||||
home-manager.users.toast.home.packages = with pkgs; [
|
||||
jetbrains.idea-ultimate
|
||||
jetbrains.webstorm
|
||||
nodejs
|
||||
insomnia
|
||||
];
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
programs.adb.enable = true;
|
||||
users.users.toast.extraGroups = ["adbusers"];
|
||||
home-manager.users.toast.home.packages = with pkgs; [
|
||||
android-studio
|
||||
];
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./android-studio.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./networkmanager.nix
|
||||
./syncthing.nix
|
||||
./mysql.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
services.mysql = {
|
||||
enable = true;
|
||||
package = pkgs.mysql84;
|
||||
user = "toast";
|
||||
group = "users";
|
||||
};
|
||||
|
||||
# Don't autostart MySQL
|
||||
systemd.services.mysql.wantedBy = lib.mkForce [];
|
||||
|
||||
security.polkit.extraConfig = ''
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (
|
||||
action.id == "org.freedesktop.systemd1.manage-units" &&
|
||||
action.lookup("unit") == "mysql.service" &&
|
||||
subject.user == "${config.services.mysql.user}"
|
||||
)
|
||||
{
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
})
|
||||
'';
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
# mycli
|
||||
];
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
{...}: {
|
||||
networking.networkmanager.ensureProfiles = {
|
||||
profiles."school-wifi" = {
|
||||
connection = {
|
||||
id = "Progresa";
|
||||
type = "wifi";
|
||||
};
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
ssid = ".Progresa Invitados";
|
||||
};
|
||||
wifi-security = {
|
||||
auth-alg = "open";
|
||||
key-mgmt = "wpa-psk";
|
||||
psk = "$SCHOOL";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
{...}: {
|
||||
services.syncthing.settings.folders. "school-things" = {
|
||||
label = "School things";
|
||||
id = "btsth-vdu9c";
|
||||
devices = ["server" "pc" "winmax2" "imac"];
|
||||
path = "~/Documents/School things";
|
||||
};
|
||||
}
|
||||
45
roles/server/adguard.nix
Normal file
45
roles/server/adguard.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
domain = "adguard.everest.tailscale";
|
||||
port = 3001;
|
||||
in {
|
||||
services = {
|
||||
adguardhome = {
|
||||
enable = true;
|
||||
host = "127.0.0.1";
|
||||
port = port;
|
||||
settings = {
|
||||
dns = {
|
||||
bind_hosts = [
|
||||
((lib.lists.last config.networking.interfaces.eno1.ipv4.addresses).address)
|
||||
"100.100.0.1"
|
||||
];
|
||||
bootstrap_dns = ["9.9.9.9"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
headscale.settings.dns = {
|
||||
nameservers.global = lib.mkForce ["100.100.0.1"];
|
||||
extra_records = [
|
||||
{
|
||||
name = domain;
|
||||
type = "A";
|
||||
value = "100.100.0.1";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
caddy.virtualHosts.adguardhome = {
|
||||
hostName = domain;
|
||||
extraConfig = ''
|
||||
import tailscale
|
||||
reverse_proxy 127.0.0.1:${builtins.toString port}
|
||||
'';
|
||||
};
|
||||
};
|
||||
programs.rust-motd.settings.service_status."AdGuard Home" = "adguardhome";
|
||||
}
|
||||
59
roles/server/beets.nix
Normal file
59
roles/server/beets.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{...}: let
|
||||
musicDir = "/srv/music";
|
||||
in {
|
||||
users = {
|
||||
users.music = {
|
||||
isSystemUser = true;
|
||||
group = "music";
|
||||
};
|
||||
# Intended for other programs to get write permission
|
||||
groups.music = {
|
||||
members = ["toast"];
|
||||
};
|
||||
};
|
||||
systemd.tmpfiles.settings = {
|
||||
music."${musicDir}" = {
|
||||
d = {
|
||||
age = "-";
|
||||
user = "music";
|
||||
group = "music";
|
||||
mode = "2775";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.copyparty = {
|
||||
volumes."/Music" = {
|
||||
path = "/srv/music";
|
||||
access.r = "*";
|
||||
};
|
||||
};
|
||||
|
||||
home-manager.users.toast = {config, ...}: {
|
||||
programs.beets = {
|
||||
enable = true;
|
||||
settings = {
|
||||
directory = musicDir;
|
||||
library = "${config.xdg.dataHome}/beets/library.db";
|
||||
|
||||
import = {
|
||||
move = true;
|
||||
};
|
||||
ui.color = true;
|
||||
|
||||
plugins = [
|
||||
"unimported"
|
||||
"fetchart"
|
||||
"chroma"
|
||||
"permissions"
|
||||
"mbsync"
|
||||
"random"
|
||||
];
|
||||
permissions = {
|
||||
file = "644";
|
||||
folder = "755";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue