add sway displays

This commit is contained in:
tristan 2023-05-12 15:42:19 +01:00
parent 7d549912c6
commit 954c85f23b
5 changed files with 81 additions and 43 deletions

View file

@ -10,7 +10,7 @@ let
displayHyprlandSetting = display:
"monitor = " + specificDisplay display +
", " + resToString display.resolution +
", " + display.position +
", " + positionToHyprlandString display.position +
", " + toString display.scaling;
swaybgJob = displays:
@ -35,6 +35,23 @@ let
then display.name
else "desc:" + display.description;
positionToHyprlandString = { x, y }:
if (x == "" || y == "") then "auto" else x + "x" + y;
renderDisplaysForSway = displays:
listToAttrs (map displaySwaySetting displays);
displaySwaySetting = display: {
name = display.name;
value = let res = display.resolution; in
{
mode = mkIf (resIsSet res)
"${toString res.x}x${toString res.y}@${toString res.freq}Hz";
bg = display.wallpaper + " fill";
scale = toString display.scaling;
};
};
resolutionType = types.submodule ({ x, y, freq, ... }:
{
options = {
@ -74,9 +91,11 @@ let
type = resolutionType;
default = { };
};
position = mkOption {
description = "XxY";
default = "auto";
position.x = mkOption {
default = "";
};
position.y = mkOption {
default = "";
};
wallpaper = mkOption {
description = "path to wallpaper";
@ -85,10 +104,14 @@ let
};
});
resIsSet = res:
!(res.x == 0 || res.y == 0 || res.freq == 0);
resToString = res:
if res.x == 0 || res.y == 0 || res.freq == 0
if resIsSet res
then "preferred"
else "${toString res.x}x${toString res.y}@${toString res.freq}";
in
{
options.displays =
@ -107,6 +130,8 @@ in
(renderDisplaysForHyprland cfg.displays);
systemd.user.services.swaybg = swaybgJob cfg.displays;
wayland.windowManager.sway.config.output = mkIf (cfg.displays != [ ])
(renderDisplaysForSway cfg.displays);
}
];
};

View file

@ -27,6 +27,7 @@ with lib;
handbrake
monero-gui
xmrig
krita
];
}];
};

View file

@ -2,8 +2,8 @@
with lib;
let
scripts = config.programs.scripts;
hotkeyType = types.submodule ({...}: {
hotkeyType = types.submodule ({ ... }: {
options = {
key = mkOption {
description = "the key";
@ -18,8 +18,8 @@ let
};
};
});
scriptType = types.submodule ({...}: {
scriptType = types.submodule ({ ... }: {
options = {
name = mkOption {
description = "name of the executable";
@ -30,7 +30,7 @@ let
hotkeys = mkOption {
type = types.listOf hotkeyType;
description = "keys that run this script";
default = [];
default = [ ];
};
install = mkOption {
type = types.bool;
@ -38,19 +38,24 @@ let
};
};
});
scriptToPackage = script:
pkgs.writeShellScriptBin script.name script.text;
scriptExec = { script, hotkey }:
"${scriptToPackage script}/bin/${script.name} ${hotkey.args}";
installScripts = scripts:
(map scriptToPackage (filter ( s: s.install ) scripts));
(map scriptToPackage (filter (s: s.install) scripts));
bindScript = script: concatStrings (
map ( hotkey: ''
bind = ${hotkey.modifier}, ${hotkey.key}, exec, ${scriptToPackage script}/bin/${script.name} ${hotkey.args}
'' ) script.hotkeys);
bindScripts = scripts:
map
(hotkey: ''
bind = ${hotkey.modifier}, ${hotkey.key}, exec, ${scriptExec {inherit script hotkey;}}
'')
script.hotkeys);
bindScripts = scripts:
"# === USER SCRIPTS MODULE ===\n"
+ concatStringsSep "\n" (map bindScript scripts);
@ -59,7 +64,7 @@ in
options.programs = {
scripts = mkOption {
type = types.listOf scriptType;
default = [];
default = [ ];
};
};
@ -69,5 +74,5 @@ in
wayland.windowManager.hyprland.extraConfig = bindScripts scripts;
}];
};
}