mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-11-13 12:13:46 +01:00
Merge pull request #273 from ryan4yin/feat/noctalia-v5
feat(noctalia): upgrade to the native v5 shell
This commit is contained in:
19 files changed
+157
-843
No files matched your search
@@ -58,7 +58,7 @@ You don't have to go through the pain I've experienced again! Check out my
|
||||
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| **Window Manager** | [Niri][Niri] |
|
||||
| **Terminal Emulator** | [Zellij][Zellij] + [foot][foot]/[Kitty][Kitty]/[Alacritty][Alacritty]/[Ghostty][Ghostty] |
|
||||
| **Status Bar** / **Notifier** / **Launcher** / **lockscreens** | [noctalia-shell][noctalia-shell] |
|
||||
| **Status Bar** / **Notifier** / **Launcher** / **lockscreens** | [noctalia][noctalia] |
|
||||
| **Display Manager** | [tuigreet][tuigreet] |
|
||||
| **Color Scheme** | [catppuccin-nix][catppuccin-nix] |
|
||||
| **network management tool** | [NetworkManager][NetworkManager] |
|
||||
@@ -209,4 +209,4 @@ Other dotfiles that inspired me:
|
||||
[Btrfs]: https://btrfs.readthedocs.io
|
||||
[LUKS]: https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system
|
||||
[lanzaboote]: https://github.com/nix-community/lanzaboote
|
||||
[noctalia-shell]: https://github.com/noctalia-dev/noctalia-shell
|
||||
[noctalia]: https://github.com/noctalia-dev/noctalia
|
||||
@@ -24,6 +24,9 @@ in
|
||||
xdg.configFile."niri/niri-hardware.kdl".source =
|
||||
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl";
|
||||
|
||||
# Host-specific Noctalia config; merges after the shared config.toml.
|
||||
xdg.configFile."noctalia/host-shoukei.toml".source = ./12kingdoms-shoukei/noctalia.toml;
|
||||
|
||||
# The built-in laptop speakers are quiet, so boost above the -23 dB default.
|
||||
services.easyeffects.extraPresets."loudness-normalization".output."autogain#0".target = -12.0;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
# shoukei (laptop) specific Noctalia config.
|
||||
# Installed as ~/.config/noctalia/host-shoukei.toml, which sorts after
|
||||
# config.toml in Noctalia's alphabetical merge, so it can override the shared
|
||||
# baseline.
|
||||
|
||||
[brightness.monitor.eDP-1]
|
||||
backend = "backlight"
|
||||
backlight_device = "apple-panel-bl"
|
||||
@@ -13,8 +13,8 @@ Manager.
|
||||
### Base Desktop Environment
|
||||
|
||||
- **base**: Common desktop configurations shared across all environments, including:
|
||||
- **Noctalia Shell**: All-in-one Wayland desktop shell (replaces gammastep, swaylock, anyrun,
|
||||
mako, waybar, wallpaper-switcher, wlogout, and other desktop tools)
|
||||
- **Noctalia**: native (v5) all-in-one Wayland desktop shell (replaces gammastep, swaylock,
|
||||
anyrun, mako, waybar, wallpaper-switcher, wlogout, grim/slurp/satty, and other desktop tools)
|
||||
- Creative tools and media applications
|
||||
- Development tools
|
||||
- Fcitx5 input method framework
|
||||
@@ -34,10 +34,10 @@ Manager.
|
||||
1. **Configuration Location**: Desktop environment configuration files are located in `~/.config`,
|
||||
which can be easily managed by Home Manager.
|
||||
|
||||
2. **User-specific Services**: User-specific systemd services (noctalia-shell, fcitx5, hypridle,
|
||||
etc.) can be easily managed by Home Manager. If desktop environments were configured via NixOS
|
||||
Module, these user-level services might fail to start automatically. With Home Manager modules,
|
||||
we can control systemd service dependency order more effectively.
|
||||
2. **User-specific Services**: User-specific systemd services (noctalia, fcitx5, hypridle, etc.) can
|
||||
be easily managed by Home Manager. If desktop environments were configured via NixOS Module,
|
||||
these user-level services might fail to start automatically. With Home Manager modules, we can
|
||||
control systemd service dependency order more effectively.
|
||||
|
||||
3. **System Benefits**: By minimizing package installation through NixOS Module:
|
||||
- Makes the NixOS system more secure and stable
|
||||
|
||||
@@ -12,40 +12,54 @@ The configuration is organized into modular components that can be selectively e
|
||||
- **Development Tools**: IDEs and development utilities
|
||||
- **System Integration**: Input methods, theming, XDG specifications, GPU settings
|
||||
|
||||
## Noctalia Shell
|
||||
## Noctalia
|
||||
|
||||
**Noctalia Shell** is an all-in-one Wayland desktop shell that replaces multiple separate tools with
|
||||
a single, unified solution. It provides:
|
||||
**Noctalia** (v5) is a native C++/Wayland all-in-one desktop shell that replaces multiple separate
|
||||
tools with a single, unified solution. It is installed and configured through the upstream
|
||||
[`programs.noctalia`](https://docs.noctalia.dev/noctalia/getting-started/nixos/) Home Manager
|
||||
module, which validates the TOML at build time.
|
||||
|
||||
- **Unified Configuration**: All components configured in a single `settings.json` file
|
||||
- **Consistent Experience**: Cohesive visual design and interaction patterns
|
||||
- **Reduced Complexity**: No need to maintain multiple separate config files
|
||||
### Configuration
|
||||
|
||||
Noctalia merges **every `*.toml` in the config directory** (`~/.config/noctalia/`), sorted
|
||||
alphabetically, and then layers the Settings UI's own overrides on top:
|
||||
|
||||
| Layer | Location | Notes |
|
||||
| -------------------- | ----------------------------------------------------------------- | ----------------------------------------------- |
|
||||
| Declarative baseline | `~/.config/noctalia/*.toml` (repo: `noctalia/config/config.toml`) | Merged alphabetically; `[include]` supported |
|
||||
| GUI overrides | `~/.local/state/noctalia/settings.toml` | Written by the Settings UI; loads last and wins |
|
||||
|
||||
`noctalia config export merged` prints the effective user config and `noctalia config validate`
|
||||
checks a file. Application theming stays with `catppuccin/nix`, so Noctalia's theme templates are
|
||||
disabled.
|
||||
|
||||
### Component Replacement
|
||||
|
||||
Noctalia Shell consolidates functionality that previously required multiple tools:
|
||||
Noctalia consolidates functionality that previously required multiple tools:
|
||||
|
||||
| Traditional Component | Purpose | Noctalia Replacement |
|
||||
| ---------------------- | -------------------- | ------------------------------ |
|
||||
| **gammastep** | Blue light filter | `nightLight` configuration |
|
||||
| **swaylock** | Screen locker | Built-in lock screen |
|
||||
| **anyrun** | Application launcher | `appLauncher` |
|
||||
| **mako** | Notification daemon | `notifications` |
|
||||
| **waybar** | Status bar | `bar` (with widgets) |
|
||||
| **wallpaper-switcher** | Wallpaper management | `wallpaper` (with transitions) |
|
||||
| **wlogout** | Session menu | `sessionMenu` |
|
||||
| **wl-clipboard** | Clipboard management | Built-in clipboard manager |
|
||||
| Traditional Component | Purpose | Noctalia counterpart |
|
||||
| ---------------------- | ------------------------ | ------------------------------------------------- |
|
||||
| **gammastep** | Blue light filter | `[nightlight]` |
|
||||
| **swaylock** | Screen locker | built-in lock screen (`[lockscreen]`) |
|
||||
| **anyrun** | Application launcher | launcher panel (`[shell.launcher]`) |
|
||||
| **mako** | Notification daemon | `[notification]` |
|
||||
| **waybar** | Status bar | `[bar]` + `[widget.*]` |
|
||||
| **wallpaper-switcher** | Wallpaper management | `[wallpaper]` |
|
||||
| **wlogout** | Session menu | `[shell.session]` |
|
||||
| **wl-clipboard** | Clipboard management | built-in clipboard (encrypted history) |
|
||||
| **grim/slurp/satty** | Screenshots + annotation | built-in `[shell.screenshot]` + annotation editor |
|
||||
|
||||
## Configuration Modules
|
||||
|
||||
### Desktop Shell
|
||||
|
||||
- **[`noctalia/default.nix`](./noctalia/default.nix)**: Package installation and systemd service
|
||||
- **[`noctalia/settings.json`](./noctalia/settings.json)**: Main configuration with all settings
|
||||
- **[`noctalia/default.nix`](./noctalia/default.nix)**: enables the upstream `programs.noctalia`
|
||||
module
|
||||
- **[`noctalia/config/config.toml`](./noctalia/config/config.toml)**: declarative baseline (v5 TOML)
|
||||
|
||||
Key features: bar, control center, night light, wallpaper, session menu, system monitor,
|
||||
audio/volume, brightness, screen recorder, calendar, color schemes, dock, notifications, OSD, and
|
||||
more.
|
||||
Key features: bar and widgets, control center, desktop widgets, night light, wallpaper, session
|
||||
panel, screenshots with annotation, system monitor, audio/volume, brightness, calendar/weather,
|
||||
color schemes, dock, notifications, OSD, clipboard, and more.
|
||||
|
||||
- **[`hypridle/`](./hypridle/)**: Idle management
|
||||
|
||||
@@ -61,7 +75,8 @@ Noctalia Shell consolidates functionality that previously required multiple tool
|
||||
|
||||
### Applications
|
||||
|
||||
- **[`desktop-tools.nix`](./desktop-tools.nix)**: Daily GUI apps (foliate, remmina, messaging)
|
||||
- **[`desktop-tools.nix`](./desktop-tools.nix)**: Wayland session tools (clipboard, color picker,
|
||||
brightness, audio, screen recording, auto-mount, `wlogout` emergency fallback)
|
||||
- **[`browsers.nix`](./browsers.nix)**: Web browsers
|
||||
- **[`editors.nix`](./editors.nix)**: Desktop text editors
|
||||
- **[`media.nix`](./media.nix)**: Media players
|
||||
@@ -75,10 +90,10 @@ Noctalia Shell consolidates functionality that previously required multiple tool
|
||||
|
||||
### System Utilities
|
||||
|
||||
- **[`misc.nix`](./misc.nix)**: Wayland tools (screenshots, screen recording, color picker, audio)
|
||||
- **[`misc.nix`](./misc.nix)**: Misc GUI apps (e-book reader, remote desktop, hardened IM clients)
|
||||
- **[`immutable-file.nix`](./immutable-file.nix)**: Immutable file handling
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- Noctalia Shell: https://docs.noctalia.dev/docs
|
||||
- Noctalia Shell: https://docs.noctalia.dev/noctalia/
|
||||
- Parent: [`../README.md`](../README.md)
|
||||
@@ -16,26 +16,19 @@
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
swaybg # the wallpaper
|
||||
wl-clipboard # copying and pasting
|
||||
hyprpicker # color picker
|
||||
brightnessctl
|
||||
# audio
|
||||
alsa-utils # provides amixer/alsamixer/...
|
||||
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||
# screenshot/screencast
|
||||
flameshot
|
||||
hyprshot # screen shot
|
||||
# screen recording
|
||||
wf-recorder # screen recording
|
||||
|
||||
virt-viewer # vnc connect to VM, used by kubevirt
|
||||
];
|
||||
|
||||
# screen locker
|
||||
programs.swaylock.enable = true;
|
||||
catppuccin.swaylock.enable = false;
|
||||
|
||||
# Logout Menu
|
||||
# Emergency session-menu fallback; the normal flow uses Noctalia's session panel.
|
||||
programs.wlogout.enable = true;
|
||||
|
||||
# auto mount usb drives
|
||||
|
||||
@@ -30,8 +30,8 @@ in
|
||||
|
||||
settings = {
|
||||
general = {
|
||||
lock_cmd = "noctalia-shell ipc call lockScreen lock";
|
||||
before_sleep_cmd = "noctalia-shell ipc call lockScreen lock";
|
||||
lock_cmd = "noctalia msg session lock";
|
||||
before_sleep_cmd = "noctalia msg session lock";
|
||||
# niri already owns org.freedesktop.ScreenSaver and feeds its
|
||||
# inhibitors into the compositor idle notifier, so hypridle must not
|
||||
# try to claim the interface (it would log "already providing...").
|
||||
@@ -63,7 +63,7 @@ in
|
||||
# Skip while media is playing, same as screen-off above.
|
||||
condition_cmd = "! playerctl -a status 2>/dev/null | grep -q '^Playing$'";
|
||||
condition_retry = 30;
|
||||
on-timeout = "noctalia-shell ipc call lockScreen lock";
|
||||
on-timeout = "noctalia msg session lock";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
# auto-generated from wallpaper
|
||||
colors.json
|
||||
@@ -0,0 +1,54 @@
|
||||
# Noctalia v5 — minimal declarative baseline.
|
||||
# Everything else is tuned in the Settings UI: those changes go to
|
||||
# ~/.local/state/noctalia/settings.toml (persisted) and take precedence.
|
||||
|
||||
[accessibility]
|
||||
# Content scale for panels and other non-bar shell UI.
|
||||
ui_scale = 1.1
|
||||
|
||||
[shell]
|
||||
font_family = "Maple Mono NF CN"
|
||||
avatar_path = "~/nix-config/_img/myself.jpg"
|
||||
# Declarative deployment: state (~/.local/state/noctalia) is not persisted, so do
|
||||
# not auto-open the first-run wizard every boot.
|
||||
setup_wizard_enabled = false
|
||||
|
||||
[shell.screenshot]
|
||||
# Capture a region, then open the built-in annotation editor (replaces grim/slurp/satty).
|
||||
annotate = true
|
||||
directory = "~/Pictures/Screenshots"
|
||||
|
||||
[theme]
|
||||
source = "builtin"
|
||||
builtin = "Catppuccin"
|
||||
|
||||
# Application theming is managed by catppuccin/nix, so Noctalia templates stay off.
|
||||
[theme.templates]
|
||||
enable_builtin_templates = false
|
||||
enable_community_templates = false
|
||||
|
||||
[wallpaper]
|
||||
directory = "/home/ryan/Pictures/Wallpapers"
|
||||
|
||||
[wallpaper.automation]
|
||||
enabled = true
|
||||
interval_seconds = 600
|
||||
|
||||
[wallpaper.default]
|
||||
path = "/home/ryan/Pictures/Wallpapers/rolling-girls_lalala.png"
|
||||
|
||||
[location]
|
||||
address = "Changsha"
|
||||
|
||||
[weather]
|
||||
enabled = true
|
||||
|
||||
# Eye protection: hold the warm night temperature all the time.
|
||||
[nightlight]
|
||||
enabled = true
|
||||
force = true
|
||||
|
||||
[bar.main]
|
||||
background_opacity = 0.2
|
||||
# Text-only bump; `scale` would enlarge glyphs and spacing too.
|
||||
font_scale = 1.1
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"enabled": true,
|
||||
"name": "Noctalia Plugins",
|
||||
"url": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
}
|
||||
],
|
||||
"states": {},
|
||||
"version": 2
|
||||
}
|
||||
@@ -1,695 +0,0 @@
|
||||
{
|
||||
"appLauncher": {
|
||||
"autoPasteClipboard": false,
|
||||
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
|
||||
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
|
||||
"clipboardWrapText": true,
|
||||
"customLaunchPrefix": "",
|
||||
"customLaunchPrefixEnabled": false,
|
||||
"density": "default",
|
||||
"enableClipPreview": true,
|
||||
"enableClipboardChips": true,
|
||||
"enableClipboardHistory": true,
|
||||
"enableClipboardSmartIcons": true,
|
||||
"enableSessionSearch": true,
|
||||
"enableSettingsSearch": true,
|
||||
"enableWindowsSearch": true,
|
||||
"iconMode": "native",
|
||||
"ignoreMouseInput": false,
|
||||
"overviewLayer": false,
|
||||
"pinnedApps": [],
|
||||
"position": "center",
|
||||
"screenshotAnnotationTool": "",
|
||||
"showCategories": true,
|
||||
"showIconBackground": true,
|
||||
"sortByMostUsed": true,
|
||||
"terminalCommand": "xterm -e",
|
||||
"viewMode": "list"
|
||||
},
|
||||
"audio": {
|
||||
"mprisBlacklist": [],
|
||||
"preferredPlayer": "",
|
||||
"spectrumFrameRate": 30,
|
||||
"spectrumMirrored": true,
|
||||
"visualizerType": "linear",
|
||||
"volumeFeedback": false,
|
||||
"volumeFeedbackSoundFile": "",
|
||||
"volumeOverdrive": false,
|
||||
"volumeStep": 1
|
||||
},
|
||||
"bar": {
|
||||
"autoHideDelay": 500,
|
||||
"autoShowDelay": 150,
|
||||
"backgroundOpacity": 0.2,
|
||||
"barType": "simple",
|
||||
"capsuleColorKey": "none",
|
||||
"capsuleOpacity": 1,
|
||||
"contentPadding": 2,
|
||||
"density": "comfortable",
|
||||
"displayMode": "always_visible",
|
||||
"enableExclusionZoneInset": true,
|
||||
"fontScale": 1,
|
||||
"frameRadius": 12,
|
||||
"frameThickness": 8,
|
||||
"hideOnOverview": true,
|
||||
"marginHorizontal": 5,
|
||||
"marginVertical": 5,
|
||||
"middleClickAction": "none",
|
||||
"middleClickCommand": "",
|
||||
"middleClickFollowMouse": false,
|
||||
"monitors": [],
|
||||
"mouseWheelAction": "none",
|
||||
"mouseWheelWrap": true,
|
||||
"outerCorners": true,
|
||||
"position": "top",
|
||||
"reverseScroll": false,
|
||||
"rightClickAction": "controlCenter",
|
||||
"rightClickCommand": "",
|
||||
"rightClickFollowMouse": true,
|
||||
"screenOverrides": [],
|
||||
"showCapsule": true,
|
||||
"showOnWorkspaceSwitch": true,
|
||||
"showOutline": false,
|
||||
"useSeparateOpacity": true,
|
||||
"widgetSpacing": 6,
|
||||
"widgets": {
|
||||
"center": [
|
||||
{
|
||||
"characterCount": 2,
|
||||
"colorizeIcons": false,
|
||||
"emptyColor": "secondary",
|
||||
"enableScrollWheel": true,
|
||||
"focusedColor": "primary",
|
||||
"followFocusedScreen": false,
|
||||
"fontWeight": "bold",
|
||||
"groupedBorderOpacity": 1,
|
||||
"hideUnoccupied": false,
|
||||
"iconScale": 0.8,
|
||||
"id": "Workspace",
|
||||
"labelMode": "index",
|
||||
"occupiedColor": "secondary",
|
||||
"pillSize": 0.6,
|
||||
"showApplications": false,
|
||||
"showApplicationsHover": false,
|
||||
"showBadge": true,
|
||||
"showLabelsOnlyWhenOccupied": true,
|
||||
"unfocusedIconsOpacity": 1
|
||||
}
|
||||
],
|
||||
"left": [
|
||||
{
|
||||
"colorizeSystemIcon": "none",
|
||||
"colorizeSystemText": "none",
|
||||
"customIconPath": "",
|
||||
"enableColorization": false,
|
||||
"icon": "rocket",
|
||||
"iconColor": "none",
|
||||
"id": "Launcher",
|
||||
"useDistroLogo": false
|
||||
},
|
||||
{
|
||||
"clockColor": "none",
|
||||
"customFont": "",
|
||||
"formatHorizontal": "HH:mm ddd, MMM dd",
|
||||
"formatVertical": "HH mm - dd MM",
|
||||
"id": "Clock",
|
||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||
"useCustomFont": false
|
||||
},
|
||||
{
|
||||
"compactMode": false,
|
||||
"diskPath": "/persistent",
|
||||
"iconColor": "none",
|
||||
"id": "SystemMonitor",
|
||||
"showCpuCores": false,
|
||||
"showCpuFreq": false,
|
||||
"showCpuTemp": false,
|
||||
"showCpuUsage": true,
|
||||
"showDiskAvailable": false,
|
||||
"showDiskUsage": true,
|
||||
"showDiskUsageAsPercent": false,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": true,
|
||||
"showMemoryAsPercent": true,
|
||||
"showMemoryUsage": true,
|
||||
"showNetworkStats": true,
|
||||
"showSwapUsage": false,
|
||||
"textColor": "none",
|
||||
"useMonospaceFont": true,
|
||||
"usePadding": false
|
||||
},
|
||||
{
|
||||
"colorizeIcons": false,
|
||||
"hideMode": "hidden",
|
||||
"id": "ActiveWindow",
|
||||
"maxWidth": 145,
|
||||
"scrollingMode": "hover",
|
||||
"showIcon": true,
|
||||
"showText": true,
|
||||
"textColor": "none",
|
||||
"useFixedWidth": false
|
||||
},
|
||||
{
|
||||
"compactMode": false,
|
||||
"hideMode": "hidden",
|
||||
"hideWhenIdle": false,
|
||||
"id": "MediaMini",
|
||||
"maxWidth": 145,
|
||||
"panelShowAlbumArt": true,
|
||||
"scrollingMode": "hover",
|
||||
"showAlbumArt": false,
|
||||
"showArtistFirst": true,
|
||||
"showProgressRing": true,
|
||||
"showVisualizer": false,
|
||||
"textColor": "none",
|
||||
"useFixedWidth": false,
|
||||
"visualizerType": "linear"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"hideWhenZero": false,
|
||||
"hideWhenZeroUnread": false,
|
||||
"iconColor": "none",
|
||||
"id": "NotificationHistory",
|
||||
"showUnreadBadge": true,
|
||||
"unreadBadgeColor": "primary"
|
||||
},
|
||||
{
|
||||
"deviceNativePath": "__default__",
|
||||
"displayMode": "icon-always",
|
||||
"hideIfIdle": false,
|
||||
"hideIfNotDetected": true,
|
||||
"id": "Battery",
|
||||
"showNoctaliaPerformance": true,
|
||||
"showPowerProfiles": true
|
||||
},
|
||||
{
|
||||
"displayMode": "alwaysShow",
|
||||
"iconColor": "none",
|
||||
"id": "Volume",
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"applyToAllMonitors": false,
|
||||
"displayMode": "alwaysShow",
|
||||
"iconColor": "none",
|
||||
"id": "Brightness",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"blacklist": [],
|
||||
"chevronColor": "none",
|
||||
"colorizeIcons": false,
|
||||
"drawerEnabled": true,
|
||||
"hidePassive": false,
|
||||
"id": "Tray",
|
||||
"pinned": []
|
||||
},
|
||||
{
|
||||
"colorizeDistroLogo": false,
|
||||
"colorizeSystemIcon": "none",
|
||||
"colorizeSystemText": "none",
|
||||
"customIconPath": "",
|
||||
"enableColorization": false,
|
||||
"icon": "noctalia",
|
||||
"id": "ControlCenter",
|
||||
"useDistroLogo": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"brightness": {
|
||||
"backlightDeviceMappings": [
|
||||
{
|
||||
"device": "/sys/class/backlight/apple-panel-bl",
|
||||
"output": "eDP-1"
|
||||
}
|
||||
],
|
||||
"brightnessStep": 3,
|
||||
"enableDdcSupport": false,
|
||||
"enforceMinimum": true
|
||||
},
|
||||
"calendar": {
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-header-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-month-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
}
|
||||
]
|
||||
},
|
||||
"colorSchemes": {
|
||||
"darkMode": true,
|
||||
"generationMethod": "tonal-spot",
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30",
|
||||
"monitorForColors": "",
|
||||
"predefinedScheme": "Noctalia (default)",
|
||||
"schedulingMode": "off",
|
||||
"syncGsettings": true,
|
||||
"useWallpaperColors": true
|
||||
},
|
||||
"controlCenter": {
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "profile-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "shortcuts-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "audio-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "brightness-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "media-sysmon-card"
|
||||
}
|
||||
],
|
||||
"diskPath": "/persistent",
|
||||
"position": "close_to_bar_button",
|
||||
"shortcuts": {
|
||||
"left": [
|
||||
{
|
||||
"id": "WiFi"
|
||||
},
|
||||
{
|
||||
"id": "Bluetooth"
|
||||
},
|
||||
{
|
||||
"id": "WallpaperSelector"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"id": "Notifications"
|
||||
},
|
||||
{
|
||||
"id": "PowerProfile"
|
||||
},
|
||||
{
|
||||
"id": "KeepAwake"
|
||||
},
|
||||
{
|
||||
"id": "NightLight"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"desktopWidgets": {
|
||||
"enabled": true,
|
||||
"gridSnap": true,
|
||||
"gridSnapScale": false,
|
||||
"monitorWidgets": [
|
||||
{
|
||||
"name": "eDP-1",
|
||||
"widgets": [
|
||||
{
|
||||
"clockStyle": "digital",
|
||||
"customFont": "",
|
||||
"format": "HH:mm\\nd MMMM yyyy",
|
||||
"id": "Clock",
|
||||
"roundedCorners": true,
|
||||
"scale": 0.7378548922663623,
|
||||
"showBackground": true,
|
||||
"useCustomFont": false,
|
||||
"usePrimaryColor": false,
|
||||
"x": 92,
|
||||
"y": 161
|
||||
},
|
||||
{
|
||||
"hideMode": "visible",
|
||||
"id": "MediaPlayer",
|
||||
"roundedCorners": true,
|
||||
"scale": 1.1501312913284876,
|
||||
"showAlbumArt": true,
|
||||
"showBackground": true,
|
||||
"showButtons": true,
|
||||
"showVisualizer": true,
|
||||
"visualizerType": "linear",
|
||||
"x": 92,
|
||||
"y": 299
|
||||
},
|
||||
{
|
||||
"id": "Weather",
|
||||
"scale": 1.339282355295889,
|
||||
"showBackground": true,
|
||||
"x": 230,
|
||||
"y": 161
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"overviewEnabled": true
|
||||
},
|
||||
"dock": {
|
||||
"animationSpeed": 1,
|
||||
"backgroundOpacity": 1,
|
||||
"colorizeIcons": false,
|
||||
"deadOpacity": 0.6,
|
||||
"displayMode": "auto_hide",
|
||||
"dockType": "floating",
|
||||
"enabled": false,
|
||||
"floatingRatio": 1,
|
||||
"groupApps": false,
|
||||
"groupClickAction": "cycle",
|
||||
"groupContextMenuMode": "extended",
|
||||
"groupIndicatorStyle": "dots",
|
||||
"inactiveIndicators": false,
|
||||
"indicatorColor": "primary",
|
||||
"indicatorOpacity": 0.6,
|
||||
"indicatorThickness": 3,
|
||||
"launcherIcon": "",
|
||||
"launcherIconColor": "none",
|
||||
"launcherPosition": "end",
|
||||
"launcherUseDistroLogo": false,
|
||||
"monitors": [],
|
||||
"onlySameOutput": true,
|
||||
"pinnedApps": [],
|
||||
"pinnedStatic": false,
|
||||
"position": "bottom",
|
||||
"showDockIndicator": false,
|
||||
"showLauncherIcon": false,
|
||||
"sitOnFrame": false,
|
||||
"size": 1
|
||||
},
|
||||
"general": {
|
||||
"allowPanelsOnScreenWithoutBar": true,
|
||||
"allowPasswordWithFprintd": false,
|
||||
"animationDisabled": false,
|
||||
"animationSpeed": 1,
|
||||
"autoStartAuth": false,
|
||||
"avatarImage": "~/nix-config/_img/myself.jpg",
|
||||
"boxRadiusRatio": 1,
|
||||
"clockFormat": "hh\\nmm",
|
||||
"clockStyle": "custom",
|
||||
"compactLockScreen": false,
|
||||
"dimmerOpacity": 0.2,
|
||||
"enableBlurBehind": true,
|
||||
"enableLockScreenCountdown": true,
|
||||
"enableLockScreenMediaControls": false,
|
||||
"enableShadows": true,
|
||||
"forceBlackScreenCorners": false,
|
||||
"iRadiusRatio": 1,
|
||||
"keybinds": {
|
||||
"keyDown": ["Down"],
|
||||
"keyEnter": ["Return", "Enter"],
|
||||
"keyEscape": ["Esc"],
|
||||
"keyLeft": ["Left"],
|
||||
"keyRemove": ["Del"],
|
||||
"keyRight": ["Right"],
|
||||
"keyUp": ["Up"]
|
||||
},
|
||||
"language": "",
|
||||
"lockOnSuspend": true,
|
||||
"lockScreenAnimations": false,
|
||||
"lockScreenBlur": 0,
|
||||
"lockScreenCountdownDuration": 10000,
|
||||
"lockScreenMonitors": [],
|
||||
"lockScreenTint": 0,
|
||||
"passwordChars": false,
|
||||
"radiusRatio": 1,
|
||||
"reverseScroll": false,
|
||||
"scaleRatio": 1,
|
||||
"screenRadiusRatio": 1,
|
||||
"shadowDirection": "bottom_right",
|
||||
"shadowOffsetX": 2,
|
||||
"shadowOffsetY": 3,
|
||||
"showChangelogOnStartup": true,
|
||||
"showHibernateOnLockScreen": false,
|
||||
"showScreenCorners": false,
|
||||
"showSessionButtonsOnLockScreen": true,
|
||||
"smoothScrollEnabled": true,
|
||||
"telemetryEnabled": false
|
||||
},
|
||||
"hooks": {
|
||||
"colorGeneration": "",
|
||||
"darkModeChange": "",
|
||||
"enabled": false,
|
||||
"performanceModeDisabled": "",
|
||||
"performanceModeEnabled": "",
|
||||
"screenLock": "",
|
||||
"screenUnlock": "",
|
||||
"session": "",
|
||||
"startup": "",
|
||||
"wallpaperChange": ""
|
||||
},
|
||||
"idle": {
|
||||
"customCommands": "[]",
|
||||
"enabled": false,
|
||||
"fadeDuration": 5,
|
||||
"lockCommand": "",
|
||||
"lockTimeout": 660,
|
||||
"resumeLockCommand": "",
|
||||
"resumeScreenOffCommand": "",
|
||||
"resumeSuspendCommand": "",
|
||||
"screenOffCommand": "",
|
||||
"screenOffTimeout": 600,
|
||||
"suspendCommand": "",
|
||||
"suspendTimeout": 1800
|
||||
},
|
||||
"location": {
|
||||
"analogClockInCalendar": false,
|
||||
"autoLocate": false,
|
||||
"firstDayOfWeek": 1,
|
||||
"hideWeatherCityName": false,
|
||||
"hideWeatherTimezone": false,
|
||||
"name": "Changsha",
|
||||
"showCalendarEvents": true,
|
||||
"showCalendarWeather": true,
|
||||
"showWeekNumberInCalendar": false,
|
||||
"use12hourFormat": false,
|
||||
"useFahrenheit": false,
|
||||
"weatherEnabled": true,
|
||||
"weatherShowEffects": true,
|
||||
"weatherTaliaMascotAlways": false
|
||||
},
|
||||
"network": {
|
||||
"bluetoothAutoConnect": true,
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false,
|
||||
"bluetoothRssiPollIntervalMs": 10000,
|
||||
"bluetoothRssiPollingEnabled": false,
|
||||
"disableDiscoverability": false,
|
||||
"networkPanelView": "wifi",
|
||||
"wifiDetailsViewMode": "grid"
|
||||
},
|
||||
"nightLight": {
|
||||
"autoSchedule": true,
|
||||
"dayTemp": "6500",
|
||||
"enabled": true,
|
||||
"forced": true,
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30",
|
||||
"nightTemp": "4000"
|
||||
},
|
||||
"noctaliaPerformance": {
|
||||
"disableDesktopWidgets": true,
|
||||
"disableWallpaper": true
|
||||
},
|
||||
"notifications": {
|
||||
"backgroundOpacity": 1,
|
||||
"clearDismissed": true,
|
||||
"criticalUrgencyDuration": 15,
|
||||
"density": "default",
|
||||
"enableBatteryToast": true,
|
||||
"enableKeyboardLayoutToast": true,
|
||||
"enableMarkdown": false,
|
||||
"enableMediaToast": false,
|
||||
"enabled": true,
|
||||
"location": "top_right",
|
||||
"lowUrgencyDuration": 3,
|
||||
"monitors": [],
|
||||
"normalUrgencyDuration": 8,
|
||||
"overlayLayer": true,
|
||||
"respectExpireTimeout": false,
|
||||
"saveToHistory": {
|
||||
"critical": true,
|
||||
"low": true,
|
||||
"normal": true
|
||||
},
|
||||
"sounds": {
|
||||
"criticalSoundFile": "",
|
||||
"enabled": false,
|
||||
"excludedApps": "discord,firefox,chrome,chromium,edge",
|
||||
"lowSoundFile": "",
|
||||
"normalSoundFile": "",
|
||||
"separateSounds": false,
|
||||
"volume": 0.5
|
||||
}
|
||||
},
|
||||
"osd": {
|
||||
"autoHideMs": 2000,
|
||||
"backgroundOpacity": 1,
|
||||
"enabled": true,
|
||||
"enabledTypes": [0, 1, 4, 3],
|
||||
"location": "top_right",
|
||||
"monitors": [],
|
||||
"overlayLayer": true
|
||||
},
|
||||
"plugins": {
|
||||
"autoUpdate": false,
|
||||
"notifyUpdates": true
|
||||
},
|
||||
"sessionMenu": {
|
||||
"countdownDuration": 10000,
|
||||
"enableCountdown": true,
|
||||
"largeButtonsLayout": "grid",
|
||||
"largeButtonsStyle": true,
|
||||
"position": "center",
|
||||
"powerOptions": [
|
||||
{
|
||||
"action": "lock",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "1"
|
||||
},
|
||||
{
|
||||
"action": "suspend",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "2"
|
||||
},
|
||||
{
|
||||
"action": "hibernate",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "3"
|
||||
},
|
||||
{
|
||||
"action": "reboot",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "4"
|
||||
},
|
||||
{
|
||||
"action": "logout",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "5"
|
||||
},
|
||||
{
|
||||
"action": "shutdown",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "6"
|
||||
},
|
||||
{
|
||||
"action": "rebootToUefi",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": ""
|
||||
}
|
||||
],
|
||||
"showHeader": true,
|
||||
"showKeybinds": true
|
||||
},
|
||||
"settingsVersion": 59,
|
||||
"systemMonitor": {
|
||||
"batteryCriticalThreshold": 5,
|
||||
"batteryWarningThreshold": 20,
|
||||
"cpuCriticalThreshold": 95,
|
||||
"cpuWarningThreshold": 80,
|
||||
"criticalColor": "",
|
||||
"diskAvailCriticalThreshold": 10,
|
||||
"diskAvailWarningThreshold": 20,
|
||||
"diskCriticalThreshold": 90,
|
||||
"diskWarningThreshold": 80,
|
||||
"enableDgpuMonitoring": false,
|
||||
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
|
||||
"gpuCriticalThreshold": 90,
|
||||
"gpuWarningThreshold": 80,
|
||||
"memCriticalThreshold": 90,
|
||||
"memWarningThreshold": 80,
|
||||
"swapCriticalThreshold": 90,
|
||||
"swapWarningThreshold": 80,
|
||||
"tempCriticalThreshold": 90,
|
||||
"tempWarningThreshold": 80,
|
||||
"useCustomColors": false,
|
||||
"warningColor": ""
|
||||
},
|
||||
"templates": {
|
||||
"activeTemplates": [],
|
||||
"enableUserTheming": false
|
||||
},
|
||||
"ui": {
|
||||
"boxBorderEnabled": false,
|
||||
"fontDefault": "Maple Mono NF CN",
|
||||
"fontDefaultScale": 1,
|
||||
"fontFixed": "Maple Mono NF CN",
|
||||
"fontFixedScale": 1,
|
||||
"panelBackgroundOpacity": 0.85,
|
||||
"panelsAttachedToBar": true,
|
||||
"scrollbarAlwaysVisible": true,
|
||||
"settingsPanelMode": "attached",
|
||||
"settingsPanelSideBarCardStyle": false,
|
||||
"tooltipsEnabled": true,
|
||||
"translucentWidgets": false
|
||||
},
|
||||
"wallpaper": {
|
||||
"automationEnabled": true,
|
||||
"directory": "/home/ryan/Pictures/Wallpapers",
|
||||
"enableMultiMonitorDirectories": false,
|
||||
"enabled": true,
|
||||
"favorites": [],
|
||||
"fillColor": "#000000",
|
||||
"fillMode": "crop",
|
||||
"hideWallpaperFilenames": false,
|
||||
"linkLightAndDarkWallpapers": true,
|
||||
"monitorDirectories": [],
|
||||
"overviewBlur": 0.4,
|
||||
"overviewEnabled": true,
|
||||
"overviewTint": 0.6,
|
||||
"panelPosition": "follow_bar",
|
||||
"randomIntervalSec": 600,
|
||||
"setWallpaperOnAllMonitors": true,
|
||||
"showHiddenFiles": false,
|
||||
"skipStartupTransition": false,
|
||||
"solidColor": "#1a1a2e",
|
||||
"sortOrder": "name",
|
||||
"transitionDuration": 1500,
|
||||
"transitionEdgeSmoothness": 0.05,
|
||||
"transitionType": ["fade", "disc", "stripes", "wipe", "pixelate", "honeycomb"],
|
||||
"useOriginalImages": false,
|
||||
"useSolidColor": false,
|
||||
"useWallhaven": false,
|
||||
"viewMode": "recursive",
|
||||
"wallhavenApiKey": "",
|
||||
"wallhavenCategories": "111",
|
||||
"wallhavenOrder": "desc",
|
||||
"wallhavenPurity": "100",
|
||||
"wallhavenQuery": "",
|
||||
"wallhavenRatios": "",
|
||||
"wallhavenResolutionHeight": "",
|
||||
"wallhavenResolutionMode": "atleast",
|
||||
"wallhavenResolutionWidth": "",
|
||||
"wallhavenSorting": "relevance",
|
||||
"wallpaperChangeMode": "random"
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,25 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
wallpapers,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
package = pkgs.noctalia-shell;
|
||||
in
|
||||
{
|
||||
# Qt for noctalia-shell (replaces former systemd user service Environment=)
|
||||
home.sessionVariables = {
|
||||
# Qt6: wayland primary, xcb fallback (QT_QPA_PLATFORM).
|
||||
"QT_QPA_PLATFORM" = "wayland;xcb";
|
||||
"QT_QPA_PLATFORMTHEME" = "qt6ct";
|
||||
"QT_AUTO_SCREEN_SCALE_FACTOR" = "1";
|
||||
# Use the upstream Home Manager module (shipped by home-manager itself): it
|
||||
# installs pkgs.noctalia, validates the TOML at build time via `checkConfig`,
|
||||
# and handles custom palettes. Runtime changes made in the Settings UI keep
|
||||
# working: they go to ~/.local/state/noctalia/settings.toml, which loads after
|
||||
# this file and wins.
|
||||
# https://docs.noctalia.dev/noctalia/getting-started/nixos/#home-manager
|
||||
programs.noctalia = {
|
||||
enable = true;
|
||||
settings = ./config/config.toml;
|
||||
};
|
||||
|
||||
# Noctalia v5 is started by niri's spawn-at-startup (see the niri conf), so
|
||||
# app2unit is still used to launch desktop entries as systemd user units.
|
||||
home.packages = [
|
||||
package
|
||||
pkgs.qt6Packages.qt6ct # for icon theme
|
||||
pkgs.app2unit # Launch Desktop Entries (or arbitrary commands) as Systemd user units
|
||||
]
|
||||
++ (lib.optionals pkgs.stdenv.hostPlatform.isx86_64 [
|
||||
@@ -28,16 +27,4 @@ in
|
||||
]);
|
||||
|
||||
home.file."Pictures/Wallpapers".source = wallpapers;
|
||||
|
||||
xdg.configFile =
|
||||
let
|
||||
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/base/noctalia";
|
||||
in
|
||||
{
|
||||
# NOTE: use config dir as noctalia config because config is not only settings.json
|
||||
# https://github.com/noctalia-dev/noctalia-shell/blob/main/nix/home-module.nix#L211-L220
|
||||
"noctalia".source = mkSymlink "${confPath}/config";
|
||||
"qt6ct/qt6ct.conf".source = mkSymlink "${confPath}/qt6ct.conf";
|
||||
};
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
[Appearance]
|
||||
custom_palette=false
|
||||
icon_theme=Papirus
|
||||
standard_dialogs=default
|
||||
style=Fusion
|
||||
|
||||
[Fonts]
|
||||
fixed="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||
general="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||
|
||||
[Interface]
|
||||
activate_item_on_single_click=1
|
||||
buttonbox_layout=0
|
||||
cursor_flash_time=1000
|
||||
dialog_buttons_have_icons=1
|
||||
double_click_interval=400
|
||||
gui_effects=@Invalid()
|
||||
keyboard_scheme=2
|
||||
menus_have_icons=true
|
||||
show_shortcuts_in_context_menus=true
|
||||
stylesheets=@Invalid()
|
||||
toolbutton_style=4
|
||||
underline_shortcut=1
|
||||
wheel_scroll_lines=3
|
||||
|
||||
[SettingsWindow]
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\x6\xab\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5)
|
||||
|
||||
[Troubleshooting]
|
||||
force_raster_widgets=1
|
||||
ignored_applications=@Invalid()
|
||||
@@ -18,12 +18,12 @@ binds {
|
||||
Mod+Shift+Return { spawn "alacritty"; }
|
||||
|
||||
// Launcher
|
||||
Mod+D { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
|
||||
Mod+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
|
||||
XF86Search { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
|
||||
Mod+D { spawn "noctalia" "msg" "panel-toggle" "launcher"; }
|
||||
Mod+Space { spawn "noctalia" "msg" "panel-toggle" "launcher"; }
|
||||
XF86Search { spawn "noctalia" "msg" "panel-toggle" "launcher"; }
|
||||
|
||||
// Locker
|
||||
CTRL+Alt+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; }
|
||||
CTRL+Alt+L { spawn "noctalia" "msg" "session" "lock"; }
|
||||
|
||||
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
|
||||
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
|
||||
@@ -38,10 +38,10 @@ binds {
|
||||
// XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01-"; }
|
||||
// XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
|
||||
// XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; }
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-up"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-down"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn "noctalia" "msg" "volume-mute"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn "noctalia" "msg" "mic-mute"; }
|
||||
|
||||
|
||||
// Example media keys mapping using playerctl.
|
||||
@@ -50,18 +50,18 @@ binds {
|
||||
// XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
|
||||
// XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
|
||||
// XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
|
||||
XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia-shell ipc call media playPause"; }
|
||||
XF86AudioStop allow-when-locked=true { spawn-sh "noctalia-shell ipc call media pause"; }
|
||||
XF86AudioPrev allow-when-locked=true { spawn-sh "octalia-shell ipc call media previous"; }
|
||||
XF86AudioNext allow-when-locked=true { spawn-sh "noctalia-shell ipc call media next"; }
|
||||
XF86AudioPlay allow-when-locked=true { spawn "noctalia" "msg" "media" "toggle"; }
|
||||
XF86AudioStop allow-when-locked=true { spawn "noctalia" "msg" "media" "pause"; }
|
||||
XF86AudioPrev allow-when-locked=true { spawn "noctalia" "msg" "media" "previous"; }
|
||||
XF86AudioNext allow-when-locked=true { spawn "noctalia" "msg" "media" "next"; }
|
||||
|
||||
// Example brightness key mappings for brightnessctl.
|
||||
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
|
||||
// but you need to manually put each argument in separate "" quotes.
|
||||
// XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%+"; }
|
||||
// XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%-"; }
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "increase"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "decrease"; }
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia" "msg" "brightness-up"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia" "msg" "brightness-down"; }
|
||||
|
||||
// keyboard backlight
|
||||
XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--device=kbd_backlight" "set" "10%+"; }
|
||||
@@ -224,10 +224,10 @@ binds {
|
||||
// Mod+Space { switch-layout "next"; }
|
||||
// Mod+Shift+Space { switch-layout "prev"; }
|
||||
|
||||
// Screenshot Annotation via satty
|
||||
Print { spawn-sh "set -e; grim -t ppm -g \"$(slurp -o -d -F monospace)\" - | satty --filename - --copy-command=wl-copy --annotation-size-factor 2.0 --output-filename=\"$(xdg-user-dir PICTURES)/Screenshots/Screenshot from %Y-%m-%d %H:%M:%S.png\" --actions-on-enter=\"save-to-clipboard,exit\" --brush-smooth-history-size=5 --disable-notifications"; }
|
||||
Ctrl+Print { screenshot-screen; }
|
||||
Alt+Print { screenshot-window; }
|
||||
// Native Noctalia screenshots; output/annotation policy lives in the noctalia config.
|
||||
Print { spawn "noctalia" "msg" "screenshot-region"; }
|
||||
Ctrl+Print { spawn "noctalia" "msg" "screenshot-fullscreen"; }
|
||||
Alt+Print { spawn "noctalia" "msg" "screenshot-fullscreen" "pick"; }
|
||||
|
||||
// Applications such as remote-desktop clients and software KVM switches may
|
||||
// request that niri stops processing the keyboard shortcuts defined here
|
||||
@@ -248,9 +248,9 @@ binds {
|
||||
Mod+Shift+P { power-off-monitors; }
|
||||
|
||||
// Utility shortcuts
|
||||
Mod+Shift+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; }
|
||||
Mod+C { spawn "noctalia-shell" "ipc" "call" "launcher" "calculator"; }
|
||||
Mod+Shift+V { spawn "noctalia" "msg" "panel-toggle" "clipboard"; }
|
||||
Mod+C { spawn "noctalia" "msg" "panel-toggle" "launcher" "/calc"; }
|
||||
|
||||
Mod+S { spawn "noctalia-shell" "ipc" "call" "controlCenter" "toggle"; }
|
||||
Mod+E { spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle"; }
|
||||
Mod+S { spawn "noctalia" "msg" "panel-toggle" "control-center"; }
|
||||
Mod+E { spawn "noctalia" "msg" "panel-toggle" "session"; }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// https://docs.noctalia.dev/getting-started/compositor-settings/niri/
|
||||
// https://docs.noctalia.dev/noctalia/compositor-settings/niri/
|
||||
|
||||
window-rule {
|
||||
// Rounded corners for a modern look.
|
||||
@@ -13,8 +13,8 @@ debug {
|
||||
honor-xdg-activation-with-invalid-serial
|
||||
}
|
||||
|
||||
// Set the overview wallpaper on the backdrop.
|
||||
// Set the overview wallpaper on the backdrop (v5 namespace).
|
||||
layer-rule {
|
||||
match namespace="^noctalia-overview*"
|
||||
match namespace="^noctalia-backdrop"
|
||||
place-within-backdrop true
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
// Noctalia: use niri spawn-at-startup (systemd user service is deprecated upstream).
|
||||
// https://docs.noctalia.dev/getting-started/compositor-settings/niri/
|
||||
spawn-at-startup "noctalia-shell"
|
||||
// https://docs.noctalia.dev/noctalia/compositor-settings/niri/
|
||||
spawn-at-startup "noctalia"
|
||||
@@ -24,11 +24,6 @@ in
|
||||
home.packages = with pkgs; [
|
||||
# Niri v25.08 will create X11 sockets on disk, export $DISPLAY, and spawn `xwayland-satellite` on-demand when an X11 client connects
|
||||
xwayland-satellite
|
||||
|
||||
# for Screenshot Annotation
|
||||
slurp
|
||||
grim
|
||||
satty
|
||||
];
|
||||
|
||||
xdg.configFile =
|
||||
|
||||
@@ -46,8 +46,6 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
# fix https://github.com/ryan4yin/nix-config/issues/10
|
||||
security.pam.services.swaylock = { };
|
||||
})
|
||||
];
|
||||
}
|
||||
@@ -16,7 +16,7 @@ lib.genAttrs hosts (
|
||||
listeners = hm.services.hypridle.settings.listener;
|
||||
findByAction = action: lib.findFirst (l: (l."on-timeout" or "") == action) { } listeners;
|
||||
screenOff = findByAction "niri msg action power-off-monitors";
|
||||
lock = findByAction "noctalia-shell ipc call lockScreen lock";
|
||||
lock = findByAction "noctalia msg session lock";
|
||||
in
|
||||
{
|
||||
homeDirectory = hm.home.homeDirectory;
|
||||
|
||||
Reference in new issue
Block a user