feat: improve niri+noctalia

This commit is contained in:
Leon Schwarzäugl 2026-03-05 23:12:30 +01:00
parent ec4e302f44
commit a0d3e701a5
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
8 changed files with 280 additions and 60 deletions

View file

@ -1809,6 +1809,8 @@ A short overview over each input and what it does:
simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master"; simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master";
nixos-nftables-firewall.url = "github:thelegy/nixos-nftables-firewall"; nixos-nftables-firewall.url = "github:thelegy/nixos-nftables-firewall";
pia.url = "github:Swarsel/pia.nix/custom"; pia.url = "github:Swarsel/pia.nix/custom";
niritiling.url = "github:Swarsel/niritiling";
noctoggle.url = "git+ssh://git@github.com/Swarsel/noctoggle.git?ref=main";
}; };
outputs = outputs =
@ -2317,6 +2319,8 @@ The rest of the functions are used to build full NixOS systems as well as halfCo
inputs.swarsel-nix.nixosModules.default inputs.swarsel-nix.nixosModules.default
inputs.nixos-nftables-firewall.nixosModules.default inputs.nixos-nftables-firewall.nixosModules.default
inputs.pia.nixosModules.default inputs.pia.nixosModules.default
inputs.niritiling.nixosModules.default
inputs.noctoggle.nixosModules.default
(inputs.nixos-extra-modules + "/modules/guests") (inputs.nixos-extra-modules + "/modules/guests")
(inputs.nixos-extra-modules + "/modules/interface-naming.nix") (inputs.nixos-extra-modules + "/modules/interface-naming.nix")
"${self}/hosts/nixos/${arch}/${configName}" "${self}/hosts/nixos/${arch}/${configName}"
@ -8885,6 +8889,8 @@ In the respective modules that use home-manager secrets (for example [[#h:506d01
github-forge-token = { owner = mainUser; }; github-forge-token = { owner = mainUser; };
}) // (lib.optionalAttrs (modules ? optional-work) { }) // (lib.optionalAttrs (modules ? optional-work) {
harica-root-ca = { sopsFile = certsSopsFile; path = "${homeDir}/.aws/certs/harica-root.pem"; owner = mainUser; }; harica-root-ca = { sopsFile = certsSopsFile; path = "${homeDir}/.aws/certs/harica-root.pem"; owner = mainUser; };
}) // (lib.optionalAttrs (modules ? optional-noctalia) {
radicale-token = { owner = mainUser; };
}) // (lib.optionalAttrs modules.anki { }) // (lib.optionalAttrs modules.anki {
anki-user = { owner = mainUser; }; anki-user = { owner = mainUser; };
anki-pw = { owner = mainUser; }; anki-pw = { owner = mainUser; };
@ -9199,7 +9205,7 @@ For that reason, make sure that =sops-nix= is properly working before finishing
description = "Leon S"; description = "Leon S";
password = lib.mkIf (minimal || config.swarselsystems.isPublic) "setup"; password = lib.mkIf (minimal || config.swarselsystems.isPublic) "setup";
hashedPasswordFile = lib.mkIf (!minimal && !config.swarselsystems.isPublic) config.sops.secrets.main-user-hashed-pw.path; hashedPasswordFile = lib.mkIf (!minimal && !config.swarselsystems.isPublic) config.sops.secrets.main-user-hashed-pw.path;
extraGroups = [ "wheel" ] ++ lib.optionals (!minimal && !config.swarselsystems.isMicroVM) [ "networkmanager" "syncthing" "docker" "lp" "audio" "video" "vboxusers" "libvirtd" "scanner" ]; extraGroups = [ "wheel" ] ++ lib.optionals (!minimal && !config.swarselsystems.isMicroVM) [ "networkmanager" "input" "syncthing" "docker" "lp" "audio" "video" "vboxusers" "libvirtd" "scanner" ];
packages = with pkgs; [ ]; packages = with pkgs; [ ];
}; };
}; };
@ -19560,6 +19566,7 @@ Auto login for the initial session.
xwayland-satellite-unstable xwayland-satellite-unstable
]; ];
services.niritiling.enable = true;
programs = { programs = {
niri = { niri = {
@ -19590,8 +19597,17 @@ Auto login for the initial session.
services = { services = {
upower.enable = true; # needed for battery percentage upower.enable = true; # needed for battery percentage
gnome.evolution-data-server.enable = true; # needed for calendar integration gnome.evolution-data-server.enable = true; # needed for calendar integration
noctoggle = {
enable = true;
# noctaliaPackage = pkgs.noctalia-shell;
};
};
programs = {
gpu-screen-recorder.enable = true;
evolution.enable = true;
}; };
programs.gpu-screen-recorder.enable = true;
}; };
} }
#+end_src #+end_src
@ -26413,6 +26429,7 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
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; gestures.hot-corners.enable = false;
hotkey-overlay.skip-at-startup = true;
debug = { debug = {
honor-xdg-activation-with-invalid-serial = [ ]; honor-xdg-activation-with-invalid-serial = [ ];
}; };
@ -26510,17 +26527,19 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
}; };
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 & 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 "${resizer} && niri msg action close-window"; # "Mod+q".action = sh "${resizer} && niri msg action close-window";
"Mod+f".action = sh "${resizer} && exec firefox"; "Mod+q".action = sh "niri msg action close-window";
# "Mod+f".action = sh "${resizer} && exec firefox";
"Mod+f".action = sh "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} && exec noctalia-shell ipc call launcher toggle"; # "Mod+Space".action = sh "${resizer} && exec noctalia-shell ipc call launcher toggle";
"Mod+Space".action = sh "exec noctalia-shell ipc call launcher toggle";
# "Mod+Space".action = sh "${resizer} & exec fuzzel"; # "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";
@ -26535,11 +26554,16 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
"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} && exec 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} && exec emacsclient -ce '(org-capture)'"; "Mod+e".action = sh "exec emacsclient -nquc -a emacs -e '(dashboard-open)'";
"Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'"; # "Mod+c".action = sh "${resizer} && exec emacsclient -ce '(org-capture)'";
"Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'"; "Mod+c".action = sh "exec emacsclient -ce '(org-capture)'";
"Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'"; # "Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'";
"Mod+t".action = sh "exec emacsclient -ce '(org-agenda)'";
# "Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'";
"Mod+Shift+m".action = sh "exec emacsclient -ce '(mu4e)'";
# "Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'";
"Mod+Shift+a".action = sh "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";
@ -26564,7 +26588,8 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
# "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";
"Mod+Return".action = sh "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";
@ -26610,7 +26635,7 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
# { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; } # { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; }
# { command = [ "noctalia-shell" ]; } # { command = [ "noctalia-shell" ]; }
# { argv = [ "pkill" "mako" ]; } # { argv = [ "pkill" "mako" ]; }
{ argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" "tray.target" ]; } { argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" ]; }
]; ];
# workspaces = { # workspaces = {
# "01-Main" = { # "01-Main" = {
@ -26623,6 +26648,34 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
}; };
}; };
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config.niri = {
default = [
"gtk"
"gnome"
];
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
"org.freedesktop.impl.portal.ScreenCast" = [ "xdg-desktop-portal-gnome" ];
"org.freedesktop.impl.portal.Screenshot" = [ "xdg-desktop-portal-gnome" ];
};
extraPortals = [
pkgs.gnome-keyring
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-gnome
];
};
swarselmodules.gnome-keyring = lib.swarselsystems.mkStrong true;
home.packages = [
pkgs.nirius
];
}; };
} }
#+end_src #+end_src
@ -26635,11 +26688,16 @@ Akin to the [[#h:f9aa9af0-9b8d-43ff-901d-9ffccdd70589][Optional]] NixOS modules.
Apart from configuring Noctalia, I here also add some systemd chains to make sure the Noctalia tray is actually ready to receive tray icons. Apart from configuring Noctalia, I here also add some systemd chains to make sure the Noctalia tray is actually ready to receive tray icons.
#+begin_src nix-ts :tangle modules/home/optional/noctalia.nix #+begin_src nix-ts :tangle modules/home/optional/noctalia.nix
{ self, inputs, config, pkgs, lib, confLib, ... }: { self, inputs, config, pkgs, lib, confLib, type, ... }:
let
inherit (confLib.getConfig.repo.secrets.common) caldavTasksEndpoint;
inherit (config.swarselsystems) xdgDir;
in
{ {
imports = [ imports = [
inputs.noctalia.homeModules.default inputs.noctalia.homeModules.default
]; ];
options.swarselmodules.optional-noctalia = lib.swarselsystems.mkTrueOption;
config = { config = {
systemd.user = { systemd.user = {
targets = { targets = {
@ -26648,24 +26706,35 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
}; };
tray = { tray = {
Unit = { Unit = {
After = [ "noctalia-init.service" ]; Wants = [ "noctalia-init.service" ];
PartOf = [ "noctalia-shell.service" ]; After = [
"noctalia-shell.service"
"noctalia-init.service"
];
}; };
Install.WantedBy = [ "noctalia-shell.target" ]; Install.WantedBy = [ "noctalia-shell.target" ];
}; };
}; };
services = { services = {
noctalia-shell = confLib.overrideTarget "noctalia-shell.target"; noctalia-shell = {
Unit.PartOf = [ "noctalia-shell.target" ];
Install.WantedBy = [ "noctalia-shell.target" ];
};
noctalia-init = { noctalia-init = {
Unit = {
Requires = [ "noctalia-shell.service" ];
After = [ "noctalia-shell.service" ];
};
Service = { Service = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.coreutils}/bin/sleep 15"; ExecStart = "${pkgs.coreutils}/bin/sleep 3";
RemainAfterExit = true; RemainAfterExit = true;
}; };
Install = { Install = {
WantedBy = [ "noctalia-shell.target" ]; WantedBy = [ "tray.target" ];
}; };
}; };
}; };
@ -26695,7 +26764,7 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
frameRadius = 12; frameRadius = 12;
outerCorners = false; outerCorners = false;
hideOnOverview = false; hideOnOverview = false;
displayMode = "auto_hide"; displayMode = "non_exclusive";
autoHideDelay = 100; autoHideDelay = 100;
autoShowDelay = 300; autoShowDelay = 300;
screenOverrides = [ ]; screenOverrides = [ ];
@ -26741,10 +26810,10 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
}; };
showBackground = true; showBackground = true;
showCompleted = true; showCompleted = true;
todos = []; todos = [ ];
useCustomColors = false; useCustomColors = false;
}; };
id = "plugin:todo"; id = "plugin:ba7043:todo";
} }
]; ];
center = [ center = [
@ -26786,7 +26855,7 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
showUnreadBadge = true; showUnreadBadge = true;
} }
{ {
id = "plugin:ba7043:github-feed"; id = "plugin:github-feed";
} }
{ {
id = "plugin:clipper"; id = "plugin:clipper";
@ -26812,7 +26881,7 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
showPowerProfiles = true; showPowerProfiles = true;
} }
{ {
colorName = "primary"; iconColor = "none";
id = "SessionMenu"; id = "SessionMenu";
} }
{ {
@ -26826,7 +26895,7 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
} }
{ {
colorizeDistroLogo = false; colorizeDistroLogo = false;
colorizeSystemIcon = "primary"; colorizeSystemIcon = "none";
customIconPath = "${self}/files/icons/swarsel.png"; customIconPath = "${self}/files/icons/swarsel.png";
enableColorization = true; enableColorization = true;
icon = "noctalia"; icon = "noctalia";
@ -26959,9 +27028,12 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
viewMode = "list"; viewMode = "list";
showCategories = false; showCategories = false;
iconMode = "native"; iconMode = "native";
density = "compact";
overviewLayer = false;
showIconBackground = false; showIconBackground = false;
enableSettingsSearch = false; enableSettingsSearch = false;
enableWindowsSearch = false; enableWindowsSearch = false;
enableSessionSearch = false;
ignoreMouseInput = true; ignoreMouseInput = true;
screenshotAnnotationTool = ""; screenshotAnnotationTool = "";
}; };
@ -27071,36 +27143,49 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "L";
} }
{ {
action = "suspend"; action = "suspend";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "S";
} }
{ {
action = "hibernate"; action = "hibernate";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "H";
} }
{ {
action = "reboot"; action = "reboot";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "R";
} }
{ {
action = "logout"; action = "logout";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "U";
} }
{ {
action = "shutdown"; action = "shutdown";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "P";
}
{
action = "rebootToUefi";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "B";
} }
]; ];
}; };
@ -27187,17 +27272,39 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
"unicode-picker" "unicode-picker"
"screen-recorder" "screen-recorder"
]) // { ]) // {
github-feed = { todo = {
enabled = true; enabled = true;
sourceUrl = "https://github.com/Swarsel/noctalia-plugins"; sourceUrl = "https://github.com/Swarsel/noctalia-plugins";
}; };
}; };
}; };
pluginSettings = { pluginSettings = {
clipper = { clipper = {
enableTodoIntegration = false; enableTodoIntegration = false;
}; };
todo = {
caldavEnabled = true;
caldavUrl = caldavTasksEndpoint;
caldavUsername = config.swarselsystems.mainUser;
caldavPasswordType = "file";
caldavPasswordCmd = "";
caldavPasswordFile = confLib.getConfig.sops.secrets.radicale-token.path;
caldavSyncInterval = 300;
current_page_id = 1;
pages = [
{
id = 0;
name = "General";
}
{
id = 1;
name = "Work";
}
];
};
privacy-indicator = { privacy-indicator = {
hideInactive = true; hideInactive = true;
iconSpacing = 4; iconSpacing = 4;
@ -27235,8 +27342,8 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
# my fork: # my fork:
showNotificationBadge = true; showNotificationBadge = true;
colorizationEnabled = true; colorizationEnabled = true;
colorizationIcon = "Primary"; colorizationIcon = "None";
colorizationBadge = "Tertiary"; colorizationBadge = "Primary";
colorizationBadgeText = "None"; colorizationBadgeText = "None";
defaultTab = 1; defaultTab = 1;
enableSystemNotifications = true; enableSystemNotifications = true;
@ -27252,7 +27359,11 @@ Apart from configuring Noctalia, I here also add some systemd chains to make sur
}; };
}; };
}; };
} // lib.optionalAttrs (type != "nixos") {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
radicale-token = { path = "${xdgDir}/secrets/radicaleToken"; };
}; };
};
} }
#+end_src #+end_src

