Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
adc1630
feat: migrate desktop shell to noctalia
RAPSNX Aug 21, 2026
462d63c
feat(noctalia): update config, PAM service, and documentation
RAPSNX Aug 28, 2026
9834874
fix steam / gaming
RAPSNX Aug 29, 2026
cdaa784
docs: add plan for noctalia mode, satty screenshot tool, and keybinds
RAPSNX Aug 29, 2026
5e2054b
feat(hyprland): migrate configuration to lua
RAPSNX Aug 28, 2026
d7b82a9
feat(hyprland): add noctalia mode submap, satty screenshot tool, and …
RAPSNX Aug 31, 2026
29e02ed
Remove PAM shit
RAPSNX Aug 31, 2026
b727ead
Font and minors
RAPSNX Sep 1, 2026
e84ad2f
Add ginkgo
RAPSNX Sep 1, 2026
f1a1ac6
Noctalia submap plugin
RAPSNX Sep 1, 2026
9b5045e
use difftastic
RAPSNX Sep 1, 2026
90bfc2b
Update LazyGit difftastic renderer
RAPSNX Sep 1, 2026
7c119cd
Make Noctalia external locker configurable
RAPSNX Sep 1, 2026
59721b6
shutdown
RAPSNX Sep 1, 2026
423a01a
Fix logout / login zion and reduce changes
RAPSNX Sep 2, 2026
3b6ef78
Cleanup and module extraction
RAPSNX Sep 2, 2026
68c5af6
Split noctalia setup, reduce and simplyfi
RAPSNX Sep 2, 2026
bcf8332
neonix update
RAPSNX Sep 2, 2026
206791e
Add meet room
RAPSNX Sep 3, 2026
39cb19d
llel
RAPSNX Sep 3, 2026
c032e90
Update mapping
RAPSNX Sep 3, 2026
a65a5ad
Update
RAPSNX Sep 3, 2026
f519529
remvoe
RAPSNX Sep 3, 2026
1d2fb53
address review feedback
RAPSNX Sep 3, 2026
964f0a9
Add keyboard layout
RAPSNX Sep 4, 2026
9932a44
Noctalia updates
RAPSNX Sep 7, 2026
5889400
Move to all hyprland
RAPSNX Sep 7, 2026
ef2b0eb
task start
RAPSNX Sep 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ sudo nixos-install --flake .#zion

