Compare commits
4 Commits
6e0f938e65
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 8be92183bb | |||
| 4ea2421734 | |||
| fa2c62e2f4 | |||
| a6ff616c2d |
+1
-1
Submodule azos-core updated: e30f21ec1c...ca609ac0d2
@@ -5,15 +5,51 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
options.azos.headphones-whmx4000.enable = lib.mkOption {
|
options.azos.headphones = {
|
||||||
default = true;
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
};
|
};
|
||||||
config = lib.mkIf config.azos.headphones-whmx4000.enable {
|
devices = lib.mkOption {
|
||||||
home.packages = [
|
default = [];
|
||||||
(pkgs.writeShellScriptBin
|
type = lib.types.listOf (lib.types.submodule {
|
||||||
"azos-connect-headphones-whmx4000"
|
options = {
|
||||||
"echo \"connect AC:80:0A:AF:E1:C2\" | bluetoothctl")
|
mac = lib.mkOption {type = lib.types.str;};
|
||||||
|
name = lib.mkOption {type = lib.types.str;};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
description = "Headphone devices; first entry is the default connect target.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.azos.headphones.enable {
|
||||||
|
home.packages = let
|
||||||
|
deviceEntries =
|
||||||
|
lib.concatMapStrings
|
||||||
|
(d: " ${lib.escapeShellArg "${d.mac} ${d.name}"}\n")
|
||||||
|
config.azos.headphones.devices;
|
||||||
|
defaultMac =
|
||||||
|
if config.azos.headphones.devices == []
|
||||||
|
then ""
|
||||||
|
else (lib.head config.azos.headphones.devices).mac;
|
||||||
|
in [
|
||||||
|
(pkgs.writeShellScriptBin "azos-connect-headphones" ''
|
||||||
|
DEVICES=(
|
||||||
|
${deviceEntries})
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--list)
|
||||||
|
printf '%s\n' "''${DEVICES[@]}"
|
||||||
|
;;
|
||||||
|
--mac)
|
||||||
|
echo "connect $2" | bluetoothctl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "connect ${defaultMac}" | bluetoothctl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
'')
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -43,9 +43,24 @@
|
|||||||
** Headphones
|
** Headphones
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(defun azos/connect-headphones ()
|
(defun azos/connect-headphones (&optional arg)
|
||||||
(interactive)
|
"Connect to headphones via bluetoothctl.
|
||||||
(start-process-shell-command "connect-headphones" nil "azos-connect-headphones-whmx4000"))
|
Without prefix ARG, connects to the first device in the list.
|
||||||
|
With prefix ARG, prompts to choose from all configured devices."
|
||||||
|
(interactive "P")
|
||||||
|
(if (not arg)
|
||||||
|
(start-process-shell-command "connect-headphones" nil "azos-connect-headphones")
|
||||||
|
(let* ((raw (shell-command-to-string "azos-connect-headphones --list"))
|
||||||
|
(lines (split-string (string-trim raw) "\n" t))
|
||||||
|
(choices (mapcar (lambda (line)
|
||||||
|
(let ((space (string-match " " line)))
|
||||||
|
(cons (substring line (1+ space))
|
||||||
|
(substring line 0 space))))
|
||||||
|
lines))
|
||||||
|
(name (completing-read "Connect headphones: " (mapcar #'car choices) nil t))
|
||||||
|
(mac (cdr (assoc name choices))))
|
||||||
|
(start-process-shell-command "connect-headphones" nil
|
||||||
|
(concat "azos-connect-headphones --mac " mac)))))
|
||||||
|
|
||||||
(define-key azos/global-minor-mode/open-keymap
|
(define-key azos/global-minor-mode/open-keymap
|
||||||
(kbd "h") 'azos/connect-headphones)
|
(kbd "h") 'azos/connect-headphones)
|
||||||
|
|||||||
@@ -41,6 +41,18 @@
|
|||||||
azos.suites.lauretta.enable = true;
|
azos.suites.lauretta.enable = true;
|
||||||
azos.chess.enable = true;
|
azos.chess.enable = true;
|
||||||
azos.name = "Aner Zakobar";
|
azos.name = "Aner Zakobar";
|
||||||
|
|
||||||
|
azos.headphones.enable = true;
|
||||||
|
azos.headphones.devices = [
|
||||||
|
{
|
||||||
|
mac = "AC:80:0A:AF:E1:C2";
|
||||||
|
name = "Aner's Headphones";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
mac = "AC:80:0A:A1:5F:53";
|
||||||
|
name = "Chen's Headphones";
|
||||||
|
}
|
||||||
|
];
|
||||||
azos.roam-backup.enable = true;
|
azos.roam-backup.enable = true;
|
||||||
|
|
||||||
home = {
|
home = {
|
||||||
|
|||||||
@@ -33,6 +33,8 @@
|
|||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
|
|
||||||
networking.hostName = "beacon";
|
networking.hostName = "beacon";
|
||||||
|
networking.firewall.allowedTCPPorts = [ 22 ];
|
||||||
|
programs.nix-ld.enable = true;
|
||||||
time.timeZone = "Asia/Jerusalem";
|
time.timeZone = "Asia/Jerusalem";
|
||||||
|
|
||||||
# GPU is exposed through WSL2 paravirtualization; no Linux NVIDIA KM needed
|
# GPU is exposed through WSL2 paravirtualization; no Linux NVIDIA KM needed
|
||||||
@@ -50,7 +52,7 @@
|
|||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel" "video"];
|
extraGroups = ["wheel" "video"];
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDfzDDO5juINctECmWlsYtGghEiX/RnTJ1cazLvOWSrPfsTyEd+B1+Ig8kFefNryjkpApfRXqj5KtLPNlpLfdVBrOIfhIveEp2MGqhgOGZFNVxQyXnZgii8Zdh4cqZ2O3pZpMsaAQBaJ9nH6dK0dJjicWT5f6TqwrVcInywRc5SuyizoSxoFmg7ch2rnlVi0j5XMVqdh8XLzHXZ7yWCzXy7+hWl/d7pwpyuzoK8dBw2EU9TauhgRDruom5Q9vWJTLStALC9pAIb0v9UFj9y+1zwx7pXsXp5F1g73EYrE4QR+QQ6z2LebuK280W0t+VA/fSCEB13DnkmofgqZQxX5MSCmrxZ5lTFp1FjW6yJo7As9FheF/GECowYkMRIx4IiQsjjHjZqlLRpLas11yAp6tGoZnw59hFo6Lu0Kva39jGVVmioYHtAeE5rD5w+v5kseJR4jlQ8aKB5yOjYUQOIz2AHQyoidgaeR2jPWqZUeRQbACI+/p3CHO45r3hrjATtGloBg0xF95Qws7Be3mjHVhbBLOoob8MdZ8nYAGnhlWrZphlkvXsHC6OUkuDJW00tmMjWXRlFwhFJ+nqUQCgLVjxVHQJ5rq9GeXBUuNXAeCm5BKBsdq+9qqVlt7D9iGyfr0lcZ7peKz/96KwPCWpG2En1Ur0/cVcbWnXEfG/xWO10tQ== openpgp:0xFA67FAB0"
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDMdozJewuuqG4VuwGhI5Uw2xDIUrkQwyPGQ2q3tvnPq/VoV+zfdnou42I6XYEfOGd6xfLR0byOGCk1Ia1F/picBsxADEaJFBnTny5MWNA5MxwJIYUPW5+kFN1TmxdNGmj0WJ8qZeKkS3ffixdHlHTVu4Rzrlu8qDdw8TmgcvD7sHpNaBB+hwG9B/s5BAozfXvyXtW51lLLrEZdmUXJxAP51ubVgysZ985PA89o4G7LUE20IKAj3rgylLwq+Lz2PoGmVCptPTknLLzGlxTy2mU/tESJtS4iUvshSYiKak73BSen88xLWL/eZGFzOLW4TNem/qT0ykqK1s1BaGWCcQiDWN+Lpa3XqTbFN054MfhLdEMp+NjrdsCbZORzp9p2ZPDqi5jI1Hy7IN/8VzzB+T13MX6YhW7CBBqUZaivGhVQGsNjrFusPGhCaZrzNJ1l4qssLAlOh9qdaYzqDe+BIHsty55vw4Ph+Axou82babpLoiQzkCol2TWjPr7JSfHFkm6CmoTQ7mK8m7jRCodmxF+BEe4Usr+HrTKDc9fr5P4mdfL0O+ZPrlkPuG1zBTMal9MPxeCk4emzOZf7vBMNzb0aKHbOtSdVk/IcjatlDd2EIo34e5A6anLRMAdxb7901mnCAcjvCn6+ArNV8nr+NBk1+UvumZ+Q59LTrAkgRt3rBw== cardno:29_109_265"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user