View file

@ -99,6 +99,8 @@
simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master"; simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/master";
nixos-nftables-firewall.url = "github:thelegy/nixos-nftables-firewall"; nixos-nftables-firewall.url = "github:thelegy/nixos-nftables-firewall";
pia.url = "github:Swarsel/pia.nix/custom"; pia.url = "github:Swarsel/pia.nix/custom";
niritiling.url = "github:Swarsel/niritiling";
noctoggle.url = "git+ssh://git@github.com/Swarsel/noctoggle.git?ref=main";
}; };
outputs = outputs =

View file

@ -8,6 +8,7 @@
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; gestures.hot-corners.enable = false;
hotkey-overlay.skip-at-startup = true;
debug = { debug = {
honor-xdg-activation-with-invalid-serial = [ ]; honor-xdg-activation-with-invalid-serial = [ ];
}; };
@ -105,17 +106,19 @@
}; };
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 & 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 "${resizer} && niri msg action close-window"; # "Mod+q".action = sh "${resizer} && niri msg action close-window";
"Mod+f".action = sh "${resizer} && exec firefox"; "Mod+q".action = sh "niri msg action close-window";
# "Mod+f".action = sh "${resizer} && exec firefox";
"Mod+f".action = sh "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} && exec noctalia-shell ipc call launcher toggle"; # "Mod+Space".action = sh "${resizer} && exec noctalia-shell ipc call launcher toggle";
"Mod+Space".action = sh "exec noctalia-shell ipc call launcher toggle";
# "Mod+Space".action = sh "${resizer} & exec fuzzel"; # "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";
@ -130,11 +133,16 @@
"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} && exec 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} && exec emacsclient -ce '(org-capture)'"; "Mod+e".action = sh "exec emacsclient -nquc -a emacs -e '(dashboard-open)'";
"Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'"; # "Mod+c".action = sh "${resizer} && exec emacsclient -ce '(org-capture)'";
"Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'"; "Mod+c".action = sh "exec emacsclient -ce '(org-capture)'";
"Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'"; # "Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'";
"Mod+t".action = sh "exec emacsclient -ce '(org-agenda)'";
# "Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'";
"Mod+Shift+m".action = sh "exec emacsclient -ce '(mu4e)'";
# "Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'";
"Mod+Shift+a".action = sh "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";
@ -159,7 +167,8 @@
# "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";
"Mod+Return".action = sh "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";
@ -205,7 +214,7 @@
# { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; } # { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; }
# { command = [ "noctalia-shell" ]; } # { command = [ "noctalia-shell" ]; }
# { argv = [ "pkill" "mako" ]; } # { argv = [ "pkill" "mako" ]; }
{ argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" "tray.target" ]; } { argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" ]; }
]; ];
# workspaces = { # workspaces = {
# "01-Main" = { # "01-Main" = {
@ -218,5 +227,33 @@
}; };
}; };
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config.niri = {
default = [
"gtk"
"gnome"
];
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
"org.freedesktop.impl.portal.ScreenCast" = [ "xdg-desktop-portal-gnome" ];
"org.freedesktop.impl.portal.Screenshot" = [ "xdg-desktop-portal-gnome" ];
};
extraPortals = [
pkgs.gnome-keyring
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-gnome
];
};
swarselmodules.gnome-keyring = lib.swarselsystems.mkStrong true;
home.packages = [
pkgs.nirius
];
}; };
} }

