feat[client]: add shikane
Some checks failed
Build and Deploy / build (push) Has been cancelled
Flake check / Check flake (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled

This commit is contained in:
Leon Schwarzäugl 2026-02-23 01:02:44 +01:00
parent 694dd794f7
commit 91f4393800
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
34 changed files with 2182 additions and 1802 deletions

8
.github/README.md vendored
View file

@ -118,12 +118,12 @@
|---------------|-----------------------------------------------------------------------------------------------------------------------------| |---------------|-----------------------------------------------------------------------------------------------------------------------------|
|🐚 **Shell** | [zsh](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/zsh.nix) | |🐚 **Shell** | [zsh](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/zsh.nix) |
|🚪 **DM** | [greetd](https://github.com/Swarsel/.dotfiles/tree/main/modules/nixos/common/login.nix) | |🚪 **DM** | [greetd](https://github.com/Swarsel/.dotfiles/tree/main/modules/nixos/common/login.nix) |
|🪟 **WM** | [SwayFX](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/sway.nix) | |🪟 **WM** | [SwayFX](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/sway.nix) or [Niri](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/optional/niri.nix) |
|⛩️ **Bar** | [Waybar](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/waybar.nix) | |⛩️ **Bar** | [Waybar](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/waybar.nix) or [Noctalia Shell](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/optional/noctalia.nix) |
|✒️ **Editor** | [Emacs](https://github.com/Swarsel/.dotfiles/tree/main/files/emacs/init.el) | |✒️ **Editor** | [Emacs](https://github.com/Swarsel/.dotfiles/tree/main/files/emacs/init.el) |
|🖥️ **Terminal**| [Kitty](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/kitty.nix) | |🖥️ **Terminal**| [Kitty](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/kitty.nix) |
|🚀 **Launcher**| [Fuzzel](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/fuzzel.nix) | |🚀 **Launcher**| [Fuzzel](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/fuzzel.nix) or [Noctalia Shell](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/optional/noctalia.nix) |
|🚨 **Alerts** | [Mako](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/mako.nix) | |🚨 **Alerts** | [Mako](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/mako.nix) or [Noctalia Shell](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/optional/noctalia.nix) |
|🌐 **Browser** | [Firefox](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/zsh.nix) | |🌐 **Browser** | [Firefox](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/zsh.nix) |
|🎨 **Theme** | [City-Lights (managed by stylix)](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/sharedsetup.nix) | |🎨 **Theme** | [City-Lights (managed by stylix)](https://github.com/Swarsel/.dotfiles/tree/main/modules/home/common/sharedsetup.nix) |

File diff suppressed because it is too large Load diff

View file

@ -1797,7 +1797,7 @@ create a new one."
dashboard-set-footer nil dashboard-set-footer nil
dashboard-banner-logo-title "Welcome to SwarsEmacs!" dashboard-banner-logo-title "Welcome to SwarsEmacs!"
dashboard-image-banner-max-height 300 dashboard-image-banner-max-height 300
dashboard-startup-banner "~/.dotfiles/files/wallpaper/swarsel.png" dashboard-startup-banner "~/.dotfiles/files/icons/swarsel.png"
dashboard-projects-backend 'projectile dashboard-projects-backend 'projectile
dashboard-projects-switch-function 'magit-status dashboard-projects-switch-function 'magit-status
dashboard-set-navigator t dashboard-set-navigator t

View file

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.9 MiB

After

Width:  |  Height:  |  Size: 6.9 MiB

Before After
Before After

View file

@ -1,4 +1,4 @@
WORKSPACE=$(niri msg -j workspaces | jq -r '.[] | select(.is_active == true) | .id') WORKSPACE=$(niri msg -j workspaces | jq -r '.[] | select(.is_focused == true) | .id')
COUNT=$(niri msg -j windows | jq --argjson ws "$WORKSPACE" -r '.[] | select(.workspace_id == $ws and .is_floating == false) | .app_id' | wc -l) COUNT=$(niri msg -j windows | jq --argjson ws "$WORKSPACE" -r '.[] | select(.workspace_id == $ws and .is_floating == false) | .app_id' | wc -l)

View file

@ -39,7 +39,7 @@ in
swarselsystems = lib.recursiveUpdate swarselsystems = lib.recursiveUpdate
{ {
wallpaper = self + /files/wallpaper/lenovowp.png; wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
hasBluetooth = true; hasBluetooth = true;
hasFingerprint = true; hasFingerprint = true;
isImpermanence = true; isImpermanence = true;

View file

Before

Width:  |  Height:  |  Size: 4.5 MiB

After

Width:  |  Height:  |  Size: 4.5 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.9 MiB

After

Width:  |  Height:  |  Size: 7.9 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 557 KiB

After

Width:  |  Height:  |  Size: 557 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.9 MiB

After

Width:  |  Height:  |  Size: 2.9 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3 MiB

After

Width:  |  Height:  |  Size: 3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Before After
Before After

View file

@ -25,7 +25,7 @@
swarselsystems = { swarselsystems = {
isLaptop = false; isLaptop = false;
isNixos = false; isNixos = false;
wallpaper = self + /files/wallpaper/surfacewp.png; wallpaper = self + /files/wallpaper/landscape/surfacewp.png;
}; };
swarselprofiles = { swarselprofiles = {

View file

@ -31,7 +31,7 @@ in
sharescreen = "eDP-1"; sharescreen = "eDP-1";
info = "Lenovo Ideapad 720S-13IKB"; info = "Lenovo Ideapad 720S-13IKB";
firewall = lib.mkForce true; firewall = lib.mkForce true;
wallpaper = self + /files/wallpaper/lenovowp.png; wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
hasBluetooth = true; hasBluetooth = true;
hasFingerprint = true; hasFingerprint = true;
isImpermanence = true; isImpermanence = true;

View file

@ -40,7 +40,7 @@ in
swarselsystems = { swarselsystems = {
info = "~SwarselSystems~ demo host"; info = "~SwarselSystems~ demo host";
wallpaper = self + /files/wallpaper/lenovowp.png; wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
isImpermanence = true; isImpermanence = true;
isCrypted = true; isCrypted = true;
isSecureBoot = false; isSecureBoot = false;

View file

@ -40,7 +40,7 @@ in
sharescreen = "eDP-2"; sharescreen = "eDP-2";
info = "Framework Laptop 16, 7940HS, RX7700S, 64GB RAM"; info = "Framework Laptop 16, 7940HS, RX7700S, 64GB RAM";
firewall = lib.mkForce true; firewall = lib.mkForce true;
wallpaper = self + /files/wallpaper/lenovowp.png; wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
hasBluetooth = true; hasBluetooth = true;
hasFingerprint = true; hasFingerprint = true;
isImpermanence = false; isImpermanence = false;

View file

@ -79,6 +79,7 @@
swarselmodules.server = { swarselmodules.server = {
wireguard = true; wireguard = true;
restic = true; restic = true;
podman = true;
opkssh = true; opkssh = true;
}; };

View file

@ -26,7 +26,7 @@
swarselsystems = { swarselsystems = {
info = "~SwarselSystems~ remote install helper"; info = "~SwarselSystems~ remote install helper";
wallpaper = self + /files/wallpaper/lenovowp.png; wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
isImpermanence = true; isImpermanence = true;
isCrypted = true; isCrypted = true;
isSecureBoot = false; isSecureBoot = false;

View file

@ -84,6 +84,11 @@ in
vim vim
just just
sbctl sbctl
lsof
dig
cryptsetup
btrfs-progs
]; ];
programs = { programs = {

View file

@ -23,7 +23,7 @@
# laptop screen # laptop screen
output = { output = {
criteria = config.swarselsystems.sharescreen; criteria = config.swarselsystems.sharescreen;
mode = config.swarselsystems.highResolution; mode = "${config.swarselsystems.highResolution}@165.000";
scale = 1.0; scale = 1.0;
}; };
} }
@ -57,7 +57,7 @@
name = "lidopen"; name = "lidopen";
exec = [ exec = [
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/standwp.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/landscape/standwp.png --mode ${config.stylix.imageScalingMode}"
]; ];
outputs = [ outputs = [
{ {
@ -82,7 +82,7 @@
in in
{ {
name = "lidclosed"; name = "lidclosed";
exec = [ "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/standwp.png --mode ${config.stylix.imageScalingMode}" ]; exec = [ "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/landscape/standwp.png --mode ${config.stylix.imageScalingMode}" ];
outputs = [ outputs = [
{ {
criteria = config.swarselsystems.sharescreen; criteria = config.swarselsystems.sharescreen;

View file

@ -101,7 +101,7 @@
tridactyl-native tridactyl-native
# mako related # mako related
mako # mako
libnotify libnotify
# general utilities # general utilities

View file

@ -0,0 +1,77 @@
{ lib, config, confLib, ... }:
{
options.swarselmodules.shikane = lib.mkEnableOption "kanshi settings";
config = lib.mkIf config.swarselmodules.shikane {
systemd.user.services.shikane = confLib.overrideTarget "noctalia-shell.target";
services.shikane = {
enable = true;
settings =
let
homeMonitor = [
"m=PHL BDM3270"
"s=AU11806002320"
"v=Philips Consumer Electronics Company"
];
exec = [ "notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\"" ];
in
{
profile = [
{
name = "internal-on";
inherit exec;
output = [
{
match = config.swarselsystems.sharescreen;
enable = true;
mode = "${config.swarselsystems.highResolution}@165.000";
scale = 1.0;
}
];
}
{
name = "home-internal-on";
inherit exec;
output = [
{
match = config.swarselsystems.sharescreen;
enable = true;
scale = 1.7;
position = "2560,0";
}
{
match = homeMonitor;
enable = true;
scale = 1.0;
mode = "2560x1440";
position = "0,0";
}
];
}
{
name = "home-internal-off";
inherit exec;
output = [
{
match = config.swarselsystems.sharescreen;
enable = false;
position = "2560,0";
}
{
match = homeMonitor;
scale = 1.0;
enable = true;
mode = "2560x1440";
position = "0,0";
}
];
}
];
};
};
};
}

View file

@ -394,36 +394,36 @@ in
swayfxSettings = config.swarselsystems.swayfxConfig; swayfxSettings = config.swarselsystems.swayfxConfig;
in in
" "
# exec_always autotiling # exec_always autotiling
# set $exit \"exit: [s]leep, [l]ock, [p]oweroff, [r]eboot, [u]ser logout\" # set $exit \"exit: [s]leep, [l]ock, [p]oweroff, [r]eboot, [u]ser logout\"
# mode $exit { # mode $exit {
# bindsym --to-code { # bindsym --to-code {
# s exec \"systemctl suspend\", mode \"default\" # s exec \"systemctl suspend\", mode \"default\"
# h exec \"systemctl hibernate\", mode \"default\" # h exec \"systemctl hibernate\", mode \"default\"
# l exec \"swaylock --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2 --daemonize\", mode \"default\ # l exec \"swaylock --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2 --daemonize\", mode \"default\
# p exec \"systemctl poweroff\" # p exec \"systemctl poweroff\"
# r exec \"systemctl reboot\" # r exec \"systemctl reboot\"
# u exec \"swaymsg exit\" # u exec \"swaymsg exit\"
# Return mode \"default\" # Return mode \"default\"
# Escape mode \"default\" # Escape mode \"default\"
# ${modifier}+Escape mode \"default\" # ${modifier}+Escape mode \"default\"
# } # }
# } # }
exec systemctl --user import-environment exec systemctl --user import-environment
# exec swayidle -w # exec swayidle -w
seat * hide_cursor 2000 seat * hide_cursor 2000
exec_always kill -1 $(pidof kanshi) exec_always kill -1 $(pidof kanshi)
bindswitch --locked lid:on exec kanshictl switch lidclosed bindswitch --locked lid:on exec kanshictl switch lidclosed
bindswitch --locked lid:off exec kanshictl switch lidopen bindswitch --locked lid:off exec kanshictl switch lidopen
${swayfxSettings} ${swayfxSettings}
"; ";
}; };
}; };
} }

View file

@ -22,12 +22,13 @@ in
# { timeout = 300; command = "${swaylock} -f"; } # { timeout = 300; command = "${swaylock} -f"; }
{ timeout = 300; command = "${noctalia} lockScreen lock || ${swaylock} -f"; } { timeout = 300; command = "${noctalia} lockScreen lock || ${swaylock} -f"; }
# { timeout = 600; command = ''${pkgs.sway}/bin/swaymsg "output * dpms off"; resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on''; } # { timeout = 600; command = ''${pkgs.sway}/bin/swaymsg "output * dpms off"; resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on''; }
{ timeout = 600; command = "${noctalia} sessionMenu lockAndSuspend || ${suspend}"; } # { timeout = 600; command = "${noctalia} sessionMenu lockAndSuspend || ${suspend}"; }
{ timeout = 600; command = "${suspend}"; }
]; ];
events = { events = {
# { event = "before-sleep"; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; } # { event = "before-sleep"; command = "${noctalia} lockScreen lock || ${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; }
# { event = "after-resume"; command = "${swaylock} -f "; } # { event = "after-resume"; command = "${swaylock} -f "; }
# before-sleep = "${swaylock} -f "; before-sleep = "${noctalia} lockScreen lock || ${swaylock} -f ";
# lock = "${swaylock} -f "; # lock = "${swaylock} -f ";
}; };
}; };

View file

@ -7,6 +7,7 @@
programs.niri = { programs.niri = {
package = pkgs.niri-stable; # which package to use for niri validation package = pkgs.niri-stable; # which package to use for niri validation
settings = { settings = {
gestures.hot-corners.enable = false;
debug = { debug = {
honor-xdg-activation-with-invalid-serial = [ ]; honor-xdg-activation-with-invalid-serial = [ ];
}; };
@ -16,7 +17,7 @@
}; };
prefer-no-csd = true; prefer-no-csd = true;
layer-rules = [ layer-rules = [
{ matches = [{ namespace = "^notifications$"; }]; block-out-from = "screen-capture"; } { matches = [{ namespace = "^notificatioans$"; }]; block-out-from = "screen-capture"; }
{ matches = [{ namespace = "^wallpaper$"; }]; place-within-backdrop = true; } { matches = [{ namespace = "^wallpaper$"; }]; place-within-backdrop = true; }
{ matches = [{ namespace = "^noctalia-overview*"; }]; place-within-backdrop = true; } { matches = [{ namespace = "^noctalia-overview*"; }]; place-within-backdrop = true; }
]; ];
@ -56,11 +57,11 @@
{ matches = [{ app-id = "^spotifytui$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; } { matches = [{ app-id = "^spotifytui$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; }
{ matches = [{ app-id = "^kittyterm$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; } { matches = [{ app-id = "^kittyterm$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; }
]; ];
environment = { environment = vars.waylandSessionVariables // {
DISPLAY = ":0"; DISPLAY = ":0";
QT_QPA_PLATFORM = lib.mkForce "wayland"; QT_QPA_PLATFORM = lib.mkForce "wayland";
EDITOR = "emacsclient -c"; EDITOR = "emacsclient -c";
} // vars.waylandSessionVariables; };
screenshot-path = "~/Pictures/Screenshots/screenshot_%Y-%m-%d-%H%M%S.png"; screenshot-path = "~/Pictures/Screenshots/screenshot_%Y-%m-%d-%H%M%S.png";
input = { input = {
mod-key = "Super"; mod-key = "Super";
@ -104,17 +105,18 @@
}; };
binds = with config.lib.niri.actions; let binds = with config.lib.niri.actions; let
sh = spawn "sh" "-c"; sh = spawn "sh" "-c";
resizer = "niri-resize"; resizer = "niri-resize & sleep 0.05";
in in
{ {
"Mod+Shift+t".action = toggle-window-rule-opacity; "Mod+Shift+t".action = toggle-window-rule-opacity;
"Mod+m".action = focus-workspace-previous; "Mod+m".action = focus-workspace-previous;
"Mod+Shift+Space".action = toggle-window-floating; "Mod+Shift+Space".action = toggle-window-floating;
"Mod+Shift+f".action = fullscreen-window; "Mod+Shift+f".action = fullscreen-window;
"Mod+q".action = sh "niri msg action close-window & ${resizer}"; "Mod+q".action = sh "${resizer} && niri msg action close-window";
"Mod+f".action = sh "${resizer} & firefox"; "Mod+f".action = sh "${resizer} && exec firefox";
# "Mod+Space".action = spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; # "Mod+Space".action = spawn "noctalia-shell" "ipc" "call" "launcher" "toggle";
"Mod+Space".action = sh "${resizer} & fuzzel"; "Mod+Space".action = sh "${resizer} && exec noctalia-shell ipc call launcher toggle";
# "Mod+Space".action = sh "${resizer} & exec fuzzel";
"Mod+z".action = spawn "noctalia-shell" "ipc" "call" "bar" "toggle"; "Mod+z".action = spawn "noctalia-shell" "ipc" "call" "bar" "toggle";
"Mod+Shift+c".action = spawn "qalculate-gtk"; "Mod+Shift+c".action = spawn "qalculate-gtk";
"Mod+Ctrl+p".action = spawn "1password" "--quick-acces"; "Mod+Ctrl+p".action = spawn "1password" "--quick-acces";
@ -128,11 +130,11 @@
"Mod+Shift+s".action.screenshot-window = { write-to-disk = true; }; "Mod+Shift+s".action.screenshot-window = { write-to-disk = true; };
# "Mod+Shift+v".action = spawn "wf-recorder" "-g" "'$(slurp -f %o -or)'" "-f" "~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv"; # "Mod+Shift+v".action = spawn "wf-recorder" "-g" "'$(slurp -f %o -or)'" "-f" "~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv";
"Mod+e".action = sh "${resizer} & emacsclient -nquc -a emacs -e '(dashboard-open)'"; "Mod+e".action = sh "${resizer} && exec emacsclient -nquc -a emacs -e '(dashboard-open)'";
"Mod+c".action = sh "${resizer} & emacsclient -ce '(org-capture)'"; "Mod+c".action = sh "${resizer} && exec emacsclient -ce '(org-capture)'";
"Mod+t".action = sh "${resizer} & emacsclient -ce '(org-agenda)'"; "Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'";
"Mod+Shift+m".action = sh "${resizer} & emacsclient -ce '(mu4e)'"; "Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'";
"Mod+Shift+a".action = sh "${resizer} & emacsclient -ce '(swarsel/open-calendar)'"; "Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'";
"Mod+a".action = spawn "swarselcheck-niri" "-s"; "Mod+a".action = spawn "swarselcheck-niri" "-s";
"Mod+x".action = spawn "swarselcheck-niri" "-k"; "Mod+x".action = spawn "swarselcheck-niri" "-k";
@ -148,8 +150,8 @@
"Mod+Right".action = focus-column-or-monitor-right; "Mod+Right".action = focus-column-or-monitor-right;
"Mod+Down".action = focus-window-or-workspace-down; "Mod+Down".action = focus-window-or-workspace-down;
"Mod+Up".action = focus-window-or-workspace-up; "Mod+Up".action = focus-window-or-workspace-up;
"Mod+Shift+Left".action = move-column-left; "Mod+Shift+Left".action = move-column-left-or-to-monitor-left;
"Mod+Shift+Right".action = move-column-right; "Mod+Shift+Right".action = move-column-right-or-to-monitor-right;
"Mod+Shift+Down".action = move-window-down-or-to-workspace-down; "Mod+Shift+Down".action = move-window-down-or-to-workspace-down;
"Mod+Shift+Up".action = move-window-up-or-to-workspace-up; "Mod+Shift+Up".action = move-window-up-or-to-workspace-up;
# "Mod+Ctrl+Shift+c".action = "reload"; # "Mod+Ctrl+Shift+c".action = "reload";
@ -157,7 +159,7 @@
# "Mod+Shift+e".action = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'"; # "Mod+Shift+e".action = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
# "Mod+r".action = "mode resize"; # "Mod+r".action = "mode resize";
# "Mod+Return".action = "exec kitty"; # "Mod+Return".action = "exec kitty";
"Mod+Return".action = sh "${resizer} & exec kitty -o confirm_os_window_close=0"; "Mod+Return".action = sh "${resizer} && exec kitty -o confirm_os_window_close=0";
"XF86AudioRaiseVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "increase"; "XF86AudioRaiseVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "increase";
"XF86AudioLowerVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; "XF86AudioLowerVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "decrease";
"XF86AudioMute".action = spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; "XF86AudioMute".action = spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput";
@ -202,8 +204,8 @@
# { command = [ "nm-applet" ]; } # { command = [ "nm-applet" ]; }
# { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; } # { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; }
# { command = [ "noctalia-shell" ]; } # { command = [ "noctalia-shell" ]; }
{ command = [ "pkill mako" ]; } # { argv = [ "pkill" "mako" ]; }
{ command = [ "systemctl" "--user" "start" "noctalia-shell.target" ]; } { argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" "tray.target" ]; }
]; ];
# workspaces = { # workspaces = {
# "01-Main" = { # "01-Main" = {

View file

@ -8,43 +8,27 @@
targets = { targets = {
noctalia-shell.Unit = { noctalia-shell.Unit = {
After = [ "graphical-session.target" ]; After = [ "graphical-session.target" ];
Wants = [
"tray.target"
"noctalia-tray-pre.target"
];
}; };
tray = { tray = {
Unit = { Unit = {
After = [ "noctalia-tray-pre.target" ]; After = [ "noctalia-init.service" ];
PartOf = [ "noctalia-shell.service" ]; PartOf = [ "noctalia-shell.service" ];
}; };
Install.WantedBy = [ "noctalia-shell.target" ]; Install.WantedBy = [ "noctalia-shell.target" ];
}; };
noctalia-tray-pre = {
Unit = {
After = [
"noctalia-init.service"
];
};
Install.WantedBy = [ "noctalia-shell.target" ];
};
}; };
services = { services = {
noctalia-shell = confLib.overrideTarget "noctalia-shell.target"; noctalia-shell = confLib.overrideTarget "noctalia-shell.target";
noctalia-init = { noctalia-init = {
Unit = {
PartOf = [ "noctalia-tray-pre.target" ];
};
Service = { Service = {
Type = "oneshot"; Type = "oneshot";
ExecStartPre = "${pkgs.coreutils}/bin/sleep 5"; ExecStart = "${pkgs.coreutils}/bin/sleep 15";
ExecStart = "-${pkgs.busybox}/bin/pkill mako";
RemainAfterExit = true; RemainAfterExit = true;
}; };
Install = { Install = {
WantedBy = [ "noctalia-tray-pre.target" ]; WantedBy = [ "noctalia-shell.target" ];
}; };
}; };
}; };
@ -72,7 +56,7 @@
marginHorizontal = 0; marginHorizontal = 0;
frameThickness = 8; frameThickness = 8;
frameRadius = 12; frameRadius = 12;
outerCorners = true; outerCorners = false;
hideOnOverview = false; hideOnOverview = false;
displayMode = "auto_hide"; displayMode = "auto_hide";
autoHideDelay = 100; autoHideDelay = 100;
@ -81,29 +65,54 @@
widgets = { widgets = {
left = [ left = [
{ {
characterCount = 2; characterCount = 4;
colorizeIcons = false; colorizeIcons = false;
emptyColor = "primary"; emptyColor = "primary";
enableScrollWheel = false; enableScrollWheel = false;
focusedColor = "secondary"; focusedColor = "secondary";
followFocusedScreen = false; followFocusedScreen = false;
groupedBorderOpacity = 1; groupedBorderOpacity = 1;
hideUnoccupied = true; hideUnoccupied = false;
iconScale = 0.5; iconScale = 0.5;
id = "Workspace"; id = "Workspace";
labelMode = "none"; labelMode = "name";
occupiedColor = "primary"; occupiedColor = "primary";
pillSize = 0.4; pillSize = 0.4;
reverseScroll = false; reverseScroll = false;
showApplications = true; showApplications = true;
showBadge = true; showBadge = true;
showLabelsOnlyWhenOccupied = true; showLabelsOnlyWhenOccupied = false;
unfocusedIconsOpacity = 0.25; unfocusedIconsOpacity = 0.25;
} }
{
defaultSettings = {
completedCount = 0;
count = 0;
current_page_id = 0;
isExpanded = false;
pages = [
{
id = 0;
name = "General";
}
];
priorityColors = {
high = "#f44336";
low = "#9e9e9e";
medium = "#2196f3";
};
showBackground = true;
showCompleted = true;
todos = [ ];
useCustomColors = false;
};
id = "plugin:todo";
}
]; ];
center = [ center = [
{ {
colorizeIcons = false; colorizeIcons = true;
hideMode = "hidden"; hideMode = "hidden";
id = "ActiveWindow"; id = "ActiveWindow";
maxWidth = 145; maxWidth = 145;
@ -134,6 +143,17 @@
id = "Volume"; id = "Volume";
middleClickCommand = "pavucontrol"; middleClickCommand = "pavucontrol";
} }
{
id = "NotificationHistory";
hideWhenZero = false;
showUnreadBadge = true;
}
{
id = "plugin:ba7043:github-feed";
}
{
id = "plugin:clipper";
}
{ {
displayMode = "onhover"; displayMode = "onhover";
id = "Network"; id = "Network";
@ -154,12 +174,6 @@
showNoctaliaPerformance = false; showNoctaliaPerformance = false;
showPowerProfiles = true; showPowerProfiles = true;
} }
{
id = "plugin:ba7043:github-feed";
}
{
id = "plugin:clipper";
}
{ {
colorName = "primary"; colorName = "primary";
id = "SessionMenu"; id = "SessionMenu";
@ -176,17 +190,17 @@
{ {
colorizeDistroLogo = false; colorizeDistroLogo = false;
colorizeSystemIcon = "primary"; colorizeSystemIcon = "primary";
customIconPath = ""; customIconPath = "${self}/files/icons/swarsel.png";
enableColorization = true; enableColorization = true;
icon = "noctalia"; icon = "noctalia";
id = "ControlCenter"; id = "ControlCenter";
useDistroLogo = true; useDistroLogo = false;
} }
]; ];
}; };
}; };
general = { general = {
avatarImage = "${self}/files/wallpaper/swarsel.png"; avatarImage = "${self}/files/icons/swarsel.png";
dimmerOpacity = 0.2; dimmerOpacity = 0.2;
showScreenCorners = false; showScreenCorners = false;
forceBlackScreenCorners = false; forceBlackScreenCorners = false;
@ -195,16 +209,16 @@
iRadiusRatio = 1; iRadiusRatio = 1;
boxRadiusRatio = 1; boxRadiusRatio = 1;
screenRadiusRatio = 1; screenRadiusRatio = 1;
animationSpeed = 1; animationSpeed = 1.5;
animationDisabled = false; animationDisabled = false;
compactLockScreen = true; compactLockScreen = true;
lockOnSuspend = true; lockOnSuspend = true;
showSessionButtonsOnLockScreen = true; showSessionButtonsOnLockScreen = true;
showHibernateOnLockScreen = false; showHibernateOnLockScreen = false;
enableShadows = true; enableShadows = true;
shadowDirection = "bottom_right"; shadowDirection = "center";
shadowOffsetX = 2; shadowOffsetX = 0;
shadowOffsetY = 3; shadowOffsetY = 0;
language = ""; language = "";
allowPanelsOnScreenWithoutBar = true; allowPanelsOnScreenWithoutBar = true;
showChangelogOnStartup = true; showChangelogOnStartup = true;
@ -260,17 +274,17 @@
wallpaper = { wallpaper = {
enabled = true; enabled = true;
overviewEnabled = true; overviewEnabled = true;
directory = "${self}/files/wallpaper"; directory = "${self}/files/wallpaper/landscape";
monitorDirectories = [ ]; monitorDirectories = [ ];
enableMultiMonitorDirectories = true; enableMultiMonitorDirectories = true;
showHiddenFiles = false; showHiddenFiles = false;
viewMode = "single"; viewMode = "single";
setWallpaperOnAllMonitors = true; setWallpaperOnAllMonitors = false;
fillMode = "crop"; fillMode = "crop";
fillColor = "#000000"; fillColor = "#000000";
useSolidColor = false; useSolidColor = false;
solidColor = "#1a1a2e"; solidColor = "#1a1a2e";
automationEnabled = false; automationEnabled = true;
wallpaperChangeMode = "random"; wallpaperChangeMode = "random";
randomIntervalSec = 300; randomIntervalSec = 300;
transitionDuration = 500; transitionDuration = 500;
@ -586,7 +600,7 @@
colorizationEnabled = true; colorizationEnabled = true;
colorizationIcon = "Primary"; colorizationIcon = "Primary";
colorizationBadge = "Tertiary"; colorizationBadge = "Tertiary";
colorizationBadgeText = "Primary"; colorizationBadgeText = "None";
defaultTab = 1; defaultTab = 1;
enableSystemNotifications = true; enableSystemNotifications = true;
notifyGitHubNotifications = true; notifyGitHubNotifications = true;

View file

@ -297,6 +297,84 @@ in
}; };
services = { services = {
shikane = {
settings =
let
workRight = [
"m=HP Z32"
"s=CN41212T55"
"v=HP Inc."
];
workLeft = [
"m=HP 732pk"
"s=CNC4080YL5"
"v=HP Inc."
];
exec = [ "notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\"" ];
in
{
profile = [
{
name = "work-internal-on";
inherit exec;
output = [
{
match = config.swarselsystems.sharescreen;
enable = true;
scale = 1.7;
position = "2560,0";
}
{
match = workRight;
enable = true;
scale = 1.0;
mode = "3840x2160@60Hz";
position = "-1280,0";
}
{
match = workLeft;
enable = true;
scale = 1.0;
transform = "270";
mode = "3840x2160@60Hz";
position = "-3440,-1050";
}
];
}
{
name = "work-internal-off";
inherit exec;
output = [
{
match = config.swarselsystems.sharescreen;
enable = false;
scale = 1.7;
position = "2560,0";
}
{
match = workRight;
enable = true;
scale = 1.0;
mode = "3840x2160@60Hz";
position = "-1280,0";
}
{
match = workLeft;
enable = true;
scale = 1.0;
transform = "270";
mode = "3840x2160@60Hz";
position = "-3440,-1050";
}
];
}
];
};
};
kanshi = { kanshi = {
settings = [ settings = [
{ {
@ -338,8 +416,8 @@ in
name = "lidopen"; name = "lidopen";
exec = [ exec = [
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/botanicswp.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/landscape/botanicswp.png --mode ${config.stylix.imageScalingMode}"
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/op6wp.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/portrait/op6wp.png --mode ${config.stylix.imageScalingMode}"
]; ];
outputs = [ outputs = [
{ {
@ -373,7 +451,7 @@ in
name = "lidopen"; name = "lidopen";
exec = [ exec = [
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/navidrome.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/services/navidrome.png --mode ${config.stylix.imageScalingMode}"
"${pkgs.kanshare}/bin/kanshare ${config.swarselsystems.sharescreen} '${monitor}'" "${pkgs.kanshare}/bin/kanshare ${config.swarselsystems.sharescreen} '${monitor}'"
]; ];
outputs = [ outputs = [
@ -396,8 +474,8 @@ in
profile = { profile = {
name = "lidclosed"; name = "lidclosed";
exec = [ exec = [
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/botanicswp.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/landscape/botanicswp.png --mode ${config.stylix.imageScalingMode}"
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/op6wp.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/portrait/op6wp.png --mode ${config.stylix.imageScalingMode}"
]; ];
outputs = [ outputs = [
{ {
@ -428,7 +506,7 @@ in
{ {
name = "lidclosed"; name = "lidclosed";
exec = [ exec = [
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/navidrome.png --mode ${config.stylix.imageScalingMode}" "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/services/navidrome.png --mode ${config.stylix.imageScalingMode}"
]; ];
outputs = [ outputs = [
{ {

View file

@ -6,14 +6,14 @@
enable = true; enable = true;
settings = { settings = {
# initial_session.command = "sway"; # initial_session.command = "sway";
initial_session.command = "uwsm start -- sway-uwsm.desktop"; initial_session.command = "uwsm start -- niri-uwsm.desktop";
# --cmd sway # --cmd sway
default_session.command = '' default_session.command = ''
${pkgs.tuigreet}/bin/tuigreet \ ${pkgs.tuigreet}/bin/tuigreet \
--time \ --time \
--asterisks \ --asterisks \
--user-menu \ --user-menu \
--cmd "uwsm start -- sway-uwsm.desktop" --cmd "uwsm start -- niri-uwsm.desktop"
''; '';
}; };
}; };

View file

@ -11,7 +11,8 @@ let
lan2VLANs = selectVLANs [ "home" "devices" "services" ]; lan2VLANs = selectVLANs [ "home" "devices" "services" ];
lan3VLANs = selectVLANs [ "home" "devices" "services" ]; lan3VLANs = selectVLANs [ "home" "devices" "services" ];
lan4VLANs = lan3VLANs; lan4VLANs = lan3VLANs;
lan5VLANs = selectVLANs [ "home" "devices" "guests" ]; # TODO: remove services and reset ports 5+6 on swLR to guest when kitchen construction is finished
lan5VLANs = selectVLANs [ "home" "devices" "services" "guests" ];
inherit (globals.general) homeDnsServer; inherit (globals.general) homeDnsServer;
in in
{ {

View file

@ -165,18 +165,13 @@ in
_ = { }; _ = { };
}); });
overrideTarget = target: overrideTarget = target: {
let Unit = {
inherit target; PartOf = lib.mkForce [ target ];
in After = lib.mkForce [ target ];
{
Unit = {
PartOf = lib.mkForce [ target ];
After = lib.mkForce [ target ];
Requires = lib.mkForce [ target ];
};
Install.WantedBy = lib.mkForce [ target ];
}; };
Install.WantedBy = lib.mkForce [ target ];
};
genNginx = genNginx =
{ serviceAddress { serviceAddress

View file

@ -87,7 +87,7 @@
}; };
wallpaper = lib.mkOption { wallpaper = lib.mkOption {
type = lib.types.path; type = lib.types.path;
default = "${self}/files/wallpaper/lenovowp.png"; default = "${self}/files/wallpaper/landscape/lenovowp.png";
}; };
sharescreen = lib.mkOption { sharescreen = lib.mkOption {
type = lib.types.str; type = lib.types.str;

View file

@ -57,6 +57,7 @@
tmux = lib.mkDefault true; tmux = lib.mkDefault true;
vesktop = lib.mkDefault true; vesktop = lib.mkDefault true;
vesktop-tray = lib.mkDefault true; vesktop-tray = lib.mkDefault true;
shikane = lib.mkDefault true;
syncthing-tray = lib.mkDefault true; syncthing-tray = lib.mkDefault true;
waybar = lib.mkDefault true; waybar = lib.mkDefault true;
yubikey = lib.mkDefault false; yubikey = lib.mkDefault false;