summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_sources/generated.json24
-rw-r--r--_sources/generated.nix24
-rw-r--r--accounts/gkleen@skadhi/shell/quickshell-plugins/Chrono.cpp2
-rw-r--r--accounts/gkleen@skadhi/shell/quickshell-plugins/Systemd.cpp1
-rw-r--r--accounts/gkleen@skadhi/zsh/default.nix1
-rw-r--r--accounts/gkleen@skadhi/zsh/zshrc20
-rw-r--r--flake.lock124
-rw-r--r--hosts/skadhi/hw.nix5
-rw-r--r--overlays/etesync-dav.nix54
-rw-r--r--overlays/etesync.nix14
-rw-r--r--overlays/keepassxc/database-open-dialog.patch129
-rw-r--r--overlays/keepassxc/default.nix113
-rw-r--r--overlays/quickshell/default.nix2
-rw-r--r--overlays/quickshell/pipewire.patch127
14 files changed, 189 insertions, 451 deletions
diff --git a/_sources/generated.json b/_sources/generated.json
index 2fbb50c5..5b9149fb 100644
--- a/_sources/generated.json
+++ b/_sources/generated.json
@@ -22,7 +22,7 @@
22 }, 22 },
23 "bpf-examples": { 23 "bpf-examples": {
24 "cargoLock": null, 24 "cargoLock": null,
25 "date": "2026-08-10", 25 "date": "2026-10-20",
26 "extract": null, 26 "extract": null,
27 "name": "bpf-examples", 27 "name": "bpf-examples",
28 "passthru": null, 28 "passthru": null,
@@ -34,12 +34,12 @@
34 "name": null, 34 "name": null,
35 "owner": "xdp-project", 35 "owner": "xdp-project",
36 "repo": "bpf-examples", 36 "repo": "bpf-examples",
37 "rev": "1769d51faeb96a1d94d68affcc06f5c71de03de5", 37 "rev": "63a943e088b704c8c21649992931df795f4b9e5a",
38 "sha256": "sha256-FQEyyZ9A4c1mgdTO9CvIAFyscP44A3+aR5Xu6DCqG8E=", 38 "sha256": "sha256-n0B7A+TeRIRB+308jugOyKe35kUVKzDo0YvW2adazto=",
39 "sparseCheckout": [], 39 "sparseCheckout": [],
40 "type": "github" 40 "type": "github"
41 }, 41 },
42 "version": "1769d51faeb96a1d94d68affcc06f5c71de03de5" 42 "version": "63a943e088b704c8c21649992931df795f4b9e5a"
43 }, 43 },
44 "emacs-scratch_el": { 44 "emacs-scratch_el": {
45 "cargoLock": null, 45 "cargoLock": null,
@@ -202,7 +202,7 @@
202 }, 202 },
203 "mpv-reload": { 203 "mpv-reload": {
204 "cargoLock": null, 204 "cargoLock": null,
205 "date": "2025-02-07", 205 "date": "2026-10-04",
206 "extract": null, 206 "extract": null,
207 "name": "mpv-reload", 207 "name": "mpv-reload",
208 "passthru": null, 208 "passthru": null,
@@ -214,12 +214,12 @@
214 "name": null, 214 "name": null,
215 "owner": "4e6", 215 "owner": "4e6",
216 "repo": "mpv-reload", 216 "repo": "mpv-reload",
217 "rev": "60e6fb1c578aa9af80d725857dac8e439095b033", 217 "rev": "fb7a26e21e581fcac4eeee9291de0ff788dc1a47",
218 "sha256": "sha256-elA9bi5ov5MbehLD1kyS4Z8zKgTc+8dcOPq32muRGcE=", 218 "sha256": "sha256-zlGifJyrpuv6TF7/PtSgSXHvGLvEEk+2/DiXxiremPU=",
219 "sparseCheckout": [], 219 "sparseCheckout": [],
220 "type": "github" 220 "type": "github"
221 }, 221 },
222 "version": "60e6fb1c578aa9af80d725857dac8e439095b033" 222 "version": "fb7a26e21e581fcac4eeee9291de0ff788dc1a47"
223 }, 223 },
224 "mpv-subselect": { 224 "mpv-subselect": {
225 "cargoLock": null, 225 "cargoLock": null,
@@ -355,7 +355,7 @@
355 }, 355 },
356 "quickshell": { 356 "quickshell": {
357 "cargoLock": null, 357 "cargoLock": null,
358 "date": "2026-09-20", 358 "date": "2026-10-16",
359 "extract": null, 359 "extract": null,
360 "name": "quickshell", 360 "name": "quickshell",
361 "passthru": null, 361 "passthru": null,
@@ -365,13 +365,13 @@
365 "fetchSubmodules": false, 365 "fetchSubmodules": false,
366 "leaveDotGit": false, 366 "leaveDotGit": false,
367 "name": null, 367 "name": null,
368 "rev": "fae96f1a5b7f53de9b7e40e5b53c0b7a2e97b1d7", 368 "rev": "2b4501a282689792b62e94f3fb30d8f512324fe6",
369 "sha256": "sha256-872tMDDYdjR983q7v2yDlnKOEBSPp5FXDdWF2q87gik=", 369 "sha256": "sha256-tq6x6CRG8Qikrjri59tzu9+b2gri8TjnShkGeh8kUgQ=",
370 "sparseCheckout": [], 370 "sparseCheckout": [],
371 "type": "git", 371 "type": "git",
372 "url": "https://git.outfoxxed.me/quickshell/quickshell.git" 372 "url": "https://git.outfoxxed.me/quickshell/quickshell.git"
373 }, 373 },
374 "version": "fae96f1a5b7f53de9b7e40e5b53c0b7a2e97b1d7" 374 "version": "2b4501a282689792b62e94f3fb30d8f512324fe6"
375 }, 375 },
376 "scutiger": { 376 "scutiger": {
377 "cargoLock": null, 377 "cargoLock": null,
diff --git a/_sources/generated.nix b/_sources/generated.nix
index 00f69bfd..75d24d09 100644
--- a/_sources/generated.nix
+++ b/_sources/generated.nix
@@ -23,15 +23,15 @@
23 }; 23 };
24 bpf-examples = { 24 bpf-examples = {
25 pname = "bpf-examples"; 25 pname = "bpf-examples";
26 version = "1769d51faeb96a1d94d68affcc06f5c71de03de5"; 26 version = "63a943e088b704c8c21649992931df795f4b9e5a";
27 src = fetchFromGitHub { 27 src = fetchFromGitHub {
28 owner = "xdp-project"; 28 owner = "xdp-project";
29 repo = "bpf-examples"; 29 repo = "bpf-examples";
30 rev = "1769d51faeb96a1d94d68affcc06f5c71de03de5"; 30 rev = "63a943e088b704c8c21649992931df795f4b9e5a";
31 fetchSubmodules = true; 31 fetchSubmodules = true;
32 sha256 = "sha256-FQEyyZ9A4c1mgdTO9CvIAFyscP44A3+aR5Xu6DCqG8E="; 32 sha256 = "sha256-n0B7A+TeRIRB+308jugOyKe35kUVKzDo0YvW2adazto=";
33 }; 33 };
34 date = "2026-08-10"; 34 date = "2026-10-20";
35 }; 35 };
36 emacs-scratch_el = { 36 emacs-scratch_el = {
37 pname = "emacs-scratch_el"; 37 pname = "emacs-scratch_el";
@@ -129,15 +129,15 @@
129 }; 129 };
130 mpv-reload = { 130 mpv-reload = {
131 pname = "mpv-reload"; 131 pname = "mpv-reload";
132 version = "60e6fb1c578aa9af80d725857dac8e439095b033"; 132 version = "fb7a26e21e581fcac4eeee9291de0ff788dc1a47";
133 src = fetchFromGitHub { 133 src = fetchFromGitHub {
134 owner = "4e6"; 134 owner = "4e6";
135 repo = "mpv-reload"; 135 repo = "mpv-reload";
136 rev = "60e6fb1c578aa9af80d725857dac8e439095b033"; 136 rev = "fb7a26e21e581fcac4eeee9291de0ff788dc1a47";
137 fetchSubmodules = false; 137 fetchSubmodules = false;
138 sha256 = "sha256-elA9bi5ov5MbehLD1kyS4Z8zKgTc+8dcOPq32muRGcE="; 138 sha256 = "sha256-zlGifJyrpuv6TF7/PtSgSXHvGLvEEk+2/DiXxiremPU=";
139 }; 139 };
140 date = "2025-02-07"; 140 date = "2026-10-04";
141 }; 141 };
142 mpv-subselect = { 142 mpv-subselect = {
143 pname = "mpv-subselect"; 143 pname = "mpv-subselect";
@@ -223,17 +223,17 @@
223 }; 223 };
224 quickshell = { 224 quickshell = {
225 pname = "quickshell"; 225 pname = "quickshell";
226 version = "fae96f1a5b7f53de9b7e40e5b53c0b7a2e97b1d7"; 226 version = "2b4501a282689792b62e94f3fb30d8f512324fe6";
227 src = fetchgit { 227 src = fetchgit {
228 url = "https://git.outfoxxed.me/quickshell/quickshell.git"; 228 url = "https://git.outfoxxed.me/quickshell/quickshell.git";
229 rev = "fae96f1a5b7f53de9b7e40e5b53c0b7a2e97b1d7"; 229 rev = "2b4501a282689792b62e94f3fb30d8f512324fe6";
230 fetchSubmodules = false; 230 fetchSubmodules = false;
231 deepClone = false; 231 deepClone = false;
232 leaveDotGit = false; 232 leaveDotGit = false;
233 sparseCheckout = [ ]; 233 sparseCheckout = [ ];
234 sha256 = "sha256-872tMDDYdjR983q7v2yDlnKOEBSPp5FXDdWF2q87gik="; 234 sha256 = "sha256-tq6x6CRG8Qikrjri59tzu9+b2gri8TjnShkGeh8kUgQ=";
235 }; 235 };
236 date = "2026-09-20"; 236 date = "2026-10-16";
237 }; 237 };
238 scutiger = { 238 scutiger = {
239 pname = "scutiger"; 239 pname = "scutiger";
diff --git a/accounts/gkleen@skadhi/shell/quickshell-plugins/Chrono.cpp b/accounts/gkleen@skadhi/shell/quickshell-plugins/Chrono.cpp
index 22b3469b..2487cddd 100644
--- a/accounts/gkleen@skadhi/shell/quickshell-plugins/Chrono.cpp
+++ b/accounts/gkleen@skadhi/shell/quickshell-plugins/Chrono.cpp
@@ -75,7 +75,7 @@ void Chrono::schedule(const std::chrono::time_point<std::chrono::system_clock>&
75} 75}
76 76
77QString Chrono::format(const QString& fmt) const { 77QString Chrono::format(const QString& fmt) const {
78 return QString::fromStdString(std::format(std::runtime_format(fmt.toStdString()), std::chrono::zoned_time(std::chrono::current_zone(), std::chrono::time_point_cast<std::chrono::seconds>(this->currentTime)))); 78 return QString::fromStdString(std::format(std::dynamic_format(fmt.toStdString()), std::chrono::zoned_time(std::chrono::current_zone(), std::chrono::time_point_cast<std::chrono::seconds>(this->currentTime))));
79} 79}
80 80
81QDateTime Chrono::date() const { 81QDateTime Chrono::date() const {
diff --git a/accounts/gkleen@skadhi/shell/quickshell-plugins/Systemd.cpp b/accounts/gkleen@skadhi/shell/quickshell-plugins/Systemd.cpp
index 1fa236f6..a1fbe0d3 100644
--- a/accounts/gkleen@skadhi/shell/quickshell-plugins/Systemd.cpp
+++ b/accounts/gkleen@skadhi/shell/quickshell-plugins/Systemd.cpp
@@ -1,6 +1,7 @@
1#include "Systemd.hpp" 1#include "Systemd.hpp"
2 2
3#include <sstream> 3#include <sstream>
4#include <unistd.h>
4 5
5#include <QDBusConnection> 6#include <QDBusConnection>
6#include <QDBusReply> 7#include <QDBusReply>
diff --git a/accounts/gkleen@skadhi/zsh/default.nix b/accounts/gkleen@skadhi/zsh/default.nix
index 1e11d639..d0046bc1 100644
--- a/accounts/gkleen@skadhi/zsh/default.nix
+++ b/accounts/gkleen@skadhi/zsh/default.nix
@@ -43,7 +43,6 @@ let
43 sysConfig.systemd.package 43 sysConfig.systemd.package
44 sysConfig.programs.ssh.package 44 sysConfig.programs.ssh.package
45 gnused 45 gnused
46 miniserve
47 p7zip 46 p7zip
48 ]; 47 ];
49 execer = with pkgs; [ 48 execer = with pkgs; [
diff --git a/accounts/gkleen@skadhi/zsh/zshrc b/accounts/gkleen@skadhi/zsh/zshrc
index c532b308..ea792718 100644
--- a/accounts/gkleen@skadhi/zsh/zshrc
+++ b/accounts/gkleen@skadhi/zsh/zshrc
@@ -7,7 +7,6 @@ dir() {
7 wormhole=false 7 wormhole=false
8 gitWorktree="" 8 gitWorktree=""
9 modifyPDF="" 9 modifyPDF=""
10 miniserve=false
11 10
12 while getopts ':t:a:d:ir:wg:p:m' arg; do 11 while getopts ':t:a:d:ir:wg:p:m' arg; do
13 case $arg in 12 case $arg in
@@ -26,7 +25,6 @@ dir() {
26 "w") wormhole=true ;; 25 "w") wormhole=true ;;
27 "g") gitWorktree=${OPTARG} ;; 26 "g") gitWorktree=${OPTARG} ;;
28 "p") modifyPDF=${OPTARG:a} ;; 27 "p") modifyPDF=${OPTARG:a} ;;
29 "m") miniserve=true ;;
30 *) printf "Invalid option: %s\n" $arg >&2; exit 2 ;; 28 *) printf "Invalid option: %s\n" $arg >&2; exit 2 ;;
31 esac 29 esac
32 done 30 done
@@ -50,11 +48,6 @@ dir() {
50 gitWorktree="" 48 gitWorktree=""
51 fi 49 fi
52 50
53 miniservePIDFile=""
54 if [[ ${miniserve} = "true" ]]; then
55 miniservePIDFile=$(mktemp --tmpdir --suffix=.pid)
56 fi
57
58 cleanup() 51 cleanup()
59 { 52 {
60 if [[ -n ${modifyPDF} ]]; then 53 if [[ -n ${modifyPDF} ]]; then
@@ -64,10 +57,6 @@ dir() {
64 magick -verbose "${pages[@]}" $(mktemp --tmpdir=${modifyPDF:h} ${modifyPDF:t:r}_XXXXXXXXXX.${modifyPDF:e}) 57 magick -verbose "${pages[@]}" $(mktemp --tmpdir=${modifyPDF:h} ${modifyPDF:t:r}_XXXXXXXXXX.${modifyPDF:e})
65 modifyPDF="" 58 modifyPDF=""
66 fi 59 fi
67 if [[ -n ${miniservePIDFile} ]]; then
68 command kill --verbose -- $(cat ${miniservePIDFile}) && wait $(cat ${miniservePIDFile})
69 miniservePIDFile=""
70 fi
71 } 60 }
72 61
73 ( 62 (
@@ -155,12 +144,7 @@ dir() {
155 144
156 cd $(pwd) # Needed for mounting to work 145 cd $(pwd) # Needed for mounting to work
157 146
158 if [[ ${miniserve} = "true" ]]; then 147 if [[ ${#@} -eq 0 ]] || [[ $forceShell = "true" ]]; then
159 miniserve --random-route --hidden --enable-tar-gz --enable-zip . &
160 echo $! > "${miniservePIDFile}"
161 fi
162
163 if [[ ${#@} -eq 0 ]] && [[ ${miniserve} != "true" ]] || [[ $forceShell = "true" ]]; then
164 isSingleDir() { 148 isSingleDir() {
165 typeset -a contents 149 typeset -a contents
166 contents=(*(N) .*(N)) 150 contents=(*(N) .*(N))
@@ -175,8 +159,6 @@ dir() {
175 while d=$(isSingleDir); do cd ${d}; done 159 while d=$(isSingleDir); do cd ${d}; done
176 160
177 zsh 161 zsh
178 elif [[ ${miniserve} == "true" ]]; then
179 wait $(cat "${miniservePIDFile}")
180 fi 162 fi
181 ) 163 )
182} 164}
diff --git a/flake.lock b/flake.lock
index 5f41295e..a7eadaf9 100644
--- a/flake.lock
+++ b/flake.lock
@@ -91,11 +91,11 @@
91 ] 91 ]
92 }, 92 },
93 "locked": { 93 "locked": {
94 "lastModified": 1789404474, 94 "lastModified": 1792446739,
95 "narHash": "sha256-UXFQ7tFiwn8sPz0EV4CBB2PCf/ZiGIHWn/6MXk81Lxs=", 95 "narHash": "sha256-eINUtQW48bf9G3EYprthHMll8VDKxaXQP52TZFuwMmE=",
96 "owner": "serokell", 96 "owner": "serokell",
97 "repo": "deploy-rs", 97 "repo": "deploy-rs",
98 "rev": "e760371d631165e7d8de5b0dcf148e21ec4c16f0", 98 "rev": "1cec0527bd09074bbee6d4461900ce5d58267217",
99 "type": "github" 99 "type": "github"
100 }, 100 },
101 "original": { 101 "original": {
@@ -314,11 +314,11 @@
314 "systems": "systems" 314 "systems": "systems"
315 }, 315 },
316 "locked": { 316 "locked": {
317 "lastModified": 1731533236, 317 "lastModified": 1791914995,
318 "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 318 "narHash": "sha256-Zf/xfQEAasnwnmEfHqW/4hjDE/s44yn2hD4RuVIZRjA=",
319 "owner": "numtide", 319 "owner": "numtide",
320 "repo": "flake-utils", 320 "repo": "flake-utils",
321 "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 321 "rev": "b7a79d3fea1e214f6d668d521cecec0c01e26544",
322 "type": "github" 322 "type": "github"
323 }, 323 },
324 "original": { 324 "original": {
@@ -352,11 +352,11 @@
352 ] 352 ]
353 }, 353 },
354 "locked": { 354 "locked": {
355 "lastModified": 1789514889, 355 "lastModified": 1790500375,
356 "narHash": "sha256-PFD1nxptCXJyJoiYO1gf/5Vv43yqGpHtMC6LUhl9/pQ=", 356 "narHash": "sha256-XN3sDtn8TU9hAc9xqZ+SqRB/HHm2wjxM6aSWYLJU+oo=",
357 "owner": "cachix", 357 "owner": "cachix",
358 "repo": "git-hooks.nix", 358 "repo": "git-hooks.nix",
359 "rev": "59f4ca0d063a1a3ec722c88b51a33004862e5379", 359 "rev": "a0e4241b51206fbcbf52fd322eb5f0cd80f153c4",
360 "type": "github" 360 "type": "github"
361 }, 361 },
362 "original": { 362 "original": {
@@ -502,11 +502,11 @@
502 ] 502 ]
503 }, 503 },
504 "locked": { 504 "locked": {
505 "lastModified": 1790365885, 505 "lastModified": 1792495086,
506 "narHash": "sha256-iQ0ebhiVo64NktTnwft9hNxlFu4j5cvljVxyJaEVIP4=", 506 "narHash": "sha256-TyoYH983Nsc++1scw0SoOEKshPSJWJDxK7tTmuZ974M=",
507 "owner": "nix-community", 507 "owner": "nix-community",
508 "repo": "home-manager", 508 "repo": "home-manager",
509 "rev": "7b4c5ec4bedaf1e062bbc1bcaeddbc6bd242aa1b", 509 "rev": "ec80131710bffcdf3b8498cf41f3a0579833b023",
510 "type": "github" 510 "type": "github"
511 }, 511 },
512 "original": { 512 "original": {
@@ -564,11 +564,11 @@
564 "nixpkgs": "nixpkgs_2" 564 "nixpkgs": "nixpkgs_2"
565 }, 565 },
566 "locked": { 566 "locked": {
567 "lastModified": 1769548169, 567 "lastModified": 1792503832,
568 "narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=", 568 "narHash": "sha256-WsqPR04nPS1bi5bYva04cJJcJyHw7x/rbaJmoXMzF04=",
569 "owner": "nix-community", 569 "owner": "nix-community",
570 "repo": "impermanence", 570 "repo": "impermanence",
571 "rev": "7b1d382faf603b6d264f58627330f9faa5cba149", 571 "rev": "936ced36ecd25fcbd9b4789184b88aa2e4c2a901",
572 "type": "github" 572 "type": "github"
573 }, 573 },
574 "original": { 574 "original": {
@@ -622,11 +622,11 @@
622 "pre-commit-hooks": "pre-commit-hooks" 622 "pre-commit-hooks": "pre-commit-hooks"
623 }, 623 },
624 "locked": { 624 "locked": {
625 "lastModified": 1784472151, 625 "lastModified": 1791442942,
626 "narHash": "sha256-fCP7nG0yLb4sDWClF0X1+TvDRSQEsrFc7G5TFRtNVpM=", 626 "narHash": "sha256-KP9NEPojdjV1XwGatplmPHOuUuv1+8cBCgqkaZ+yB4c=",
627 "ref": "refs/heads/main", 627 "ref": "refs/heads/main",
628 "rev": "f9ea1e7bea532f1fb223f0a1955db6549c944a87", 628 "rev": "3f76d286041aa25b14feb29b5a5570c0e8b40594",
629 "revCount": 10, 629 "revCount": 12,
630 "type": "git", 630 "type": "git",
631 "url": "https://codeberg.org/debugloop/niri-autoselect-portal.git" 631 "url": "https://codeberg.org/debugloop/niri-autoselect-portal.git"
632 }, 632 },
@@ -647,11 +647,11 @@
647 "xwayland-satellite-unstable": "xwayland-satellite-unstable" 647 "xwayland-satellite-unstable": "xwayland-satellite-unstable"
648 }, 648 },
649 "locked": { 649 "locked": {
650 "lastModified": 1790070480, 650 "lastModified": 1792528076,
651 "narHash": "sha256-gLB/L3ggRwng88W3t4KygVBkIjB84zW1xQSIWiuRGWg=", 651 "narHash": "sha256-nzLrw3rEoDdqBrAfvUmQUhoSuui2jZc71iIQB7d/qoI=",
652 "owner": "epireyn", 652 "owner": "epireyn",
653 "repo": "niri-flake", 653 "repo": "niri-flake",
654 "rev": "4edede7d2e876544cc1c1128e47d0e51278b1b9a", 654 "rev": "d62f632829c081ad44eb24b4be788fefde2686b2",
655 "type": "github" 655 "type": "github"
656 }, 656 },
657 "original": { 657 "original": {
@@ -723,11 +723,11 @@
723 ] 723 ]
724 }, 724 },
725 "locked": { 725 "locked": {
726 "lastModified": 1789892076, 726 "lastModified": 1792309949,
727 "narHash": "sha256-Dkg4VKPmDPqTwaiw2WH5br73tXoL1qrOO0xJnR4TlcA=", 727 "narHash": "sha256-2DAEMk8YkV8OF6N2uw9jQ016cYoNkcgnq50AShwWxNw=",
728 "owner": "nix-community", 728 "owner": "nix-community",
729 "repo": "nix-index-database", 729 "repo": "nix-index-database",
730 "rev": "9ad722673ab3b3f91f02135e53775825b240b869", 730 "rev": "1b4d1758fa6053c5d6284254a793134fa602fbff",
731 "type": "github" 731 "type": "github"
732 }, 732 },
733 "original": { 733 "original": {
@@ -744,11 +744,11 @@
744 ] 744 ]
745 }, 745 },
746 "locked": { 746 "locked": {
747 "lastModified": 1778497292, 747 "lastModified": 1791885592,
748 "narHash": "sha256-vodUt55p0PXOaKK5xE1dldTxdtyuttbdGy0LvP8cCxQ=", 748 "narHash": "sha256-scMEPnvPiru3KHrdbkKQcLPjtgX4gsoPG2kXNc6EIZc=",
749 "owner": "ners", 749 "owner": "ners",
750 "repo": "nix-monitored", 750 "repo": "nix-monitored",
751 "rev": "4a7e1e7dcd0c1f7c2d063928511ebd72afea7e58", 751 "rev": "5e2f9523e595c13d698ef06b6818454e18e6f940",
752 "type": "github" 752 "type": "github"
753 }, 753 },
754 "original": { 754 "original": {
@@ -769,11 +769,11 @@
769 ] 769 ]
770 }, 770 },
771 "locked": { 771 "locked": {
772 "lastModified": 1789705005, 772 "lastModified": 1791519392,
773 "narHash": "sha256-kWGA2zNVrHZpKgeXA0urHvw7FWCTEp5rjyUAhCikXuc=", 773 "narHash": "sha256-l9JFud0pJ/JpYaTeNDbaaLfns8tBIOGCknBWwcUUg6Y=",
774 "ref": "refs/heads/main", 774 "ref": "refs/heads/main",
775 "rev": "bcecf42740627e01376caea1edc3194f39857890", 775 "rev": "ffbf605a17d53c076afa394c3d9ed3d112e02e18",
776 "revCount": 814, 776 "revCount": 817,
777 "type": "git", 777 "type": "git",
778 "url": "https://code.maralorn.de/maralorn/nix-output-monitor.git" 778 "url": "https://code.maralorn.de/maralorn/nix-output-monitor.git"
779 }, 779 },
@@ -789,11 +789,11 @@
789 ] 789 ]
790 }, 790 },
791 "locked": { 791 "locked": {
792 "lastModified": 1783240168, 792 "lastModified": 1791744226,
793 "narHash": "sha256-9zaLOKal8uI+ecKaOBCOfGcZe/HG1xQQnlDDjPoOmwE=", 793 "narHash": "sha256-zQk2GSBO4hkq75PbtpgJHwupFHD0qaQDJiP15GTmstQ=",
794 "owner": "AshleyYakeley", 794 "owner": "AshleyYakeley",
795 "repo": "NixVirt", 795 "repo": "NixVirt",
796 "rev": "6d213ab42f72ba41c2eb4e6bdb97581c0642d942", 796 "rev": "11e2b2c0492aeff3fe3dea9000832d7694c47dfe",
797 "type": "github" 797 "type": "github"
798 }, 798 },
799 "original": { 799 "original": {
@@ -807,11 +807,11 @@
807 "nixpkgs": "nixpkgs_4" 807 "nixpkgs": "nixpkgs_4"
808 }, 808 },
809 "locked": { 809 "locked": {
810 "lastModified": 1789978172, 810 "lastModified": 1792491056,
811 "narHash": "sha256-FIRXajv1pPZ+l6On6ekkmcQ6le0Zi0ncRUoR3nB0vKA=", 811 "narHash": "sha256-6n1Dn+WYtD8lprnSi+0k4FjbKfIVNG8lblpJ5MiiqXs=",
812 "owner": "NixOS", 812 "owner": "NixOS",
813 "repo": "nixos-hardware", 813 "repo": "nixos-hardware",
814 "rev": "9ebcb7766700d7e006d9505247bd7ce0426f4232", 814 "rev": "efb6d0d5e2394c3c5416a18652808aba206c0988",
815 "type": "github" 815 "type": "github"
816 }, 816 },
817 "original": { 817 "original": {
@@ -932,11 +932,11 @@
932 }, 932 },
933 "nixpkgs-stable_2": { 933 "nixpkgs-stable_2": {
934 "locked": { 934 "locked": {
935 "lastModified": 1789998861, 935 "lastModified": 1792503283,
936 "narHash": "sha256-62XMQD4WLdMAfdT0/8gJmPH2dKeTw908ryNloAplTr8=", 936 "narHash": "sha256-vhe2jyvRCgufWPqDuDq1S3t3ypE+ka46IFutV02xKso=",
937 "owner": "NixOS", 937 "owner": "NixOS",
938 "repo": "nixpkgs", 938 "repo": "nixpkgs",
939 "rev": "1e8bc658fc985ef27ccd66d107d767b32bb7ef98", 939 "rev": "cd4ea8d57de16f4810bc5f14207bac45fbf19f67",
940 "type": "github" 940 "type": "github"
941 }, 941 },
942 "original": { 942 "original": {
@@ -1025,11 +1025,11 @@
1025 }, 1025 },
1026 "nixpkgs_5": { 1026 "nixpkgs_5": {
1027 "locked": { 1027 "locked": {
1028 "lastModified": 1789921291, 1028 "lastModified": 1792502884,
1029 "narHash": "sha256-Ft/BRnIqw1MywFoXydKobjjWmDFgDdYtSpJliE8+yUw=", 1029 "narHash": "sha256-IoNisKcGbUjdd45qCqywGMCYmZ5EnkxezvLII0FWwNA=",
1030 "owner": "NixOS", 1030 "owner": "NixOS",
1031 "repo": "nixpkgs", 1031 "repo": "nixpkgs",
1032 "rev": "44a91898084f46797b5fac650c7e8c9ac38c43d4", 1032 "rev": "02c087f3fe673c9e317f206a627cb6b910336dbe",
1033 "type": "github" 1033 "type": "github"
1034 }, 1034 },
1035 "original": { 1035 "original": {
@@ -1068,11 +1068,11 @@
1068 ] 1068 ]
1069 }, 1069 },
1070 "locked": { 1070 "locked": {
1071 "lastModified": 1773379327, 1071 "lastModified": 1792143065,
1072 "narHash": "sha256-Bj1ZaZVKTGyTOwwkp7TvAG0wxK9AAn717G/C8HnKFQM=", 1072 "narHash": "sha256-Q5MNCUrxmos6bHeXvRk+J186zqjsVQNZ7EvdncMryII=",
1073 "owner": "berberman", 1073 "owner": "berberman",
1074 "repo": "nvfetcher", 1074 "repo": "nvfetcher",
1075 "rev": "e41af9779ea14adf1d8c3edb075713c2668d45b9", 1075 "rev": "0e86fbbf93b56b344b6104443d317b16ca862ac9",
1076 "type": "github" 1076 "type": "github"
1077 }, 1077 },
1078 "original": { 1078 "original": {
@@ -1295,11 +1295,11 @@
1295 ] 1295 ]
1296 }, 1296 },
1297 "locked": { 1297 "locked": {
1298 "lastModified": 1789963190, 1298 "lastModified": 1792499785,
1299 "narHash": "sha256-mj5BLUKECIHv3rwkBXL6xQp45gIBJV7ZOYgT46LXwho=", 1299 "narHash": "sha256-mGOkvueuMGSRiD75ccxFzfEvSlIU9ztjFluHMKOtogY=",
1300 "owner": "pyproject-nix", 1300 "owner": "pyproject-nix",
1301 "repo": "build-system-pkgs", 1301 "repo": "build-system-pkgs",
1302 "rev": "14b45373ea9a14ed2fcd0abf3ed35c8e3c430020", 1302 "rev": "a17819c85163988e063806ffc4f6d2716bc8ead8",
1303 "type": "github" 1303 "type": "github"
1304 }, 1304 },
1305 "original": { 1305 "original": {
@@ -1315,11 +1315,11 @@
1315 ] 1315 ]
1316 }, 1316 },
1317 "locked": { 1317 "locked": {
1318 "lastModified": 1788394333, 1318 "lastModified": 1791657700,
1319 "narHash": "sha256-xYOP0Xym1eVGUaHFx+eJEaycFGoiCbst3fZf0xFHP78=", 1319 "narHash": "sha256-vcCAvhtA7hG+/gOge29hYHy7I/dLkIsr5nLx4sFEQic=",
1320 "owner": "pyproject-nix", 1320 "owner": "pyproject-nix",
1321 "repo": "pyproject.nix", 1321 "repo": "pyproject.nix",
1322 "rev": "6a8a7881d75b6f98967e7b8069f4ead331384301", 1322 "rev": "ddc400a6883b042646d0940e65971bb7f7e96107",
1323 "type": "github" 1323 "type": "github"
1324 }, 1324 },
1325 "original": { 1325 "original": {
@@ -1390,11 +1390,11 @@
1390 ] 1390 ]
1391 }, 1391 },
1392 "locked": { 1392 "locked": {
1393 "lastModified": 1789890976, 1393 "lastModified": 1792056300,
1394 "narHash": "sha256-GKwH3zpy7tartuJMG0Rv/xUsdetG1QLmTVv8UKgJLmA=", 1394 "narHash": "sha256-YU1LjDe1o2Ymg5zEiCHbmMXLkDCtxHQRiVqZ3nC5GGk=",
1395 "owner": "Mic92", 1395 "owner": "Mic92",
1396 "repo": "sops-nix", 1396 "repo": "sops-nix",
1397 "rev": "7214124c20c1542c90deb54af50e2f53ae02711f", 1397 "rev": "44931708c62937c2b1bf7953902989fa5bb9ee1b",
1398 "type": "github" 1398 "type": "github"
1399 }, 1399 },
1400 "original": { 1400 "original": {
@@ -1465,11 +1465,11 @@
1465 ] 1465 ]
1466 }, 1466 },
1467 "locked": { 1467 "locked": {
1468 "lastModified": 1789383061, 1468 "lastModified": 1792151315,
1469 "narHash": "sha256-+DkygIVr/+RtXnsjd07BzFFB0ihwmjjLuYh1fyc/bCg=", 1469 "narHash": "sha256-PMtgvHuGijoIAtPtrBm7kJOI6fxzX4LYPAIK+QVGY+Y=",
1470 "owner": "pyproject-nix", 1470 "owner": "pyproject-nix",
1471 "repo": "uv2nix", 1471 "repo": "uv2nix",
1472 "rev": "079be4e68c529c4cbc44dbf1afc692e4b30695b3", 1472 "rev": "7aba73a3d85454f1118f8cf9de97979b4d26bcac",
1473 "type": "github" 1473 "type": "github"
1474 }, 1474 },
1475 "original": { 1475 "original": {
@@ -1498,11 +1498,11 @@
1498 "xwayland-satellite-unstable": { 1498 "xwayland-satellite-unstable": {
1499 "flake": false, 1499 "flake": false,
1500 "locked": { 1500 "locked": {
1501 "lastModified": 1788991189, 1501 "lastModified": 1792070459,
1502 "narHash": "sha256-0TxfMgqW0/BLD4M942c5DCKYrtPvzsPJwvdcco4LQUM=", 1502 "narHash": "sha256-qGSyMXPHiXWp9/nE5Zs1DJN5NmZFvoxaBS5Y9i7p0Pc=",
1503 "owner": "Supreeeme", 1503 "owner": "Supreeeme",
1504 "repo": "xwayland-satellite", 1504 "repo": "xwayland-satellite",
1505 "rev": "add2795134593faafce60e404a0a75df68e9ee0c", 1505 "rev": "97a89cec53eb4f8788386a574450dd94c0538754",
1506 "type": "github" 1506 "type": "github"
1507 }, 1507 },
1508 "original": { 1508 "original": {
diff --git a/hosts/skadhi/hw.nix b/hosts/skadhi/hw.nix
index 687f04d8..0e6bfd7d 100644
--- a/hosts/skadhi/hw.nix
+++ b/hosts/skadhi/hw.nix
@@ -5,7 +5,10 @@
5 ]; 5 ];
6 6
7 config = { 7 config = {
8 hardware.framework.laptop13.audioEnhancement.enable = false; 8 hardware.framework = {
9 laptop13.audioEnhancement.enable = false;
10 enableKmod = false;
11 };
9 hardware.enableRedistributableFirmware = true; 12 hardware.enableRedistributableFirmware = true;
10 services.fstrim.enable = false; 13 services.fstrim.enable = false;
11 14
diff --git a/overlays/etesync-dav.nix b/overlays/etesync-dav.nix
index dbb7c7b6..64f30071 100644
--- a/overlays/etesync-dav.nix
+++ b/overlays/etesync-dav.nix
@@ -1,5 +1,5 @@
1{ final, prev, ... }: { 1{ flakeInputs, final, prev, ... }: {
2 etesync-dav = final.python312Packages.buildPythonApplication rec { 2 etesync-dav = final.python312Packages.buildPythonApplication (finalAttrs: rec {
3 pname = "etesync-dav"; 3 pname = "etesync-dav";
4 version = "0.35.1"; 4 version = "0.35.1";
5 pyproject = true; 5 pyproject = true;
@@ -7,12 +7,23 @@
7 src = prev.fetchFromGitHub { 7 src = prev.fetchFromGitHub {
8 owner = "etesync"; 8 owner = "etesync";
9 repo = "etesync-dav"; 9 repo = "etesync-dav";
10 tag = "v${version}"; 10 tag = "v${finalAttrs.version}";
11 hash = "sha256-y4BhU2kSn+RWqc5+pJQFhbwfat9cMWD0ED0EXJp25cY="; 11 hash = "sha256-y4BhU2kSn+RWqc5+pJQFhbwfat9cMWD0ED0EXJp25cY=";
12 }; 12 };
13 13
14 patches = [
15 (flakeInputs.nixpkgs + "/pkgs/by-name/et/etesync-dav/radicale-3-6-compat.patch")
16 (prev.fetchpatch {
17 url = "https://github.com/etesync/etesync-dav/pull/366.patch";
18 hash = "sha256-WR+D6ZLMsvFzSFSGaensNxrs4VZAc9EoIwCfF6OPOSQ=";
19 })
20 ];
21 pythonRelaxDeps = [ "radicale" ];
22
14 build-system = with final.python312Packages; [ setuptools ]; 23 build-system = with final.python312Packages; [ setuptools ];
15 24
25 PYTHONPATH = final.python312Packages.makePythonPath dependencies;
26
16 dependencies = with final.python312Packages; [ 27 dependencies = with final.python312Packages; [
17 appdirs 28 appdirs
18 etebase 29 etebase
@@ -21,40 +32,9 @@
21 flask-wtf 32 flask-wtf
22 msgpack 33 msgpack
23 requests 34 requests
24 requests.optional-dependencies.socks 35 (toPythonModule (final.radicale.override { python3 = python; }))
25 (buildPythonApplication rec { 36 ] ++ requests.optional-dependencies.socks;
26 pname = "radicale";
27 version = "3.2.0";
28 pyproject = true;
29
30 src = prev.fetchFromGitHub {
31 owner = "Kozea";
32 repo = "Radicale";
33 rev = "refs/tags/v${version}";
34 hash = "sha256-RxC8VOfdTXJZiAroDHTKjJqGWu65Z5uyb4WK1LOqubQ=";
35 };
36
37 postPatch = ''
38 sed -i '/addopts/d' setup.cfg
39 '';
40
41 build-system = [
42 setuptools
43 ];
44
45 dependencies = [
46 defusedxml
47 passlib
48 vobject
49 pika
50 python-dateutil
51 pytz # https://github.com/Kozea/Radicale/issues/816
52 ] ++ passlib.optional-dependencies.bcrypt;
53
54 doCheck = false;
55 })
56 ];
57 37
58 doCheck = false; 38 doCheck = false;
59 }; 39 });
60} 40}
diff --git a/overlays/etesync.nix b/overlays/etesync.nix
new file mode 100644
index 00000000..7311016e
--- /dev/null
+++ b/overlays/etesync.nix
@@ -0,0 +1,14 @@
1{ final, prev, ... }: {
2 python312 = prev.python312.override {
3 packageOverrides = self: super: {
4 etesync = super.etesync.overridePythonAttrs (oldAttrs: {
5 patches = (oldAttrs.patches or []) ++ [
6 (prev.fetchpatch {
7 url = "https://github.com/etesync/etebase-py/pull/59.patch";
8 hash = "sha256-vCueuk4gYskBZkzwJB2B8d7N6XXNDgNBA7rsZ2gpZXs=";
9 })
10 ];
11 });
12 };
13 };
14}
diff --git a/overlays/keepassxc/database-open-dialog.patch b/overlays/keepassxc/database-open-dialog.patch
deleted file mode 100644
index dff84846..00000000
--- a/overlays/keepassxc/database-open-dialog.patch
+++ /dev/null
@@ -1,129 +0,0 @@
1diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp
2index 60412b5a..c0497d91 100644
3--- a/src/browser/BrowserService.cpp
4+++ b/src/browser/BrowserService.cpp
5@@ -249,7 +249,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
6 return result;
7 }
8
9- auto dialogResult = MessageBox::warning(m_currentDatabaseWidget,
10+ auto dialogResult = MessageBox::warning(nullptr,
11 tr("KeePassXC - Create a new group"),
12 tr("A request for creating a new group \"%1\" has been received.\n"
13 "Do you want to create this group?\n")
14@@ -422,7 +422,7 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& entriesToConfirm,
15
16 m_dialogActive = true;
17 updateWindowState();
18- BrowserAccessControlDialog accessControlDialog(m_currentDatabaseWidget);
19+ BrowserAccessControlDialog accessControlDialog{};
20
21 connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &accessControlDialog, SLOT(reject()));
22
23@@ -512,7 +512,7 @@ QString BrowserService::storeKey(const QString& key)
24 QString id;
25
26 do {
27- QInputDialog keyDialog(m_currentDatabaseWidget);
28+ QInputDialog keyDialog{};
29 connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &keyDialog, SLOT(reject()));
30 keyDialog.setWindowTitle(tr("KeePassXC - New key association request"));
31 keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n"
32@@ -535,7 +535,7 @@ QString BrowserService::storeKey(const QString& key)
33
34 contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id);
35 if (contains) {
36- dialogResult = MessageBox::warning(m_currentDatabaseWidget,
37+ dialogResult = MessageBox::warning(nullptr,
38 tr("KeePassXC - Overwrite existing key?"),
39 tr("A shared encryption key with the name \"%1\" "
40 "already exists.\nDo you want to overwrite it?")
41@@ -595,7 +595,7 @@ QJsonObject BrowserService::showPasskeysRegisterPrompt(const QJsonObject& public
42 const auto existingEntries = getPasskeyEntriesWithUserHandle(rpId, userId, keyList);
43
44 raiseWindow();
45- BrowserPasskeysConfirmationDialog confirmDialog(m_currentDatabaseWidget);
46+ BrowserPasskeysConfirmationDialog confirmDialog{};
47 confirmDialog.registerCredential(username, rpId, existingEntries, timeout);
48
49 auto dialogResult = confirmDialog.exec();
50@@ -612,7 +612,7 @@ QJsonObject BrowserService::showPasskeysRegisterPrompt(const QJsonObject& public
51 // If no entry is selected, show the import dialog for manual entry selection
52 auto selectedEntry = confirmDialog.getSelectedEntry();
53 if (!selectedEntry) {
54- PasskeyImporter passkeyImporter(m_currentDatabaseWidget);
55+ PasskeyImporter passkeyImporter{};
56 const auto result = passkeyImporter.showImportDialog(db,
57 nullptr,
58 origin,
59@@ -683,7 +683,7 @@ QJsonObject BrowserService::showPasskeysAuthenticationPrompt(const QJsonObject&
60 const auto timeout = publicKeyOptions["timeout"].toInt();
61
62 raiseWindow();
63- BrowserPasskeysConfirmationDialog confirmDialog(m_currentDatabaseWidget);
64+ BrowserPasskeysConfirmationDialog confirmDialog{};
65 confirmDialog.authenticateCredential(entries, rpId, timeout);
66 auto dialogResult = confirmDialog.exec();
67 if (dialogResult == QDialog::Accepted) {
68@@ -760,7 +760,7 @@ void BrowserService::addPasskeyToEntry(Entry* entry,
69
70 // Ask confirmation if entry already contains a Passkey
71 if (entry->hasPasskey()) {
72- if (MessageBox::question(m_currentDatabaseWidget,
73+ if (MessageBox::question(nullptr,
74 tr("KeePassXC - Update passkey"),
75 tr("Entry already has a passkey.\nDo you want to overwrite the passkey in %1 - %2?")
76 .arg(entry->title(), passkeyUtils()->getUsernameFromEntry(entry)),
77@@ -873,7 +873,7 @@ bool BrowserService::updateEntry(const EntryParameters& entryParameters, const Q
78 MessageBox::Button dialogResult = MessageBox::No;
79 if (!browserSettings()->alwaysAllowUpdate()) {
80 raiseWindow();
81- dialogResult = MessageBox::question(m_currentDatabaseWidget,
82+ dialogResult = MessageBox::question(nullptr,
83 tr("KeePassXC - Update Entry"),
84 tr("Do you want to update the information in %1 - %2?")
85 .arg(QUrl(entryParameters.siteUrl).host(), username),
86@@ -909,7 +909,7 @@ bool BrowserService::deleteEntry(const QString& uuid)
87 return false;
88 }
89
90- auto dialogResult = MessageBox::warning(m_currentDatabaseWidget,
91+ auto dialogResult = MessageBox::warning(nullptr,
92 tr("KeePassXC - Delete entry"),
93 tr("A request for deleting entry \"%1\" has been received.\n"
94 "Do you want to delete the entry?\n")
95@@ -1536,7 +1536,7 @@ QSharedPointer<Database> BrowserService::selectedDatabase()
96 }
97 }
98
99- BrowserEntrySaveDialog browserEntrySaveDialog(m_currentDatabaseWidget);
100+ BrowserEntrySaveDialog browserEntrySaveDialog{};
101 int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget);
102 if (openDatabaseCount > 1) {
103 int res = browserEntrySaveDialog.exec();
104diff --git a/src/fdosecrets/objects/Prompt.cpp b/src/fdosecrets/objects/Prompt.cpp
105index e89cd499..347c98b8 100644
106--- a/src/fdosecrets/objects/Prompt.cpp
107+++ b/src/fdosecrets/objects/Prompt.cpp
108@@ -313,7 +313,7 @@ namespace FdoSecrets
109 if (!entries.isEmpty()) {
110 QString app = tr("%1 (PID: %2)").arg(client->name()).arg(client->pid());
111 auto ac = new AccessControlDialog(
112- findWindow(m_windowId), entries, app, client->processInfo(), AuthOption::Remember);
113+ nullptr, entries, app, client->processInfo(), AuthOption::Remember);
114 connect(ac, &AccessControlDialog::finished, this, &UnlockPrompt::itemUnlockFinished);
115 connect(ac, &AccessControlDialog::finished, ac, &AccessControlDialog::deleteLater);
116 ac->open();
117diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp
118index 805d4eab..4836199e 100644
119--- a/src/gui/DatabaseTabWidget.cpp
120+++ b/src/gui/DatabaseTabWidget.cpp
121@@ -41,7 +41,7 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent)
122 : QTabWidget(parent)
123 , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this))
124 , m_dbWidgetPendingLock(nullptr)
125- , m_databaseOpenDialog(new DatabaseOpenDialog(this))
126+ , m_databaseOpenDialog(new DatabaseOpenDialog())
127 , m_databaseOpenInProgress(false)
128 {
129 auto* tabBar = new QTabBar(this);
diff --git a/overlays/keepassxc/default.nix b/overlays/keepassxc/default.nix
deleted file mode 100644
index 325f1aa4..00000000
--- a/overlays/keepassxc/default.nix
+++ /dev/null
@@ -1,113 +0,0 @@
1{ final, prev, flakeInputs, ... }:
2{
3 keepassxc = final.stdenv.mkDerivation (finalAttrs: {
4 pname = "keepassxc";
5 version = "2.8.0-beta1";
6
7 src = final.fetchFromGitHub {
8 owner = "keepassxreboot";
9 repo = "keepassxc";
10 tag = finalAttrs.version;
11 hash = "sha256-fksThYmGZed66zxGDxlS2SHQzJYRf+T9AuZPbaNZV5Y=";
12 };
13
14 env =
15 final.lib.optionalAttrs final.stdenv.cc.isClang {
16 NIX_CFLAGS_COMPILE = toString [
17 "-Wno-old-style-cast"
18 "-Wno-error"
19 "-D__BIG_ENDIAN__=${if final.stdenv.hostPlatform.isBigEndian then "1" else "0"}"
20 ];
21 };
22
23 # Upstream develops against a build of PCSC from Xcode.
24 # The types are incompatible with nixpkgs pcsclite.
25 # https://github.com/NixOS/nixpkgs/issues/520227
26 postPatch = ''
27 substituteInPlace src/keys/drivers/YubiKeyInterfacePCSC.cpp \
28 --replace-fail "typedef uint32_t RETVAL;" "typedef int32_t RETVAL;"
29 '';
30
31 cmakeFlags = [
32 (final.lib.cmakeFeature "KEEPASSXC_BUILD_TYPE" "Release")
33 (final.lib.cmakeBool "WITH_GUI_TESTS" true)
34 (final.lib.cmakeBool "WITH_XC_UPDATECHECK" false)
35 (final.lib.cmakeBool "WITH_XC_X11" false)
36 (final.lib.cmakeBool "WITH_XC_BROWSER" true)
37 (final.lib.cmakeBool "WITH_XC_BROWSER_PASSKEYS" true)
38 (final.lib.cmakeBool "WITH_XC_KEESHARE" true)
39 (final.lib.cmakeBool "WITH_XC_NETWORKING" true)
40 (final.lib.cmakeBool "WITH_XC_SSHAGENT" true)
41 (final.lib.cmakeBool "WITH_XC_FDOSECRETS" true)
42 (final.lib.cmakeBool "WITH_XC_YUBIKEY" true)
43 ];
44
45 doCheck = true;
46 checkPhase =
47 let
48 disabledTests = final.lib.concatStringsSep "|" (
49 [
50 # flaky
51 "testcli"
52 "testgui"
53 ]
54 );
55 in
56 ''
57 runHook preCheck
58
59 export LC_ALL="en_US.UTF-8"
60 export QT_QPA_PLATFORM=offscreen
61 export QT_PLUGIN_PATH="${final.qt6.qtbase}/${final.qt6.qtbase.qtPluginPrefix}"
62
63 make test ARGS+="-E '${disabledTests}' --output-on-failure"
64
65 runHook postCheck
66 '';
67
68 nativeBuildInputs = with final; [
69 asciidoctor
70 cmake
71 qt6.wrapQtAppsHook
72 qt6.qttools
73 pkg-config
74 wrapGAppsHook3
75 ];
76
77 dontWrapGApps = true;
78 preFixup = ''
79 qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
80 '';
81
82 postInstall = final.lib.concatLines [
83 # See https://github.com/keepassxreboot/keepassxc/blob/cd7a53abbbb81e468efb33eb56eefc12739969b8/src/browser/NativeMessageInstaller.cpp#L317
84 # See https://github.com/keepassxreboot/keepassxc/blob/cd7a53abbbb81e468efb33eb56eefc12739969b8/utils/keepassxc-snap-helper.sh#L48-L58
85 ''
86 mkdir -p "$out/lib/mozilla/native-messaging-hosts"
87 substituteAll "${toString (flakeInputs.nixpkgs) + "/pkgs/by-name/ke/keepassxc/firefox-native-messaging-host.json"}" "$out/lib/mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json"
88
89 mkdir -p "$out/etc/chromium/native-messaging-hosts"
90 substituteAll "${toString (flakeInputs.nixpkgs) + "/pkgs/by-name/ke/keepassxc/chromium-native-messaging-host.json"}" "$out/etc/chromium/native-messaging-hosts/org.keepassxc.keepassxc_browser.json"
91 ''
92 ];
93
94 buildInputs = with final; [
95 botan3
96 curl
97 libxi
98 libxtst
99 libargon2
100 qt6.qtbase
101 qt6.qtsvg
102 minizip
103 pcsclite
104 qrencode
105 readline
106 zlib
107 libusb1
108 keyutils
109 ];
110
111 meta.mainProgram = "keepassxc";
112 });
113}
diff --git a/overlays/quickshell/default.nix b/overlays/quickshell/default.nix
index 47aee5ac..38c78883 100644
--- a/overlays/quickshell/default.nix
+++ b/overlays/quickshell/default.nix
@@ -17,7 +17,7 @@
17 17
18 patches = (oldAttrs.patches or []) ++ [ 18 patches = (oldAttrs.patches or []) ++ [
19 # ./lock-state-changed.patch 19 # ./lock-state-changed.patch
20 ./notify-session-unlock.patch 20 # ./notify-session-unlock.patch
21 ./pipewire.patch 21 ./pipewire.patch
22 ./io.patch 22 ./io.patch
23 ./close-stdin.patch 23 ./close-stdin.patch
diff --git a/overlays/quickshell/pipewire.patch b/overlays/quickshell/pipewire.patch
index b94a2691..8c5a4c1e 100644
--- a/overlays/quickshell/pipewire.patch
+++ b/overlays/quickshell/pipewire.patch
@@ -1,7 +1,7 @@
1diff --git i/src/services/pipewire/device.cpp w/src/services/pipewire/device.cpp 1diff --git c/src/services/pipewire/device.cpp i/src/services/pipewire/device.cpp
2index 616e7d0..0c55008 100644 2index 61079a1..7246a67 100644
3--- i/src/services/pipewire/device.cpp 3--- c/src/services/pipewire/device.cpp
4+++ w/src/services/pipewire/device.cpp 4+++ i/src/services/pipewire/device.cpp
5@@ -3,6 +3,7 @@ 5@@ -3,6 +3,7 @@
6 #include <cstdint> 6 #include <cstdint>
7 #include <functional> 7 #include <functional>
@@ -21,7 +21,7 @@ index 616e7d0..0c55008 100644
21 21
22 #include "../../core/logcat.hpp" 22 #include "../../core/logcat.hpp"
23 #include "core.hpp" 23 #include "core.hpp"
24@@ -46,6 +49,25 @@ void PwDevice::unbindHooks() { 24@@ -46,6 +51,25 @@ void PwDevice::unbindHooks() {
25 this->mWaitingForDevice = false; 25 this->mWaitingForDevice = false;
26 } 26 }
27 27
@@ -47,7 +47,7 @@ index 616e7d0..0c55008 100644
47 const pw_device_events PwDevice::EVENTS = { 47 const pw_device_events PwDevice::EVENTS = {
48 .version = PW_VERSION_DEVICE_EVENTS, 48 .version = PW_VERSION_DEVICE_EVENTS,
49 .info = &PwDevice::onInfo, 49 .info = &PwDevice::onInfo,
50@@ -71,6 +93,11 @@ void PwDevice::onInfo(void* data, const pw_device_info* info) { 50@@ -71,6 +95,11 @@ void PwDevice::onInfo(void* data, const pw_device_info* info) {
51 } 51 }
52 52
53 break; 53 break;
@@ -59,7 +59,7 @@ index 616e7d0..0c55008 100644
59 } 59 }
60 } 60 }
61 } 61 }
62@@ -97,6 +124,15 @@ void PwDevice::onParam( 62@@ -97,6 +126,15 @@ void PwDevice::onParam(
63 } 63 }
64 64
65 self->addDeviceIndexPairs(param); 65 self->addDeviceIndexPairs(param);
@@ -75,7 +75,7 @@ index 616e7d0..0c55008 100644
75 } 75 }
76 } 76 }
77 77
78@@ -145,6 +181,21 @@ void PwDevice::polled() { 78@@ -159,6 +197,21 @@ void PwDevice::polled() {
79 return false; 79 return false;
80 }); 80 });
81 } 81 }
@@ -97,7 +97,7 @@ index 616e7d0..0c55008 100644
97 } 97 }
98 98
99 bool PwDevice::setVolumes(qint32 routeDevice, const QVector<float>& volumes) { 99 bool PwDevice::setVolumes(qint32 routeDevice, const QVector<float>& volumes) {
100@@ -182,6 +233,15 @@ bool PwDevice::setMuted(qint32 routeDevice, bool muted) { 100@@ -196,6 +249,15 @@ bool PwDevice::setMuted(qint32 routeDevice, bool muted) {
101 }); 101 });
102 } 102 }
103 103
@@ -113,7 +113,7 @@ index 616e7d0..0c55008 100644
113 void PwDevice::waitForDevice() { this->mWaitingForDevice = true; } 113 void PwDevice::waitForDevice() { this->mWaitingForDevice = true; }
114 bool PwDevice::waitingForDevice() const { return this->mWaitingForDevice; } 114 bool PwDevice::waitingForDevice() const { return this->mWaitingForDevice; }
115 115
116@@ -222,4 +282,24 @@ bool PwDevice::setRouteProps( 116@@ -236,4 +298,24 @@ bool PwDevice::setRouteProps(
117 return true; 117 return true;
118 } 118 }
119 119
@@ -138,10 +138,10 @@ index 616e7d0..0c55008 100644
138+} 138+}
139+ 139+
140 } // namespace qs::service::pipewire 140 } // namespace qs::service::pipewire
141diff --git i/src/services/pipewire/device.hpp w/src/services/pipewire/device.hpp 141diff --git c/src/services/pipewire/device.hpp i/src/services/pipewire/device.hpp
142index 1a1f705..ee64858 100644 142index f973b18..7cff16f 100644
143--- i/src/services/pipewire/device.hpp 143--- c/src/services/pipewire/device.hpp
144+++ w/src/services/pipewire/device.hpp 144+++ i/src/services/pipewire/device.hpp
145@@ -1,6 +1,7 @@ 145@@ -1,6 +1,7 @@
146 #pragma once 146 #pragma once
147 147
@@ -150,7 +150,7 @@ index 1a1f705..ee64858 100644
150 150
151 #include <pipewire/core.h> 151 #include <pipewire/core.h>
152 #include <pipewire/device.h> 152 #include <pipewire/device.h>
153@@ -17,6 +18,20 @@ 153@@ -16,6 +17,20 @@
154 154
155 namespace qs::service::pipewire { 155 namespace qs::service::pipewire {
156 156
@@ -170,8 +170,8 @@ index 1a1f705..ee64858 100644
170+ 170+
171 class PwDevice; 171 class PwDevice;
172 172
173 class PwDevice: public PwBindable<pw_device, PW_TYPE_INTERFACE_Device, PW_VERSION_DEVICE> { 173 // Forward declare to avoid circular dependency with node.hpp
174@@ -25,6 +40,12 @@ class PwDevice: public PwBindable<pw_device, PW_TYPE_INTERFACE_Device, PW_VERSIO 174@@ -27,6 +42,12 @@ class PwDevice: public PwBindable<pw_device, PW_TYPE_INTERFACE_Device, PW_VERSIO
175 public: 175 public:
176 void bindHooks() override; 176 void bindHooks() override;
177 void unbindHooks() override; 177 void unbindHooks() override;
@@ -184,9 +184,9 @@ index 1a1f705..ee64858 100644
184 184
185 bool setVolumes(qint32 routeDevice, const QVector<float>& volumes); 185 bool setVolumes(qint32 routeDevice, const QVector<float>& volumes);
186 bool setMuted(qint32 routeDevice, bool muted); 186 bool setMuted(qint32 routeDevice, bool muted);
187@@ -32,9 +53,16 @@ public: 187@@ -37,10 +58,17 @@ public:
188 void waitForDevice(); 188 [[nodiscard]] bool tryLoadVolumeProps(qint32 routeDevice, PwVolumeProps& volumeProps);
189 [[nodiscard]] bool waitingForDevice() const; 189 [[nodiscard]] bool hasRouteDevice(qint32 routeDevice) const;
190 190
191+ void setProfile(qint32 profileIndex); 191+ void setProfile(qint32 profileIndex);
192+ 192+
@@ -195,13 +195,14 @@ index 1a1f705..ee64858 100644
195+ 195+
196 signals: 196 signals:
197 void deviceReady(); 197 void deviceReady();
198 void routeVolumesChanged(qint32 routeDevice, const PwVolumeProps& volumeProps); 198 void
199 routeVolumesChanged(qint32 routeDevice, const qs::service::pipewire::PwVolumeProps& volumeProps);
199+ void profilesChanged(QList<PwProfile> profiles); 200+ void profilesChanged(QList<PwProfile> profiles);
200+ void currentProfileChanged(PwProfile profile); 201+ void currentProfileChanged(PwProfile profile);
201 202
202 private slots: 203 private slots:
203 void polled(); 204 void polled();
204@@ -49,6 +77,11 @@ private: 205@@ -56,6 +84,11 @@ private:
205 QList<qint32> stagingIndexes; 206 QList<qint32> stagingIndexes;
206 void addDeviceIndexPairs(const spa_pod* param); 207 void addDeviceIndexPairs(const spa_pod* param);
207 208
@@ -213,11 +214,11 @@ index 1a1f705..ee64858 100644
213 bool 214 bool
214 setRouteProps(qint32 routeDevice, const std::function<void*(spa_pod_builder*)>& propsCallback); 215 setRouteProps(qint32 routeDevice, const std::function<void*(spa_pod_builder*)>& propsCallback);
215 216
216diff --git i/src/services/pipewire/node.cpp w/src/services/pipewire/node.cpp 217diff --git c/src/services/pipewire/node.cpp i/src/services/pipewire/node.cpp
217index 3e68149..4721a58 100644 218index 2811833..25e1f8d 100644
218--- i/src/services/pipewire/node.cpp 219--- c/src/services/pipewire/node.cpp
219+++ w/src/services/pipewire/node.cpp 220+++ i/src/services/pipewire/node.cpp
220@@ -145,6 +145,10 @@ void PwNode::initProps(const spa_dict* props) { 221@@ -146,6 +146,10 @@ void PwNode::initProps(const spa_dict* props) {
221 this->type = PwNodeType::VideoSink; 222 this->type = PwNodeType::VideoSink;
222 } else if (strcmp(mediaClass, "Video/Source") == 0) { 223 } else if (strcmp(mediaClass, "Video/Source") == 0) {
223 this->type = PwNodeType::VideoSource; 224 this->type = PwNodeType::VideoSource;
@@ -228,11 +229,11 @@ index 3e68149..4721a58 100644
228 } 229 }
229 } 230 }
230 231
231diff --git i/src/services/pipewire/node.hpp w/src/services/pipewire/node.hpp 232diff --git c/src/services/pipewire/node.hpp i/src/services/pipewire/node.hpp
232index 0d4c92e..ee6f223 100644 233index d96525a..4f44c8d 100644
233--- i/src/services/pipewire/node.hpp 234--- c/src/services/pipewire/node.hpp
234+++ w/src/services/pipewire/node.hpp 235+++ i/src/services/pipewire/node.hpp
235@@ -144,6 +144,8 @@ public: 236@@ -145,6 +145,8 @@ public:
236 // This is equivalent to the media class `Video/Sink` and is composed of the 237 // This is equivalent to the media class `Video/Sink` and is composed of the
237 // @@PwNodeType.Video and @@PwNodeType.Sink flags. 238 // @@PwNodeType.Video and @@PwNodeType.Sink flags.
238 VideoSink = Video | Sink, 239 VideoSink = Video | Sink,
@@ -241,11 +242,11 @@ index 0d4c92e..ee6f223 100644
241 }; 242 };
242 Q_ENUM(Flag); 243 Q_ENUM(Flag);
243 Q_DECLARE_FLAGS(Flags, Flag); 244 Q_DECLARE_FLAGS(Flags, Flag);
244diff --git i/src/services/pipewire/qml.cpp w/src/services/pipewire/qml.cpp 245diff --git c/src/services/pipewire/qml.cpp i/src/services/pipewire/qml.cpp
245index 9efb17e..921d12a 100644 246index e4424c1..407096b 100644
246--- i/src/services/pipewire/qml.cpp 247--- c/src/services/pipewire/qml.cpp
247+++ w/src/services/pipewire/qml.cpp 248+++ i/src/services/pipewire/qml.cpp
248@@ -9,6 +9,9 @@ 249@@ -8,6 +8,9 @@
249 #include <qtypes.h> 250 #include <qtypes.h>
250 #include <qvariant.h> 251 #include <qvariant.h>
251 252
@@ -255,7 +256,7 @@ index 9efb17e..921d12a 100644
255 #include "../../core/model.hpp" 256 #include "../../core/model.hpp"
256 #include "connection.hpp" 257 #include "connection.hpp"
257 #include "defaults.hpp" 258 #include "defaults.hpp"
258@@ -54,6 +57,12 @@ Pipewire::Pipewire(QObject* parent): QObject(parent) { 259@@ -53,6 +56,12 @@ Pipewire::Pipewire(QObject* parent): QObject(parent) {
259 260
260 QObject::connect(&connection->registry, &PwRegistry::nodeAdded, this, &Pipewire::onNodeAdded); 261 QObject::connect(&connection->registry, &PwRegistry::nodeAdded, this, &Pipewire::onNodeAdded);
261 262
@@ -268,7 +269,7 @@ index 9efb17e..921d12a 100644
268 for (auto* link: connection->registry.links.values()) { 269 for (auto* link: connection->registry.links.values()) {
269 this->onLinkAdded(link); 270 this->onLinkAdded(link);
270 } 271 }
271@@ -123,6 +132,19 @@ void Pipewire::onNodeRemoved(QObject* object) { 272@@ -115,6 +124,19 @@ void Pipewire::onNodeRemoved(QObject* object) {
272 this->mNodes.removeObject(iface); 273 this->mNodes.removeObject(iface);
273 } 274 }
274 275
@@ -288,7 +289,7 @@ index 9efb17e..921d12a 100644
288 ObjectModel<PwLinkIface>* Pipewire::links() { return &this->mLinks; } 289 ObjectModel<PwLinkIface>* Pipewire::links() { return &this->mLinks; }
289 290
290 void Pipewire::onLinkAdded(PwLink* link) { 291 void Pipewire::onLinkAdded(PwLink* link) {
291@@ -357,6 +379,8 @@ QVariantMap PwNodeIface::properties() const { 292@@ -352,6 +374,8 @@ QVariantMap PwNodeIface::properties() const {
292 293
293 PwNodeAudioIface* PwNodeIface::audio() const { return this->audioIface; } 294 PwNodeAudioIface* PwNodeIface::audio() const { return this->audioIface; }
294 295
@@ -297,7 +298,7 @@ index 9efb17e..921d12a 100644
297 PwNodeIface* PwNodeIface::instance(PwNode* node) { 298 PwNodeIface* PwNodeIface::instance(PwNode* node) {
298 if (node == nullptr) return nullptr; 299 if (node == nullptr) return nullptr;
299 300
300@@ -481,4 +505,42 @@ void PwObjectTracker::objectDestroyed(QObject* object) { 301@@ -476,4 +500,42 @@ void PwObjectTracker::objectDestroyed(QObject* object) {
301 emit this->objectsChanged(); 302 emit this->objectsChanged();
302 } 303 }
303 304
@@ -340,10 +341,10 @@ index 9efb17e..921d12a 100644
340+} 341+}
341+ 342+
342 } // namespace qs::service::pipewire 343 } // namespace qs::service::pipewire
343diff --git i/src/services/pipewire/qml.hpp w/src/services/pipewire/qml.hpp 344diff --git c/src/services/pipewire/qml.hpp i/src/services/pipewire/qml.hpp
344index e3489a1..e5e1891 100644 345index 93c4844..87cbcb3 100644
345--- i/src/services/pipewire/qml.hpp 346--- c/src/services/pipewire/qml.hpp
346+++ w/src/services/pipewire/qml.hpp 347+++ i/src/services/pipewire/qml.hpp
347@@ -12,11 +12,13 @@ 348@@ -12,11 +12,13 @@
348 #include "../../core/model.hpp" 349 #include "../../core/model.hpp"
349 #include "link.hpp" 350 #include "link.hpp"
@@ -378,13 +379,13 @@ index e3489a1..e5e1891 100644
378@@ -159,7 +164,9 @@ signals: 379@@ -159,7 +164,9 @@ signals:
379 380
380 private slots: 381 private slots:
381 void onNodeAdded(PwNode* node); 382 void onNodeAdded(qs::service::pipewire::PwNode* node);
382+ void onDeviceAdded(PwDevice* node); 383+ void onDeviceAdded(PwDevice* node);
383 void onNodeRemoved(QObject* object); 384 void onNodeRemoved(QObject* object);
384+ void onDeviceRemoved(QObject* object); 385+ void onDeviceRemoved(QObject* object);
385 void onLinkAdded(PwLink* link); 386 void onLinkAdded(qs::service::pipewire::PwLink* link);
386 void onLinkRemoved(QObject* object); 387 void onLinkRemoved(QObject* object);
387 void onLinkGroupAdded(PwLinkGroup* group); 388 void onLinkGroupAdded(qs::service::pipewire::PwLinkGroup* group);
388@@ -167,6 +174,7 @@ private slots: 389@@ -167,6 +174,7 @@ private slots:
389 390
390 private: 391 private:
@@ -454,11 +455,11 @@ index e3489a1..e5e1891 100644
454 ///! A connection between pipewire nodes. 455 ///! A connection between pipewire nodes.
455 /// Note that there is one link per *channel* of a connection between nodes. 456 /// Note that there is one link per *channel* of a connection between nodes.
456 /// You usually want @@PwLinkGroup. 457 /// You usually want @@PwLinkGroup.
457diff --git i/src/services/pipewire/registry.cpp w/src/services/pipewire/registry.cpp 458diff --git c/src/services/pipewire/registry.cpp i/src/services/pipewire/registry.cpp
458index c08fc1d..50c6d7a 100644 459index 4b670b1..4295874 100644
459--- i/src/services/pipewire/registry.cpp 460--- c/src/services/pipewire/registry.cpp
460+++ w/src/services/pipewire/registry.cpp 461+++ i/src/services/pipewire/registry.cpp
461@@ -196,6 +196,7 @@ void PwRegistry::onGlobal( 462@@ -236,6 +236,7 @@ void PwRegistry::onGlobal(
462 device->initProps(props); 463 device->initProps(props);
463 464
464 self->devices.emplace(id, device); 465 self->devices.emplace(id, device);
@@ -466,7 +467,7 @@ index c08fc1d..50c6d7a 100644
466 } 467 }
467 } 468 }
468 469
469@@ -211,6 +212,9 @@ void PwRegistry::onGlobalRemoved(void* data, quint32 id) { 470@@ -251,6 +252,9 @@ void PwRegistry::onGlobalRemoved(void* data, quint32 id) {
470 } else if (auto* node = self->nodes.value(id)) { 471 } else if (auto* node = self->nodes.value(id)) {
471 self->nodes.remove(id); 472 self->nodes.remove(id);
472 node->safeDestroy(); 473 node->safeDestroy();
@@ -476,15 +477,15 @@ index c08fc1d..50c6d7a 100644
476 } 477 }
477 } 478 }
478 479
479diff --git i/src/services/pipewire/registry.hpp w/src/services/pipewire/registry.hpp 480diff --git c/src/services/pipewire/registry.hpp i/src/services/pipewire/registry.hpp
480index 8473f04..87e0766 100644 481index ec0a9ea..c9be65a 100644
481--- i/src/services/pipewire/registry.hpp 482--- c/src/services/pipewire/registry.hpp
482+++ w/src/services/pipewire/registry.hpp 483+++ i/src/services/pipewire/registry.hpp
483@@ -132,6 +132,7 @@ public: 484@@ -133,6 +133,7 @@ public:
484 485
485 signals: 486 signals:
486 void nodeAdded(PwNode* node); 487 void nodeAdded(qs::service::pipewire::PwNode* node);
487+ void deviceAdded(PwDevice* node); 488+ void deviceAdded(PwDevice* node);
488 void linkAdded(PwLink* link); 489 void linkAdded(qs::service::pipewire::PwLink* link);
489 void linkGroupAdded(PwLinkGroup* group); 490 void linkGroupAdded(qs::service::pipewire::PwLinkGroup* group);
490 void metadataAdded(PwMetadata* metadata); 491 void metadataAdded(qs::service::pipewire::PwMetadata* metadata);