View file

@ -1,8 +1,13 @@
{ self, inputs, config, pkgs, lib, confLib, ... }: { self, inputs, config, pkgs, lib, confLib, type, ... }:
let
inherit (confLib.getConfig.repo.secrets.common) caldavTasksEndpoint;
inherit (config.swarselsystems) xdgDir;
in
{ {
imports = [ imports = [
inputs.noctalia.homeModules.default inputs.noctalia.homeModules.default
]; ];
options.swarselmodules.optional-noctalia = lib.swarselsystems.mkTrueOption;
config = { config = {
systemd.user = { systemd.user = {
targets = { targets = {
@ -11,24 +16,35 @@
}; };
tray = { tray = {
Unit = { Unit = {
After = [ "noctalia-init.service" ]; Wants = [ "noctalia-init.service" ];
PartOf = [ "noctalia-shell.service" ]; After = [
"noctalia-shell.service"
"noctalia-init.service"
];
}; };
Install.WantedBy = [ "noctalia-shell.target" ]; Install.WantedBy = [ "noctalia-shell.target" ];
}; };
}; };
services = { services = {
noctalia-shell = confLib.overrideTarget "noctalia-shell.target"; noctalia-shell = {
Unit.PartOf = [ "noctalia-shell.target" ];
Install.WantedBy = [ "noctalia-shell.target" ];
};
noctalia-init = { noctalia-init = {
Unit = {
Requires = [ "noctalia-shell.service" ];
After = [ "noctalia-shell.service" ];
};
Service = { Service = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.coreutils}/bin/sleep 15"; ExecStart = "${pkgs.coreutils}/bin/sleep 3";
RemainAfterExit = true; RemainAfterExit = true;
}; };
Install = { Install = {
WantedBy = [ "noctalia-shell.target" ]; WantedBy = [ "tray.target" ];
}; };
}; };
}; };
@ -38,7 +54,7 @@
fastfetch.enable = true; fastfetch.enable = true;
noctalia-shell = { noctalia-shell = {
enable = true; enable = true;
package = pkgs.noctalia-shell.override { calendarSupport = true; }; package = pkgs.noctalia-shell;
systemd.enable = true; systemd.enable = true;
settings = { settings = {
bar = { bar = {
@ -58,7 +74,7 @@
frameRadius = 12; frameRadius = 12;
outerCorners = false; outerCorners = false;
hideOnOverview = false; hideOnOverview = false;
displayMode = "auto_hide"; displayMode = "non_exclusive";
autoHideDelay = 100; autoHideDelay = 100;
autoShowDelay = 300; autoShowDelay = 300;
screenOverrides = [ ]; screenOverrides = [ ];
@ -107,7 +123,7 @@
todos = [ ]; todos = [ ];
useCustomColors = false; useCustomColors = false;
}; };
id = "plugin:todo"; id = "plugin:ba7043:todo";
} }
]; ];
center = [ center = [
@ -149,7 +165,7 @@
showUnreadBadge = true; showUnreadBadge = true;
} }
{ {
id = "plugin:ba7043:github-feed"; id = "plugin:github-feed";
} }
{ {
id = "plugin:clipper"; id = "plugin:clipper";
@ -175,7 +191,7 @@
showPowerProfiles = true; showPowerProfiles = true;
} }
{ {
colorName = "primary"; iconColor = "none";
id = "SessionMenu"; id = "SessionMenu";
} }
{ {
@ -189,7 +205,7 @@
} }
{ {
colorizeDistroLogo = false; colorizeDistroLogo = false;
colorizeSystemIcon = "primary"; colorizeSystemIcon = "none";
customIconPath = "${self}/files/icons/swarsel.png"; customIconPath = "${self}/files/icons/swarsel.png";
enableColorization = true; enableColorization = true;
icon = "noctalia"; icon = "noctalia";
@ -322,9 +338,12 @@
viewMode = "list"; viewMode = "list";
showCategories = false; showCategories = false;
iconMode = "native"; iconMode = "native";
density = "compact";
overviewLayer = false;
showIconBackground = false; showIconBackground = false;
enableSettingsSearch = false; enableSettingsSearch = false;
enableWindowsSearch = false; enableWindowsSearch = false;
enableSessionSearch = false;
ignoreMouseInput = true; ignoreMouseInput = true;
screenshotAnnotationTool = ""; screenshotAnnotationTool = "";
}; };
@ -434,36 +453,49 @@
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "L";
} }
{ {
action = "suspend"; action = "suspend";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "S";
} }
{ {
action = "hibernate"; action = "hibernate";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "H";
} }
{ {
action = "reboot"; action = "reboot";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "R";
} }
{ {
action = "logout"; action = "logout";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "U";
} }
{ {
action = "shutdown"; action = "shutdown";
command = ""; command = "";
countdownEnabled = true; countdownEnabled = true;
enabled = true; enabled = true;
keybind = "P";
}
{
action = "rebootToUefi";
command = "";
countdownEnabled = true;
enabled = true;
keybind = "B";
} }
]; ];
}; };
@ -550,7 +582,7 @@
"unicode-picker" "unicode-picker"
"screen-recorder" "screen-recorder"
]) // { ]) // {
github-feed = { todo = {
enabled = true; enabled = true;
sourceUrl = "https://github.com/Swarsel/noctalia-plugins"; sourceUrl = "https://github.com/Swarsel/noctalia-plugins";
}; };
@ -561,6 +593,28 @@
enableTodoIntegration = false; enableTodoIntegration = false;
}; };
todo = {
caldavEnabled = true;
caldavUrl = caldavTasksEndpoint;
caldavUsername = config.swarselsystems.mainUser;
caldavPasswordType = "file";
caldavPasswordCmd = "";
caldavPasswordFile = confLib.getConfig.sops.secrets.radicale-token.path;
caldavSyncInterval = 300;
current_page_id = 1;
pages = [
{
id = 0;
name = "General";
}
{
id = 1;
name = "Work";
}
];
};
privacy-indicator = { privacy-indicator = {
hideInactive = true; hideInactive = true;
iconSpacing = 4; iconSpacing = 4;
@ -598,8 +652,8 @@
# my fork: # my fork:
showNotificationBadge = true; showNotificationBadge = true;
colorizationEnabled = true; colorizationEnabled = true;
colorizationIcon = "Primary"; colorizationIcon = "None";
colorizationBadge = "Tertiary"; colorizationBadge = "Primary";
colorizationBadgeText = "None"; colorizationBadgeText = "None";
defaultTab = 1; defaultTab = 1;
enableSystemNotifications = true; enableSystemNotifications = true;
@ -615,5 +669,9 @@
}; };
}; };
}; };
} // lib.optionalAttrs (type != "nixos") {
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
radicale-token = { path = "${xdgDir}/secrets/radicaleToken"; };
};
}; };
} }

