feat(niri): noctalia shell :o

This commit is contained in:
Kat Inskip 2025-10-12 21:34:24 -07:00
parent 540ca5f762
commit adaf2b06e5
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
20 changed files with 408 additions and 72 deletions

62
flake.lock generated
View file

@ -1254,6 +1254,29 @@
"type": "github" "type": "github"
} }
}, },
"noctalia": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"quickshell": "quickshell",
"systems": "systems_2"
},
"locked": {
"lastModified": 1760277691,
"narHash": "sha256-gJ/hLrA7+Nmt0e+K6l0G1ZcFJJKfW4XLmBdwE+yEYKQ=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "14af84ffbe3b944d589519dff72996d6bd527f16",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"ref": "main",
"repo": "noctalia-shell",
"type": "github"
}
},
"norg": { "norg": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
@ -1357,6 +1380,27 @@
"type": "github" "type": "github"
} }
}, },
"quickshell": {
"inputs": {
"nixpkgs": [
"noctalia",
"nixpkgs"
]
},
"locked": {
"lastModified": 1753595452,
"narHash": "sha256-vqkSDvh7hWhPvNjMjEDV4KbSCv2jyl2Arh73ZXe274k=",
"ref": "refs/heads/master",
"rev": "a5431dd02dc23d9ef1680e67777fed00fe5f7cda",
"revCount": 665,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
"original": {
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}
},
"rbw-bitw": { "rbw-bitw": {
"inputs": { "inputs": {
"flakelib": [ "flakelib": [
@ -1424,6 +1468,7 @@
], ],
"nixpkgs-lib": "nixpkgs-lib", "nixpkgs-lib": "nixpkgs-lib",
"nixpkgs-xr": "nixpkgs-xr", "nixpkgs-xr": "nixpkgs-xr",
"noctalia": "noctalia",
"norg": "norg", "norg": "norg",
"norg-meta": "norg-meta", "norg-meta": "norg-meta",
"nur": "nur", "nur": "nur",
@ -1436,7 +1481,7 @@
"spicetify-nix": "spicetify-nix", "spicetify-nix": "spicetify-nix",
"std": "std", "std": "std",
"stylix": "stylix", "stylix": "stylix",
"systems": "systems_2", "systems": "systems_3",
"tree": "tree", "tree": "tree",
"treefmt-nix": "treefmt-nix", "treefmt-nix": "treefmt-nix",
"wezterm": "wezterm" "wezterm": "wezterm"
@ -1718,6 +1763,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": { "tinted-foot": {
"flake": false, "flake": false,
"locked": { "locked": {

View file

@ -304,6 +304,10 @@
flake-compat.follows = "flake-compat"; flake-compat.follows = "flake-compat";
}; };
}; };
noctalia = {
url = "github:noctalia-dev/noctalia-shell/main";
inputs.nixpkgs.follows = "nixpkgs";
};
mewtris = { mewtris = {
url = "github:kittywitch/mewtris/main"; url = "github:kittywitch/mewtris/main";
#url = "path:/home/kat/src/mewtris"; #url = "path:/home/kat/src/mewtris";

View file

@ -38,12 +38,12 @@ in {
packages' = [ packages' = [
"udiskie" "udiskie"
"easyeffects" "easyeffects"
"pasystray" #"pasystray"
]; ];
packages = [ packages = [
"pasystray" #"pasystray"
"pavucontrol" #"pavucontrol"
"networkmanagerapplet" #"networkmanagerapplet"
]; ];
packageCommands = let packageCommands = let
packageCommands' = map packageCommand' packages'; packageCommands' = map packageCommand' packages';

View file

@ -22,6 +22,7 @@ in {
bindWorkspace "0" 10 bindWorkspace "0" 10
) )
]; ];
noctalia = "${getExe parent.services.noctalia-shell.package} ipc call";
# See tip near https://github.com/sodiboo/niri-flake/blob/main/docs.md#user-content-programsnirisettingsbindsnameaction # See tip near https://github.com/sodiboo/niri-flake/blob/main/docs.md#user-content-programsnirisettingsbindsnameaction
sh = config.lib.niri.actions.spawn "sh" "-c"; sh = config.lib.niri.actions.spawn "sh" "-c";
# ▀▀█ # ▀▀█
@ -35,9 +36,13 @@ in {
personalBindings = { personalBindings = {
"Mod+Return".action = sh ''${getExe config.programs.alacritty.package}''; "Mod+Return".action = sh ''${getExe config.programs.alacritty.package}'';
"Mod+T".action.toggle-window-floating = {}; "Mod+T".action.toggle-window-floating = {};
"Mod+D".action = sh ''${getExe config.programs.fuzzel.package} -D no -T "${getExe config.programs.alacritty.package} --command"''; #"Mod+D".action = sh ''${getExe config.programs.fuzzel.package} -D no -T "${getExe config.programs.alacritty.package} --command"'';
"Mod+Escape".action = sh ''${getExe config.programs.wlogout.package} -p layer-shell''; "Mod+D".action = sh ''${noctalia} launcher toggle'';
"Mod+Shift+Escape".action = sh ''${getExe config.programs.swaylock.package} -f''; "Mod+Shift+D".action = sh ''${noctalia} launcher clipboard'';
#"Mod+Escape".action = sh ''${getExe config.programs.wlogout.package} -p layer-shell'';
"Mod+Escape".action = sh ''${noctalia} sessionMenu toggle'';
#"Mod+Shift+Escape".action = sh ''${getExe config.programs.swaylock.package} -f'';
"Mod+Shift+Escape".action = sh ''${noctalia} lockScreen toggle'';
"Mod+Tab" = { "Mod+Tab" = {
#repeat = false; #repeat = false;
cooldown-ms = 150; cooldown-ms = 150;
@ -221,7 +226,31 @@ in {
action = sh ''${swayosd-client} --output-volume mute-toggle''; action = sh ''${swayosd-client} --output-volume mute-toggle'';
}; };
}; };
mediaBindingsAvizoless = mkIf (!(config.services.avizo.enable || config.services.swayosd.enable)) { mediaBindingsNoctalia = let
vol = "${noctalia} volume";
bl = "${noctalia} brightness";
in
mkIf config.programs.noctalia-shell.enable {
"XF86MonBrightnessUp".action = sh ''${bl} increase'';
"XF86MonBrightnessDown".action = sh ''${bl} decrease'';
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action = sh ''${vol} increase'';
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action = sh ''${vol} decrease'';
};
"XF86AudioMute" = {
allow-when-locked = true;
action = sh ''${vol} muteOutput'';
};
"Shift+XF86AudioMute" = {
allow-when-locked = true;
action = sh ''${vol} muteInput'';
};
};
mediaBindingsAvizoless = mkIf (!(config.services.avizo.enable || config.programs.noctalia-shell.enable || config.services.swayosd.enable)) {
"XF86MonBrightnessUp".action = sh ''${getExe pkgs.brightnessctl} -c backlight set 5%+''; "XF86MonBrightnessUp".action = sh ''${getExe pkgs.brightnessctl} -c backlight set 5%+'';
"XF86MonBrightnessDown".action = sh ''${getExe pkgs.brightnessctl} -c backlight set 5%-''; "XF86MonBrightnessDown".action = sh ''${getExe pkgs.brightnessctl} -c backlight set 5%-'';
"XF86AudioRaiseVolume".action = sh ''${parent.services.wireplumber.package}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+''; "XF86AudioRaiseVolume".action = sh ''${parent.services.wireplumber.package}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+'';
@ -235,6 +264,7 @@ in {
personalBindings personalBindings
mediaBindingsCommon mediaBindingsCommon
mediaBindingsAvizo mediaBindingsAvizo
mediaBindingsNoctalia
mediaBindingsSwayOSD mediaBindingsSwayOSD
mediaBindingsAvizoless mediaBindingsAvizoless
]); ]);

View file

@ -1,6 +1,6 @@
{config, ...}: { {config, ...}: {
stylix.targets.fuzzel.enable = config.programs.fuzzel.enable; stylix.targets.fuzzel.enable = config.programs.fuzzel.enable;
programs.fuzzel = { programs.fuzzel = {
enable = true; enable = false;
}; };
} }

View file

@ -0,0 +1,255 @@
{
config,
lib,
...
}: let
inherit (lib.meta) getExe;
in {
programs.noctalia-shell = {
enable = true;
settings = {
settingsVersion = 15;
bar = {
position = "top";
backgroundOpacity = 0.9;
monitors = [];
density = "comfortable";
showCapsule = true;
floating = true;
marginVertical = 0.25;
marginHorizontal = 0.25;
widgets = {
left = [
{
id = "Workspace";
labelMode = "name";
}
{
id = "ActiveWindow";
widgetWidth = 300;
}
];
center = [
{
id = "MediaMini";
showAlbumArt = true;
showVisualizer = true;
scrollingMode = "always";
# check if this works,
# if not, rewrite their system for it o.o
widgetWidth = 300;
}
{
id = "Clock";
formatHorizontal = "yyyy-MM-dd HH:mm t";
}
{
id = "NightLight";
}
{
id = "DarkMode";
}
{
id = "KeepAwake";
}
{
id = "ScreenRecorder";
}
];
right = [
{
id = "SystemMonitor";
}
{
id = "Tray";
}
{
id = "NotificationHistory";
}
{
id = "Battery";
}
{
id = "Volume";
}
{
id = "Brightness";
}
{
id = "ControlCenter";
}
];
};
};
general = {
avatarImage = ../../user/avatar.jpg;
dimDesktop = false;
showScreenCorners = false;
forceBlackScreenCorners = false;
radiusRatio = 1;
screenRadiusRatio = 1;
animationSpeed = 1;
animationDisabled = false;
};
location = {
name = "Vancouver";
useFahrenheit = false;
use12hourFormat = false;
showWeekNumberInCalendar = false;
};
screenRecorder = {
directory = "${config.home.homeDirectory}/Videos/";
frameRate = 60;
audioCodec = "opus";
videoCodec = "h264";
quality = "very_high";
colorRange = "limited";
showCursor = true;
audioSource = "default_output";
videoSource = "portal";
};
wallpaper = {
# konawall
enabled = false;
directory = "";
enableMultiMonitorDirectories = false;
setWallpaperOnAllMonitors = true;
defaultWallpaper = "";
fillMode = "crop";
fillColor = "#000000";
randomEnabled = false;
randomIntervalSec = 300;
transitionDuration = 1500;
transitionType = "random";
transitionEdgeSmoothness = 0.05;
monitors = [];
};
appLauncher = {
enableClipboardHistory = true;
position = "center";
backgroundOpacity = 1;
pinnedExecs = [];
useApp2Unit = false;
sortByMostUsed = true;
terminalCommand = "${getExe config.programs.alacritty.package}";
};
controlCenter = {
position = "close_to_bar_button";
quickSettingsStyle = "compact";
widgets = {
quickSettings = [
{
id = "WiFi";
}
{
id = "Bluetooth";
}
{
id = "Notifications";
}
{
id = "ScreenRecorder";
}
{
id = "PowerProfile";
}
{
id = "WallpaperSelector";
}
];
};
};
dock = {
displayMode = "auto_hide";
backgroundOpacity = 1;
floatingRatio = 1;
onlySameOutput = true;
monitors = [];
pinnedApps = [];
};
network = {
wifiEnabled = true;
};
notifications = {
doNotDisturb = false;
monitors = [];
location = "top_right";
alwaysOnTop = false;
lastSeenTs = 0;
respectExpireTimeout = false;
lowUrgencyDuration = 3;
normalUrgencyDuration = 8;
criticalUrgencyDuration = 15;
};
osd = {
enabled = true;
location = "top_right";
monitors = [];
autoHideMs = 2000;
};
audio = {
volumeStep = 5;
volumeOverdrive = false;
cavaFrameRate = 60;
visualizerType = "linear";
mprisBlacklist = [];
preferredPlayer = "";
};
ui = {
fontDefault = config.stylix.fonts.sansSerif;
fontFixed = config.stylix.fonts.monospace;
fontDefaultScale = 1;
fontFixedScale = 1;
monitorsScaling = [
{
name = "DP-2";
scale = 1.25;
}
];
idleInhibitorEnabled = false;
tooltipsEnabled = true;
};
brightness = {
brightnessStep = 5;
};
colorSchemes = {
useWallpaperColors = false;
predefinedScheme = "Dracula";
darkMode = true;
matugenSchemeType = "scheme-fruit-salad";
generateTemplatesForPredefined = true;
};
templates = {
gtk = false;
qt = false;
kitty = false;
ghostty = false;
foot = false;
fuzzel = false;
discord = false;
discord_vesktop = false;
discord_webcord = false;
discord_armcord = false;
discord_equibop = false;
discord_lightcord = false;
discord_dorion = false;
pywalfox = false;
enableUserTemplates = false;
};
nightLight = {
enabled = false;
forced = false;
autoSchedule = true;
nightTemp = "4000";
dayTemp = "6500";
manualSunrise = "06:30";
manualSunset = "18:30";
};
hooks = {
enabled = false;
wallpaperChange = "";
darkModeChange = "";
};
};
};
}

View file

@ -1,10 +1,18 @@
{config, ...}: { {
config,
lib,
parent,
...
}: let
inherit (lib.meta) getExe;
noctalia = "${getExe parent.services.noctalia-shell.package} ipc call";
in {
services.swayidle = { services.swayidle = {
enable = true; enable = true;
timeouts = [ timeouts = [
{ {
timeout = 600; timeout = 600;
command = "${config.programs.swaylock.package}/bin/swaylock* -f"; command = "${noctalia} lockScreen toggle";
} }
{ {
timeout = 1200; timeout = 1200;
@ -14,7 +22,7 @@
events = [ events = [
{ {
event = "before-sleep"; event = "before-sleep";
command = "${config.programs.swaylock.package}/bin/swaylock* -f"; command = "${noctalia} lockScreen toggle";
} }
]; ];
}; };

View file

@ -1,6 +1,6 @@
{pkgs, ...}: { {pkgs, ...}: {
programs.swaylock = { programs.swaylock = {
enable = true; enable = false;
package = pkgs.swaylock-effects; package = pkgs.swaylock-effects;
settings = { settings = {
screenshots = true; screenshots = true;

View file

@ -9,7 +9,7 @@ _: {
}; };
}; };
services.swaync = { services.swaync = {
enable = true; enable = false;
settings = { settings = {
positionX = "right"; positionX = "right";
positionY = "top"; positionY = "top";

View file

@ -49,7 +49,7 @@ _:
#in #in
{ {
services.swayosd = { services.swayosd = {
enable = true; enable = false;
#stylePath = theme; #stylePath = theme;
}; };
} }

View file

@ -1,6 +1,6 @@
_: { _: {
programs.waybar = { programs.waybar = {
enable = true; #enable = true;
systemd.enable = true; systemd.enable = true;
style = '' style = ''
* { * {

View file

@ -1,6 +1,6 @@
_: { _: {
programs.wofi = { programs.wofi = {
enable = true; enable = false;
settings = { settings = {
insensitive = true; insensitive = true;
allow_images = true; allow_images = true;

View file

@ -19,7 +19,7 @@
opacity = { opacity = {
desktop = 1.0; desktop = 1.0;
applications = 1.0; applications = 1.0;
terminal = 1.0; terminal = 0.9;
popups = 0.8; popups = 0.8;
}; };
fonts = { fonts = {
@ -38,6 +38,6 @@
}; };
autoEnable = true; autoEnable = true;
polarity = "light"; polarity = "light";
base16Scheme = "${pkgs.base16-schemes}/share/themes/monokai.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/dracula.yaml";
}; };
} }

View file

@ -44,8 +44,6 @@ _: {
"display" "display"
"terminal" "terminal"
"break" "break"
"chassis"
"board"
{ {
type = "cpu"; type = "cpu";
showPeCoreCount = true; showPeCoreCount = true;
@ -65,35 +63,12 @@ _: {
"break" "break"
"disk" "disk"
"zpool" "zpool"
{
type = "physicaldisk";
temp = true;
}
"lm" "lm"
"wm" "wm"
"theme" "theme"
"wmtheme" "wmtheme"
"icons" "icons"
"font"
"cursor" "cursor"
"terminal"
"terminalfont"
"terminalsize"
"terminaltheme"
"break"
{
type = "weather";
timeout = 1000;
}
"dns"
"break"
"break"
"bluetooth"
"break"
"player"
"media"
"break"
"colors"
]; ];
}; };
}; };

BIN
home/user/avatar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -39,6 +39,6 @@
}; };
}; };
autoEnable = true; autoEnable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/monokai.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/dracula.yaml";
}; };
} }

View file

@ -3,4 +3,5 @@
enable = true; enable = true;
package = pkgs.niri-unstable; package = pkgs.niri-unstable;
}; };
services.noctalia-shell.enable = true;
} }

View file

@ -1,5 +1,4 @@
{lib, ...} @ specyArgs: let _: let
inherit (lib.attrsets) removeAttrs;
hostConfig = { hostConfig = {
tree, tree,
modulesPath, modulesPath,
@ -10,8 +9,8 @@
(modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
] ]
++ (with tree.nixos; [ ++ (with tree.nixos; [
container-host #container-host
microvm-host #microvm-host
]) ])
++ (with tree.nixos.profiles; [ ++ (with tree.nixos.profiles; [
server server
@ -28,26 +27,26 @@
# TODO: Add config.microvm.stateDir to backup schedule? # TODO: Add config.microvm.stateDir to backup schedule?
# TODO: figure out updateFlake? # TODO: figure out updateFlake?
microvm = { #microvm = {
host.enable = true; # host.enable = true;
vms = { # vms = {
syncthing = { # syncthing = {
autostart = true; # autostart = true;
specialArgs = removeAttrs specyArgs ["config" "pkgs" "lib"]; # specialArgs = removeAttrs specyArgs ["config" "pkgs" "lib"];
config = { # config = {
imports = [ # imports = [
tree.nixos.servers.syncthing # tree.nixos.servers.syncthing
]; # ];
services = { # services = {
syncthing = { # syncthing = {
enable = true; # enable = true;
}; # };
}; # };
}; # };
restartIfChanged = true; # restartIfChanged = true;
}; # };
}; # };
}; #};
system.stateVersion = "23.11"; system.stateVersion = "23.11";
}; };

View file

@ -220,8 +220,10 @@ _: let
initrd = { initrd = {
availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
}; };
kernelModules = ["nct6775" "kvm-amd"]; kernelModules = ["nct6775" "kvm-amd" "k10temp"];
extraModulePackages = [config.boot.kernelPackages.v4l2loopback.out]; extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback.out
];
supportedFilesystems = ["ntfs" "zfs"]; supportedFilesystems = ["ntfs" "zfs"];
}; };

View file

@ -93,6 +93,7 @@
stylix.nixosModules.stylix stylix.nixosModules.stylix
microvm.nixosModules.host microvm.nixosModules.host
mewtris.nixosModules.mewtris mewtris.nixosModules.mewtris
noctalia.nixosModules.default
]; ];
}; };
}; };
@ -114,6 +115,7 @@
chaotic.homeManagerModules.default chaotic.homeManagerModules.default
spicetify-nix.homeManagerModules.spicetify spicetify-nix.homeManagerModules.spicetify
stylix.homeModules.stylix stylix.homeModules.stylix
noctalia.homeModules.default
] ]
++ (with (import (inputs.arcexprs + "/modules")).home-manager; [ ++ (with (import (inputs.arcexprs + "/modules")).home-manager; [
i3gopher i3gopher