- [Gaming and Battle.net](./docs/guides/gaming.md)
- [Hyprland - Keymap](./docs/reference/hyprland.md#keymap)
- [Noctalia shell](./docs/reference/noctalia.md)
- [NVIM - Keymap](https://github.com/RAPSNX/neonix/tree/main/docs/keymap.md)

## Licenses
Expand Down
15 changes: 15 additions & 0 deletions docs/hosts/firefly.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,21 @@ Comma-separated list of URLs:
```


### Noctalia Lockscreen & PAM Setup

On Ubuntu, the Noctalia uses PAM (`login` service) and expects the shadow helper at `/run/wrappers/bin/unix_chkpwd`. Because `/run` is a `tmpfs` (cleared on reboot), use `systemd-tmpfiles` to recreate the symlink automatically on every boot:
Also the Ubuntu PAM configs use Debian-specific @include macros, which the upstream Linux-PAM library inside the Nix package does not support.

```bash
printf "d /run/wrappers/bin - - - -\nL+ /run/wrappers/bin/unix_chkpwd - - - - /sbin/unix_chkpwd\n" | sudo tee /etc/tmpfiles.d/nix-wrappers.conf > /dev/null
sudo systemd-tmpfiles --create /etc/tmpfiles.d/nix-wrappers.conf
```

```bash
sudo cp -n /etc/pam.d/login /etc/pam.d/login.bak
printf "auth sufficient pam_unix.so try_first_pass nullok\nauth required pam_deny.so\naccount required pam_unix.so\nsession required pam_unix.so\n" | sudo tee /etc/pam.d/login > /dev/null
Comment thread
RAPSNX marked this conversation as resolved.
Outdated
```

### GTK Theme

`nwg-look` is used to configure theme in multiple locations.
Expand Down
10 changes: 6 additions & 4 deletions docs/reference/hyprland.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ General docs for hyprland.
|---|---|
| `Super+Enter` | Terminal |
| `Super+E` | Launcher |
| `Super+P` | Wlogout |
| `Super+P` | Noctalia session panel |
| `Super+Q` | Kill active |
| `Super+N` | Notification Center |
| `Super+.` | Emoji picker |
| `Super+V` | Clipboard history |
| `Alt+Tab` | Window switcher |
| `Super+N` | Noctalia notification controls |
| `Super+.` | Noctalia emoji search |

## Window

Expand Down Expand Up @@ -61,7 +63,7 @@ General docs for hyprland.
|---|---|
| `Super+Z` | Mumble mute |
| `Super+Shift+Z` | Mumble deaf |
| `Super+.` | Emoji picker |
| `Super+.` | Noctalia emoji search |

## Resize Mode

Expand Down
55 changes: 55 additions & 0 deletions docs/reference/noctalia.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Noctalia
Comment thread
RAPSNX marked this conversation as resolved.

Noctalia is the desktop shell for the Hyprland profiles. Hyprland remains the compositor and window-management layer; Noctalia provides the panel, application and emoji launcher, notifications, session actions, wallpapers, lock screen, idle manager, clipboard history, tray, OSD, and control centre.

The dock is deliberately disabled.

## Configuration model

`modules/home/desktops/noctalia/default.nix` is the declarative baseline. Noctalia's Settings UI may store user-level overrides in its state directory; these survive rebuilds. The shipped baseline is reapplied only when the Home Manager configuration changes.

Zion also enables Noctalia Greeter through Greetd. Firefly uses the shell role only because it is configured as a Home Manager-only profile.

## Migrated components

| Previous component | Noctalia replacement |
|---|---|
| Waybar | Top bar: launcher, workspaces, clock, tray, system monitors and quick controls |
| Fuzzel and Rofi Emoji | Launcher with application, calculator, emoji, wallpaper and window providers |
| SwayNC | Notification daemon and notification history |
| Wlogout | Session panel with lock, hibernate, logout, suspend, shutdown and reboot actions |
| Hyprpaper | Native wallpaper service |
| Hyprlock | Native lock screen |
| Hypridle | Native idle manager |
| NetworkManager and Blueman tray applets | Noctalia control-centre widgets and tray |
| Pavucontrol | Noctalia audio controls |
| Grimblast package | Noctalia screenshot service |

Noctalia additionally enables clipboard history, screen time, per-output wallpapers, a system monitor, calendar, scheduled night light, brightness OSD, and a Windows-reboot session action on Zion.

## Wallpaper migration

A one-time user service transfers the legacy Hyprpaper assignments after Noctalia starts. It records completion in `$XDG_STATE_HOME/noctalia/.wallpapers-migrated-v1`, so subsequent rebuilds preserve changes made through Noctalia.

| Previous output selector | Wallpaper |
|---|---|
| `eDP-1` | `anime-city.jpg` |
| `DP-1` | `gohan-supersaiyan.png` |
| Dell `AW2725Q G2QC174` | `luffy-gear-5.jpg` |
| Samsung `LC27G7xT H4ZNC00167` | `one-piece-logo.jpg` |
| fallback | `minimal-space.jpg` |

Remove that marker only when the declarative migration should be run again.

## Shell shortcuts

| Key | Action |
|---|---|
| `Super+E` | Toggle launcher |
| `Super+P` | Toggle session panel |
| `Super+N` | Open notification controls |
| `Alt+V` / `AltGr+V` | Toggle clipboard history |
| `AltGr+C` | Toggle calendar |
| `AltGr+S` | Toggle system monitor |
| `Super+.` | Open emoji search |
| `Alt+Tab` | Open window switcher |
84 changes: 69 additions & 15 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,24 @@
nixos-hardware.url = "github:nixos/nixos-hardware/master";
catppuccin.url = "github:catppuccin/nix";

noctalia = {
url = "github:noctalia-dev/noctalia/cachix";
};
noctalia-greeter = {
url = "github:noctalia-dev/noctalia-greeter";
inputs.nixpkgs.follows = "nixpkgs";
};

import-tree.url = "github:vic/import-tree";
};

nixConfig = {
extra-substituters = [ "https://noctalia.cachix.org" ];
extra-trusted-public-keys = [
"noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4="
];
};

outputs =
inputs@{
self,
Expand Down Expand Up @@ -68,6 +83,8 @@

nixosModules = [
inputs.catppuccin.nixosModules.catppuccin
inputs.noctalia.nixosModules.default
inputs.noctalia-greeter.nixosModules.default
(inputs.import-tree.match ".*/default\\.nix" ./modules/nixos)
./modules/nix.nix
];
Expand Down
8 changes: 2 additions & 6 deletions hosts/firefly/home.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,11 @@
];

desktop = {
noctalia.enable = true;

hyprland = {
enable = true;
configOnly = true;

hyprlock.enable = false;
hypridle = {
enable = true;
cmd = "/usr/bin/swaylock";
};
autostart = [
"sleep 3 && mumble" # Need to sleep for tray icon
"firefox"
Expand Down
28 changes: 27 additions & 1 deletion hosts/zion/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
{ pkgs, ... }:
{
lib,
config,
pkgs,
...
}:
{
imports = [
./hardware-configuration.nix
Expand Down Expand Up @@ -39,6 +44,27 @@
};
Comment thread
RAPSNX marked this conversation as resolved.
};

programs.noctalia = {
enable = true;
recommendedServices.enable = true;
};

programs.noctalia-greeter = {
enable = true;
settings = {
keyboard = {
layout = "eu,de,de";
variant = ",neo_qwertz,";
};
idle.timeout = 300;
};
};

services.greetd.settings.default_session = {
command = lib.mkForce "${config.programs.noctalia-greeter.package}/bin/noctalia-greeter-session --";
user = "greeter";
};

security = {
polkit.enable = true;
rtkit.enable = true; # realtime-kit
Expand Down
21 changes: 10 additions & 11 deletions hosts/zion/home.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,27 @@
stateVersion = lib.mkDefault "22.05";
};

# TODO: Check if this is needed
# UMU uses Steam's Proton 11+ runtime instead of maintaining a second copy.
xdg.dataFile."umu/steamrt4" = {
source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.local/share/Steam/steamapps/common/SteamLinuxRuntime_4";
force = true;
};
# xdg.dataFile."umu/steamrt4" = {
# source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.local/share/Steam/steamapps/common/SteamLinuxRuntime_4";
# force = true;
# };
Comment thread
RAPSNX marked this conversation as resolved.
Outdated

roles = {
work = false;
email = "mail@rapsn.me";

desktop = {
noctalia = {
enable = true;
windowsReboot.enable = true;
};

hyprland = {
enable = true;
package = pkgs.hyprland;

hyprlock.enable = true;
hypridle = {
enable = true;
cmd = "${pkgs.hyprlock}/bin/hyprlock";
};
autostart = [
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" # Needed for thunar
"firefox"
"ddcutil --display 2 setvcp 60 0x09" # Focus secondary display
];
Expand Down
3 changes: 0 additions & 3 deletions modules/home/desktops/addons/fuzzel/default.nix

This file was deleted.

Loading