View file

@ -30,7 +30,7 @@
description = "Leon S"; description = "Leon S";
password = lib.mkIf (minimal || config.swarselsystems.isPublic) "setup"; password = lib.mkIf (minimal || config.swarselsystems.isPublic) "setup";
hashedPasswordFile = lib.mkIf (!minimal && !config.swarselsystems.isPublic) config.sops.secrets.main-user-hashed-pw.path; hashedPasswordFile = lib.mkIf (!minimal && !config.swarselsystems.isPublic) config.sops.secrets.main-user-hashed-pw.path;
extraGroups = [ "wheel" ] ++ lib.optionals (!minimal && !config.swarselsystems.isMicroVM) [ "networkmanager" "syncthing" "docker" "lp" "audio" "video" "vboxusers" "libvirtd" "scanner" ]; extraGroups = [ "wheel" ] ++ lib.optionals (!minimal && !config.swarselsystems.isMicroVM) [ "networkmanager" "input" "syncthing" "docker" "lp" "audio" "video" "vboxusers" "libvirtd" "scanner" ];
packages = with pkgs; [ ]; packages = with pkgs; [ ];
}; };
}; };

View file

@ -19,6 +19,7 @@
xwayland-satellite-unstable xwayland-satellite-unstable
]; ];
services.niritiling.enable = true;
programs = { programs = {
niri = { niri = {

View file

@ -11,7 +11,16 @@
services = { services = {
upower.enable = true; # needed for battery percentage upower.enable = true; # needed for battery percentage
gnome.evolution-data-server.enable = true; # needed for calendar integration gnome.evolution-data-server.enable = true; # needed for calendar integration
noctoggle = {
enable = true;
# noctaliaPackage = pkgs.noctalia-shell;
};
};
programs = {
gpu-screen-recorder.enable = true;
evolution.enable = true;
}; };
programs.gpu-screen-recorder.enable = true;
}; };
} }

View file

@ -34,6 +34,8 @@
inputs.swarsel-nix.nixosModules.default inputs.swarsel-nix.nixosModules.default
inputs.nixos-nftables-firewall.nixosModules.default inputs.nixos-nftables-firewall.nixosModules.default
inputs.pia.nixosModules.default inputs.pia.nixosModules.default
inputs.niritiling.nixosModules.default
inputs.noctoggle.nixosModules.default
(inputs.nixos-extra-modules + "/modules/guests") (inputs.nixos-extra-modules + "/modules/guests")
(inputs.nixos-extra-modules + "/modules/interface-naming.nix") (inputs.nixos-extra-modules + "/modules/interface-naming.nix")
"${self}/hosts/nixos/${arch}/${configName}" "${self}/hosts/nixos/${arch}/${configName}"