From 10b7a66bdf7181026914e753c5260a5adef04214 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Thu, 13 Feb 2025 20:02:34 +0100 Subject: ... --- accounts/gkleen@sif/niri/default.nix | 27 +++++++++------ flake.lock | 36 ++++++++++---------- installer/default.nix | 4 +++ overlays/keepassxc/database-open-dialog.patch | 47 ++++++++++++++------------- overlays/keepassxc/default.nix | 2 +- 5 files changed, 65 insertions(+), 51 deletions(-) diff --git a/accounts/gkleen@sif/niri/default.nix b/accounts/gkleen@sif/niri/default.nix index 8b95f00f..bbfc28d6 100644 --- a/accounts/gkleen@sif/niri/default.nix +++ b/accounts/gkleen@sif/niri/default.nix @@ -105,6 +105,21 @@ let }; with-unnamed-workspace-action = config.lib.niri.actions.spawn (lib.getExe with_unnamed_workspace); + with_empty_unnamed_workspace = pkgs.writeShellApplication { + name = "with-empty-unnamed-workspace"; + runtimeInputs = [ niri pkgs.gojq pkgs.socat ]; + text = '' + action="$1" + shift + + workspaces_json="$(niri msg -j workspaces)" + active_output="$(jq '.[] | select(.is_focused) | .output' <<<"$workspaces_json")" + target_workspace_id="$(jq --argjson active_output "$active_output" 'map(select(.active_window_id == null and .name == null and .output == $active_output)) | sort_by(.idx) | .[0].id' <<<"$workspaces_json")" + jq --argjson workspace_id "$target_workspace_id" -nc "$action" | tee /dev/stderr | socat STDIO "$NIRI_SOCKET" + ''; + }; + with-empty-unnamed-workspace-action = config.lib.niri.actions.spawn (lib.getExe with_empty_unnamed_workspace); + with_select_window = pkgs.writeShellApplication { name = "with-select-window"; runtimeInputs = [ niri pkgs.gojq pkgs.socat config.programs.fuzzel.package pkgs.gawk ]; @@ -821,16 +836,8 @@ in { "Mod+Period".action = spawn makoctl "menu" (lib.getExe config.programs.fuzzel.package) "--dmenu"; "Mod+Comma".action = spawn makoctl "restore"; - "Mod+Control+W".action = spawn (lib.getExe (pkgs.writeShellApplication { - name = "focus-empty-unnamed-workspace"; - runtimeInputs = [ niri pkgs.gojq pkgs.socat ]; - text = '' - workspaces_json="$(niri msg -j workspaces)" - active_output="$(jq '.[] | select(.is_focused) | .output' <<<"$workspaces_json")" - target_workspace_id="$(jq --argjson active_output "$active_output" 'map(select(.active_window_id == null and .name == null and .output == $active_output)) | sort_by(.idx) | .[0].id' <<<"$workspaces_json")" - jq --argjson workspace_id "$target_workspace_id" -nc '{"Action":{"FocusWorkspace":{"reference":{"Id": $workspace_id}}}}' | tee /dev/stderr | socat STDIO "$NIRI_SOCKET" - ''; - })); + "Mod+Control+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"FocusWorkspace\":{\"reference\":{\"Id\": $workspace_id}}}}"; + "Mod+Control+Shift+W".action = with-empty-unnamed-workspace-action "{\"Action\":{\"MoveColumnToWorkspace\":{\"reference\":{\"Id\": $workspace_id}}}}"; })) (map ({ name, selector, spawn, key, ...}: if key != null && selector != null && spawn != null then bind key { action = focus-or-spawn-action selector name spawn; } else null) cfg.scratchspaces) ] diff --git a/flake.lock b/flake.lock index bbd62e0e..99ea7468 100644 --- a/flake.lock +++ b/flake.lock @@ -397,11 +397,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1739206396, - "narHash": "sha256-dfU3l47sxFQbqLe5R9um//V5hplv/MhSwsZJR7JzBrg=", + "lastModified": 1739339370, + "narHash": "sha256-kvuVhsaVa8j0P9Genf96CLX2cNjForojX5aB1BN+Bwk=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "9f15e7ace2dea798ce3490d2f723095ad4cce0d4", + "rev": "498e8bbc149b38fd14d4ff7fbf31c49fdaa23282", "type": "github" }, "original": { @@ -431,11 +431,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1739201373, - "narHash": "sha256-6upEicgdJH3JaS1oXS+wsgLToU14XL8/aOyL2KcS3KY=", + "lastModified": 1739336386, + "narHash": "sha256-H9E3lfJibzWwqV9C1pI81uhav1RLWRA8JbH3ADv3X/4=", "owner": "YaLTeR", "repo": "niri", - "rev": "20769b4c2f843566880f020f117e7bde36edc332", + "rev": "7e552333a993e83a2dba52392109617e486f5f60", "type": "github" }, "original": { @@ -630,11 +630,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1739055578, - "narHash": "sha256-2MhC2Bgd06uI1A0vkdNUyDYsMD0SLNGKtD8600mZ69A=", + "lastModified": 1739206421, + "narHash": "sha256-PwQASeL2cGVmrtQYlrBur0U20Xy07uSWVnFup2PHnDs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a45fa362d887f4d4a7157d95c28ca9ce2899b70e", + "rev": "44534bc021b85c8d78e465021e21f33b856e2540", "type": "github" }, "original": { @@ -678,11 +678,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1739020877, - "narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=", + "lastModified": 1739214665, + "narHash": "sha256-26L8VAu3/1YRxS8MHgBOyOM8xALdo6N0I04PgorE7UM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a79cfe0ebd24952b580b1cf08cd906354996d547", + "rev": "64e75cd44acf21c7933d61d7721e812eac1b5a0a", "type": "github" }, "original": { @@ -891,11 +891,11 @@ ] }, "locked": { - "lastModified": 1738291974, - "narHash": "sha256-wkwYJc8cKmmQWUloyS9KwttBnja2ONRuJQDEsmef320=", + "lastModified": 1739262228, + "narHash": "sha256-7JAGezJ0Dn5qIyA2+T4Dt/xQgAbhCglh6lzCekTVMeU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "4c1251904d8a08c86ac6bc0d72cc09975e89aef7", + "rev": "07af005bb7d60c7f118d9d9f5530485da5d1e975", "type": "github" }, "original": { @@ -1000,11 +1000,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1737837494, - "narHash": "sha256-wIMowP8Juas4ZwMRcpc+58sZ0kKTDu8fm13THPmv/F8=", + "lastModified": 1739246919, + "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "3944c9a0e40e5629f16ad023bbc90dac80d35a0f", + "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", "type": "github" }, "original": { diff --git a/installer/default.nix b/installer/default.nix index cd1ee064..ec47832a 100644 --- a/installer/default.nix +++ b/installer/default.nix @@ -57,6 +57,10 @@ with lib; system.disableInstallerTools = false; + xdg.autostart.enable = lib.mkForce false; + xdg.icons.enable = lib.mkForce false; + xdg.mime.enable = lib.mkForce false; + systemd.sysusers.enable = false; system.machine-id.generate.enable = false; system.stateVersion = config.system.nixos.release; # No state in installer diff --git a/overlays/keepassxc/database-open-dialog.patch b/overlays/keepassxc/database-open-dialog.patch index 4916dc1b..dff84846 100644 --- a/overlays/keepassxc/database-open-dialog.patch +++ b/overlays/keepassxc/database-open-dialog.patch @@ -1,7 +1,8 @@ -diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/BrowserService.cpp ---- source.orig/src/browser/BrowserService.cpp 2025-01-27 20:55:04.128198171 +0100 -+++ source/src/browser/BrowserService.cpp 2025-01-27 21:16:07.068959077 +0100 -@@ -249,7 +249,7 @@ +diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp +index 60412b5a..c0497d91 100644 +--- a/src/browser/BrowserService.cpp ++++ b/src/browser/BrowserService.cpp +@@ -249,7 +249,7 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName) return result; } @@ -10,7 +11,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse tr("KeePassXC - Create a new group"), tr("A request for creating a new group \"%1\" has been received.\n" "Do you want to create this group?\n") -@@ -422,7 +422,7 @@ +@@ -422,7 +422,7 @@ QList BrowserService::confirmEntries(QList& entriesToConfirm, m_dialogActive = true; updateWindowState(); @@ -19,7 +20,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &accessControlDialog, SLOT(reject())); -@@ -512,7 +512,7 @@ +@@ -512,7 +512,7 @@ QString BrowserService::storeKey(const QString& key) QString id; do { @@ -28,7 +29,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse connect(m_currentDatabaseWidget, SIGNAL(databaseLockRequested()), &keyDialog, SLOT(reject())); keyDialog.setWindowTitle(tr("KeePassXC - New key association request")); keyDialog.setLabelText(tr("You have received an association request for the following database:\n%1\n\n" -@@ -535,7 +535,7 @@ +@@ -535,7 +535,7 @@ QString BrowserService::storeKey(const QString& key) contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id); if (contains) { @@ -37,7 +38,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse tr("KeePassXC - Overwrite existing key?"), tr("A shared encryption key with the name \"%1\" " "already exists.\nDo you want to overwrite it?") -@@ -595,7 +595,7 @@ +@@ -595,7 +595,7 @@ QJsonObject BrowserService::showPasskeysRegisterPrompt(const QJsonObject& public const auto existingEntries = getPasskeyEntriesWithUserHandle(rpId, userId, keyList); raiseWindow(); @@ -46,7 +47,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse confirmDialog.registerCredential(username, rpId, existingEntries, timeout); auto dialogResult = confirmDialog.exec(); -@@ -612,7 +612,7 @@ +@@ -612,7 +612,7 @@ QJsonObject BrowserService::showPasskeysRegisterPrompt(const QJsonObject& public // If no entry is selected, show the import dialog for manual entry selection auto selectedEntry = confirmDialog.getSelectedEntry(); if (!selectedEntry) { @@ -55,7 +56,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse const auto result = passkeyImporter.showImportDialog(db, nullptr, origin, -@@ -683,7 +683,7 @@ +@@ -683,7 +683,7 @@ QJsonObject BrowserService::showPasskeysAuthenticationPrompt(const QJsonObject& const auto timeout = publicKeyOptions["timeout"].toInt(); raiseWindow(); @@ -64,7 +65,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse confirmDialog.authenticateCredential(entries, rpId, timeout); auto dialogResult = confirmDialog.exec(); if (dialogResult == QDialog::Accepted) { -@@ -760,7 +760,7 @@ +@@ -760,7 +760,7 @@ void BrowserService::addPasskeyToEntry(Entry* entry, // Ask confirmation if entry already contains a Passkey if (entry->hasPasskey()) { @@ -73,7 +74,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse tr("KeePassXC - Update passkey"), tr("Entry already has a passkey.\nDo you want to overwrite the passkey in %1 - %2?") .arg(entry->title(), passkeyUtils()->getUsernameFromEntry(entry)), -@@ -873,7 +873,7 @@ +@@ -873,7 +873,7 @@ bool BrowserService::updateEntry(const EntryParameters& entryParameters, const Q MessageBox::Button dialogResult = MessageBox::No; if (!browserSettings()->alwaysAllowUpdate()) { raiseWindow(); @@ -82,7 +83,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse tr("KeePassXC - Update Entry"), tr("Do you want to update the information in %1 - %2?") .arg(QUrl(entryParameters.siteUrl).host(), username), -@@ -909,7 +909,7 @@ +@@ -909,7 +909,7 @@ bool BrowserService::deleteEntry(const QString& uuid) return false; } @@ -91,7 +92,7 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse tr("KeePassXC - Delete entry"), tr("A request for deleting entry \"%1\" has been received.\n" "Do you want to delete the entry?\n") -@@ -1536,7 +1536,7 @@ +@@ -1536,7 +1536,7 @@ QSharedPointer BrowserService::selectedDatabase() } } @@ -100,10 +101,11 @@ diff -u3 -r source.orig/src/browser/BrowserService.cpp source/src/browser/Browse int openDatabaseCount = browserEntrySaveDialog.setItems(databaseWidgets, m_currentDatabaseWidget); if (openDatabaseCount > 1) { int res = browserEntrySaveDialog.exec(); -diff -u3 -r source.orig/src/fdosecrets/objects/Prompt.cpp source/src/fdosecrets/objects/Prompt.cpp ---- source.orig/src/fdosecrets/objects/Prompt.cpp 2025-01-27 20:55:04.135942791 +0100 -+++ source/src/fdosecrets/objects/Prompt.cpp 2025-01-27 21:01:37.166710935 +0100 -@@ -313,7 +313,7 @@ +diff --git a/src/fdosecrets/objects/Prompt.cpp b/src/fdosecrets/objects/Prompt.cpp +index e89cd499..347c98b8 100644 +--- a/src/fdosecrets/objects/Prompt.cpp ++++ b/src/fdosecrets/objects/Prompt.cpp +@@ -313,7 +313,7 @@ namespace FdoSecrets if (!entries.isEmpty()) { QString app = tr("%1 (PID: %2)").arg(client->name()).arg(client->pid()); auto ac = new AccessControlDialog( @@ -112,10 +114,11 @@ diff -u3 -r source.orig/src/fdosecrets/objects/Prompt.cpp source/src/fdosecrets/ connect(ac, &AccessControlDialog::finished, this, &UnlockPrompt::itemUnlockFinished); connect(ac, &AccessControlDialog::finished, ac, &AccessControlDialog::deleteLater); ac->open(); -diff -u3 -r source.orig/src/gui/DatabaseTabWidget.cpp source/src/gui/DatabaseTabWidget.cpp ---- source.orig/src/gui/DatabaseTabWidget.cpp 2025-01-27 20:55:04.134589500 +0100 -+++ source/src/gui/DatabaseTabWidget.cpp 2025-01-27 21:07:09.785284837 +0100 -@@ -41,7 +41,7 @@ +diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp +index 805d4eab..4836199e 100644 +--- a/src/gui/DatabaseTabWidget.cpp ++++ b/src/gui/DatabaseTabWidget.cpp +@@ -41,7 +41,7 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) : QTabWidget(parent) , m_dbWidgetStateSync(new DatabaseWidgetStateSync(this)) , m_dbWidgetPendingLock(nullptr) diff --git a/overlays/keepassxc/default.nix b/overlays/keepassxc/default.nix index 25429a66..46b3a459 100644 --- a/overlays/keepassxc/default.nix +++ b/overlays/keepassxc/default.nix @@ -1,7 +1,7 @@ { final, prev, ... }: { keepassxc = prev.keepassxc.overrideAttrs (oldAttrs: { - patches = (oldAttrs.patches or []) ++ [ + patches = (oldAttrs.patches or []) ++ prev.lib.optional (prev.lib.versionAtLeast oldAttrs.version "2.7.9") [ ./database-open-dialog.patch ]; }); -- cgit v1.2.3