xautolock: Key is now a toggle
This commit is contained in:
parent
42034eb5d8
commit
a489830949
|
@ -5,7 +5,7 @@
|
||||||
./autorandr
|
./autorandr
|
||||||
./background
|
./background
|
||||||
./browser
|
./browser
|
||||||
./frobar
|
./frobar/module.nix
|
||||||
./i3.nix
|
./i3.nix
|
||||||
./lock
|
./lock
|
||||||
./mpd
|
./mpd
|
||||||
|
|
|
@ -1,48 +1,21 @@
|
||||||
{ pkgs ? import <nixpkgs> { config = { }; overlays = [ ]; }, lib, config, ... }:
|
{ pkgs ? import <nixpkgs> { config = { }; overlays = [ ]; }, ... }:
|
||||||
# Tried using pyproject.nix but mpd2 dependency wouldn't resolve,
|
# Tried using pyproject.nix but mpd2 dependency wouldn't resolve,
|
||||||
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
||||||
let
|
pkgs.python3Packages.buildPythonApplication {
|
||||||
frobar = pkgs.python3Packages.buildPythonApplication {
|
pname = "frobar";
|
||||||
pname = "frobar";
|
version = "2.0";
|
||||||
version = "2.0";
|
|
||||||
|
|
||||||
runtimeInputs = with pkgs; [ lemonbar-xft wirelesstools ];
|
runtimeInputs = with pkgs; [ lemonbar-xft wirelesstools ];
|
||||||
propagatedBuildInputs = with pkgs.python3Packages; [
|
propagatedBuildInputs = with pkgs.python3Packages; [
|
||||||
coloredlogs
|
coloredlogs
|
||||||
notmuch
|
notmuch
|
||||||
i3ipc
|
i3ipc
|
||||||
mpd2
|
mpd2
|
||||||
psutil
|
psutil
|
||||||
pulsectl
|
pulsectl
|
||||||
pyinotify
|
pyinotify
|
||||||
];
|
];
|
||||||
makeWrapperArgs = [ "--prefix PATH : ${pkgs.lib.makeBinPath (with pkgs; [ lemonbar-xft wirelesstools ])}" ];
|
makeWrapperArgs = [ "--prefix PATH : ${pkgs.lib.makeBinPath (with pkgs; [ lemonbar-xft wirelesstools ])}" ];
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
config = lib.mkIf config.frogeye.desktop.xorg {
|
|
||||||
xsession.windowManager.i3.config.bars = [ ];
|
|
||||||
programs.autorandr.hooks.postswitch = {
|
|
||||||
frobar = "${pkgs.systemd}/bin/systemctl --user restart frobar";
|
|
||||||
};
|
|
||||||
systemd.user.services.frobar = {
|
|
||||||
Unit = {
|
|
||||||
Description = "frobar";
|
|
||||||
After = [ "graphical-session-pre.target" ];
|
|
||||||
PartOf = [ "graphical-session.target" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
# Wait for i3 to start. Can't use ExecStartPre because otherwise it blocks graphical-session.target, and there's nothing i3/systemd
|
|
||||||
# TODO Do that better
|
|
||||||
ExecStart = ''${pkgs.bash}/bin/bash -c "while ! ${pkgs.i3}/bin/i3-msg; do ${pkgs.coreutils}/bin/sleep 1; done; ${frobar}/bin/frobar"'';
|
|
||||||
};
|
|
||||||
|
|
||||||
Install = { WantedBy = [ "graphical-session.target" ]; };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
# TODO Connection with i3 is lost on start sometimes, more often than with Arch?
|
|
||||||
# TODO Restore ability to build frobar with nix-build
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ def run():
|
||||||
NETWORK_THEME = 5
|
NETWORK_THEME = 5
|
||||||
# TODO Disk space provider
|
# TODO Disk space provider
|
||||||
# TODO Screen (connected, autorandr configuration, bbswitch) provider
|
# TODO Screen (connected, autorandr configuration, bbswitch) provider
|
||||||
|
Bar.addSectionAll(XautolockProvider(theme=PERIPHERAL_THEME), BarGroupType.RIGHT)
|
||||||
Bar.addSectionAll(PulseaudioProvider(theme=PERIPHERAL_THEME), BarGroupType.RIGHT)
|
Bar.addSectionAll(PulseaudioProvider(theme=PERIPHERAL_THEME), BarGroupType.RIGHT)
|
||||||
Bar.addSectionAll(RfkillProvider(theme=PERIPHERAL_THEME), BarGroupType.RIGHT)
|
Bar.addSectionAll(RfkillProvider(theme=PERIPHERAL_THEME), BarGroupType.RIGHT)
|
||||||
Bar.addSectionAll(NetworkProvider(theme=NETWORK_THEME), BarGroupType.RIGHT)
|
Bar.addSectionAll(NetworkProvider(theme=NETWORK_THEME), BarGroupType.RIGHT)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import datetime
|
||||||
import ipaddress
|
import ipaddress
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import random
|
import random
|
||||||
import socket
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
|
@ -224,6 +225,27 @@ class BatteryProvider(AlertingSection, PeriodicUpdater):
|
||||||
self.changeInterval(5)
|
self.changeInterval(5)
|
||||||
|
|
||||||
|
|
||||||
|
class XautolockProvider(Section, InotifyUpdater):
|
||||||
|
ICON = ""
|
||||||
|
|
||||||
|
def fetcher(self) -> str | None:
|
||||||
|
with open(self.path) as fd:
|
||||||
|
state = fd.read().strip()
|
||||||
|
if state == "enabled":
|
||||||
|
return None
|
||||||
|
elif state == "disabled":
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
return "?"
|
||||||
|
|
||||||
|
def __init__(self, theme=None):
|
||||||
|
Section.__init__(self, theme=theme)
|
||||||
|
InotifyUpdater.__init__(self)
|
||||||
|
# TODO XDG
|
||||||
|
self.path = os.path.realpath(os.path.expanduser("~/.cache/xautolock"))
|
||||||
|
self.addPath(self.path)
|
||||||
|
|
||||||
|
|
||||||
class PulseaudioProvider(StatefulSection, ThreadedUpdater):
|
class PulseaudioProvider(StatefulSection, ThreadedUpdater):
|
||||||
NUMBER_STATES = 3
|
NUMBER_STATES = 3
|
||||||
DEFAULT_STATE = 1
|
DEFAULT_STATE = 1
|
||||||
|
|
25
hm/desktop/frobar/module.nix
Normal file
25
hm/desktop/frobar/module.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
xsession.windowManager.i3.config.bars = [ ];
|
||||||
|
programs.autorandr.hooks.postswitch = {
|
||||||
|
frobar = "${pkgs.systemd}/bin/systemctl --user restart frobar";
|
||||||
|
};
|
||||||
|
systemd.user.services.frobar = {
|
||||||
|
Unit = {
|
||||||
|
Description = "frobar";
|
||||||
|
After = [ "graphical-session-pre.target" ];
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
# Wait for i3 to start. Can't use ExecStartPre because otherwise it blocks graphical-session.target, and there's nothing i3/systemd
|
||||||
|
# TODO Do that better
|
||||||
|
ExecStart = ''${pkgs.bash}/bin/bash -c "while ! ${pkgs.i3}/bin/i3-msg; do ${pkgs.coreutils}/bin/sleep 1; done; ${pkgs.callPackage ./. {}}/bin/frobar"'';
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = { WantedBy = [ "graphical-session.target" ]; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# TODO Connection with i3 is lost on start sometimes, more often than with Arch?
|
|
@ -11,6 +11,7 @@ let
|
||||||
'';
|
'';
|
||||||
lockPng = pkgs.runCommand "lock.png" { } "${pkgs.imagemagick}/bin/convert ${lockSvg} $out";
|
lockPng = pkgs.runCommand "lock.png" { } "${pkgs.imagemagick}/bin/convert ${lockSvg} $out";
|
||||||
mod = config.xsession.windowManager.i3.config.modifier;
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
|
xautolockState = "${config.xdg.cacheHome}/xautolock";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = lib.mkIf config.frogeye.desktop.xorg {
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
@ -43,12 +44,27 @@ in
|
||||||
keybindings = {
|
keybindings = {
|
||||||
# Screen off commands
|
# Screen off commands
|
||||||
"${mod}+F1" = "--release exec --no-startup-id ${pkgs.xorg.xset}/bin/xset dpms force off";
|
"${mod}+F1" = "--release exec --no-startup-id ${pkgs.xorg.xset}/bin/xset dpms force off";
|
||||||
"${mod}+F4" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -disable";
|
# Toggle to save on buttons
|
||||||
"${mod}+F5" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -enable";
|
# xautolock -toggle doesn't allow to read state.
|
||||||
|
# Writing into a file also allows frobar to display a lock icon
|
||||||
|
"${mod}+F5" = "exec --no-startup-id ${pkgs.writeShellScript "xautolock-toggle" ''
|
||||||
|
state="$(cat "${xautolockState}")"
|
||||||
|
if [ "$state" = "disabled" ]
|
||||||
|
then
|
||||||
|
${pkgs.xautolock}/bin/xautolock -enable
|
||||||
|
echo enabled > ${xautolockState}
|
||||||
|
else
|
||||||
|
${pkgs.xautolock}/bin/xautolock -disable
|
||||||
|
echo disabled > ${xautolockState}
|
||||||
|
fi
|
||||||
|
''}";
|
||||||
};
|
};
|
||||||
startup = [
|
startup = [
|
||||||
# Stop screen after 10 minutes, 1 minutes after lock it
|
# Stop screen after 10 minutes, 1 minutes after lock it
|
||||||
{ notification = false; command = "${pkgs.xautolock}/bin/xautolock -time 10 -locker '${pkgs.xorg.xset}/bin/xset dpms force standby' -killtime 1 -killer xlock"; }
|
{ notification = false; command = "${pkgs.writeShellScript "xautolock-start" ''
|
||||||
|
echo enabled > ${xautolockState}
|
||||||
|
${pkgs.xautolock}/bin/xautolock -time 10 -locker '${pkgs.xorg.xset}/bin/xset dpms force standby' -killtime 1 -killer xlock
|
||||||
|
''}"; }
|
||||||
# services.screen-locker.xautolock is hardcoded to use systemd for -locker (doesn't even work...)
|
# services.screen-locker.xautolock is hardcoded to use systemd for -locker (doesn't even work...)
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue