summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--accounts/gkleen@sif/default.nix57
-rw-r--r--accounts/gkleen@sif/hyprland.nix2
-rw-r--r--accounts/gkleen@sif/systemd.nix76
3 files changed, 81 insertions, 54 deletions
diff --git a/accounts/gkleen@sif/default.nix b/accounts/gkleen@sif/default.nix
index 47d2212b..e6cbd77d 100644
--- a/accounts/gkleen@sif/default.nix
+++ b/accounts/gkleen@sif/default.nix
@@ -88,55 +88,7 @@ let
88 exec -a "$1" "$@" 88 exec -a "$1" "$@"
89 ''; 89 '';
90 90
91 lockCommand = pkgs.writeShellScript "gtklock" '' 91 lockCommand = "${config.systemd.package}/bin/systemctl --user start gtklock.service";
92 set -x
93
94 export PATH="${lib.makeBinPath [cfg.programs.wpaperd.package pkgs.jq pkgs.coreutils pkgs.gtklock pkgs.imagemagick pkgs.findutils pkgs.libsForQt5.qt5.qttools pkgs.systemd]}:$PATH"
95
96 qdbus org.keepassxc.KeePassXC.MainWindow /keepassxc org.keepassxc.KeePassXC.MainWindow.lockAllDatabases
97 systemctl --user --no-block stop gpg-agent.service
98
99 tmpDir=$(mktemp -d --tmpdir="$RUNTIME_DIRECTORY" "gtklock.$(date -uIs).XXXXXXXX")
100
101 args=()
102
103 cp --no-preserve=mode ${pkgs.writeText "gtklock.css" ''
104 #window-box {
105 padding: 64px;
106 /* border: 1px solid black; */
107 border-radius: 4px;
108 box-shadow: rgba(0, 0, 0, 0.8) 0px 4px 12px;
109 /* background-color: white; */
110 background-color: rgba(0, 0, 0, 0.5);
111 }
112 ''} "$tmpDir"/style.css
113
114 monitors=()
115 while IFS= read -r entry; do
116 path=$(jq -r ".path" <<<"$entry")
117 [[ -z "$path" || ! -f "$path" ]] && continue
118 display=$(jq -r ".display" <<<"$entry")
119 monitors+=("$display")
120 # ln -s "$path" "$tmpDir"/"$display"."''${path##*.}"
121 magick "$path" -filter Gaussian -resize 6.25% -define filter:sigma=2.5 -resize 1600% "$tmpDir"/"$display"."''${path##*.}" &
122 done < <(wpaperctl all-wallpapers -j | jq -c ".[]")
123 wait
124 for monitor in "''${monitors[@]}"; do
125 path=$(find "$tmpDir" -name "$monitor"'.*')
126 cat >>"$tmpDir"/style.css <<EOF
127 window#''${monitor} {
128 background-image: url("''${path}");
129 background-repeat: no-repeat;
130 background-size: 100% 100%;
131 background-origin: content-box;
132 }
133 EOF
134 done
135 args+=("-s" "$tmpDir"/style.css)
136
137 args+=("$@")
138 exec gtklock "''${args[@]}"
139 '';
140in { 92in {
141 imports = with flake.nixosModules.userProfiles.${userName}; [ 93 imports = with flake.nixosModules.userProfiles.${userName}; [
142 mpv yt-dlp (args: import ./xcompose.nix (inputs // args)) 94 mpv yt-dlp (args: import ./xcompose.nix (inputs // args))
@@ -659,16 +611,15 @@ in {
659 swayidle = { 611 swayidle = {
660 enable = true; 612 enable = true;
661 events = [ 613 events = [
662 { event = "before-sleep"; command = "${lockCommand} -d"; } 614 { event = "before-sleep"; command = lockCommand; }
663 { event = "after-resume"; command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on"; } 615 { event = "after-resume"; command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on"; }
664 { event = "lock"; command = "${lockCommand} -d"; } 616 { event = "lock"; command = lockCommand; }
665 ]; 617 ];
666 timeouts = [ 618 timeouts = [
667 { timeout = 300; 619 { timeout = 300;
668 command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off"; 620 command = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off";
669 resumeCommand = "${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on";
670 } 621 }
671 { timeout = 330; command = "${lockCommand} -d"; } 622 { timeout = 330; command = lockCommand; }
672 ]; 623 ];
673 extraArgs = [ 624 extraArgs = [
674 "idlehint" "30" 625 "idlehint" "30"
diff --git a/accounts/gkleen@sif/hyprland.nix b/accounts/gkleen@sif/hyprland.nix
index 23cbc972..15491c6f 100644
--- a/accounts/gkleen@sif/hyprland.nix
+++ b/accounts/gkleen@sif/hyprland.nix
@@ -72,6 +72,8 @@ in {
72 disable_hyprland_logo = true; 72 disable_hyprland_logo = true;
73 disable_splash_rendering = true; 73 disable_splash_rendering = true;
74 focus_on_activate = true; 74 focus_on_activate = true;
75 mouse_move_enables_dpms = true;
76 key_press_enables_dpms = true;
75 }; 77 };
76 78
77 cursor = { 79 cursor = {
diff --git a/accounts/gkleen@sif/systemd.nix b/accounts/gkleen@sif/systemd.nix
index be016b09..613d034a 100644
--- a/accounts/gkleen@sif/systemd.nix
+++ b/accounts/gkleen@sif/systemd.nix
@@ -1,7 +1,7 @@
1{ pkgs, lib, config, userName, ... }: 1{ pkgs, lib, config, userName, ... }:
2let 2let
3 inherit (lib) listToAttrs nameValuePair; 3 inherit (lib) listToAttrs nameValuePair;
4 4
5 xmobar = import ./xmobar pkgs.haskellPackages; 5 xmobar = import ./xmobar pkgs.haskellPackages;
6 cfg = config.home-manager.users.${userName}; 6 cfg = config.home-manager.users.${userName};
7 7
@@ -204,6 +204,80 @@ in {
204 WatchdogSec = "2s"; 204 WatchdogSec = "2s";
205 }; 205 };
206 }; 206 };
207 polkit-kde-authentication-agent-1 = {
208 Install = {
209 WantedBy = ["graphical-session.target"];
210 };
211 Unit = {
212 PartOf = ["graphical-session.target"];
213 Requires = ["graphical-session-pre.target"];
214 After = ["graphical-session-pre.target"];
215 };
216 Service = {
217 ExecStart = "${pkgs.kdePackages.polkit-kde-agent-1}/libexec/polkit-kde-authentication-agent-1";
218 Restart = "on-failure";
219 };
220 };
221 gtklock = {
222 Unit = {
223 Requisite = ["graphical-session.target"];
224 PartOf = ["graphical-session.target"];
225 };
226 Service = {
227 Type = "notify";
228 RuntimeDirectory = "gtklock";
229 CacheDirectory = "gtklock";
230 ExecStartPre = [
231 "${pkgs.libsForQt5.qt5.qttools.bin}/bin/qdbus org.keepassxc.KeePassXC.MainWindow /keepassxc org.keepassxc.KeePassXC.MainWindow.lockAllDatabases"
232 "${config.systemd.package}/bin/systemctl --user stop gpg-agent.service"
233 (pkgs.writeShellScript "generate-css" ''
234 set -x
235 export PATH="${lib.makeBinPath [cfg.programs.wpaperd.package pkgs.jq pkgs.coreutils pkgs.imagemagick pkgs.findutils]}:$PATH"
236
237 declare -A monitors
238 monitors=()
239 while IFS= read -r entry; do
240 path=$(jq -r ".path" <<<"$entry")
241 [[ -z "$path" || ! -f "$path" ]] && continue
242 blurred_path="$CACHE_DIRECTORY"/"$(b2sum -l 128 <<<"$path" | cut -d' ' -f1)"."''${path##*.}"
243 monitor=$(jq -r ".display" <<<"$entry")
244 if [[ ! -f "$blurred_path" ]]; then
245 mkdir -p "$(dirname "$blurred_path")"
246 magick "$path" -filter Gaussian -resize 6.25% -define filter:sigma=2.5 -resize 1600% "$blurred_path" &
247 fi
248 monitors+=([$monitor]="$blurred_path")
249 done < <(wpaperctl all-wallpapers -j | jq -c ".[]")
250 wait
251
252 cp --no-preserve=mode ${pkgs.writeText "gtklock.css" ''
253 #window-box {
254 padding: 64px;
255 /* border: 1px solid black; */
256 border-radius: 4px;
257 box-shadow: rgba(0, 0, 0, 0.8) 0px 4px 12px;
258 /* background-color: white; */
259 background-color: rgba(0, 0, 0, 0.5);
260 }
261 ''} "$RUNTIME_DIRECTORY"/style.css
262 for monitor in "''${!monitors[@]}"; do
263 cat >>"$RUNTIME_DIRECTORY"/style.css <<EOF
264 window#''${monitor} {
265 background-image: url("''${monitors[$monitor]}");
266 background-repeat: no-repeat;
267 background-size: 100% 100%;
268 background-origin: content-box;
269 }
270 EOF
271 done
272 '')
273 ];
274 NotifyAccess = "all";
275 ExecStart = ''${lib.getExe pkgs.gtklock} -s "''${RUNTIME_DIRECTORY}/style.css" -L ${pkgs.writeShellScript "after-lock" ''
276 ${cfg.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off
277 ${config.systemd.package}/bin/systemd-notify --ready
278 ''}'';
279 };
280 };
207 } // listToAttrs (map ({host, port}: nameValuePair "proxy-to-autossh-socks@${toString port}" { 281 } // listToAttrs (map ({host, port}: nameValuePair "proxy-to-autossh-socks@${toString port}" {
208 Unit = { 282 Unit = {
209 Requires = ["autossh-socks@${host}:${toString (port + 1)}.service" "proxy-to-autossh-socks@${toString port}.socket"]; 283 Requires = ["autossh-socks@${host}:${toString (port + 1)}.service" "proxy-to-autossh-socks@${toString port}.socket"];