feat: switch to niri+noctalia
Some checks failed
Build and Deploy / build (push) Has been cancelled
Flake check / Check flake (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled

This commit is contained in:
Leon Schwarzäugl 2026-02-05 20:00:07 +01:00
parent a343de7a90
commit 694dd794f7
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
38 changed files with 3922 additions and 2066 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,11 @@
WORKSPACE=$(niri msg -j workspaces | jq -r '.[] | select(.is_active == true) | .id')
COUNT=$(niri msg -j windows | jq --argjson ws "$WORKSPACE" -r '.[] | select(.workspace_id == $ws and .is_floating == false) | .app_id' | wc -l)
while [[ $COUNT == "0" || $COUNT == "2" ]]; do
COUNT=$(niri msg -j windows | jq --argjson ws "$WORKSPACE" -r '.[] | select(.workspace_id == $ws and .is_floating == false) | .app_id' | wc -l)
done
if [[ $COUNT == "1" ]]; then
niri msg action maximize-column
fi

View file

@ -1,36 +0,0 @@
while :; do
case ${1:-} in
-k | --kitty)
cmd=(sh -c 'kitty --app-id kittyterm -T kittyterm -o confirm_os_window_close=0 zellij attach --create kittyterm' '&')
searchapp="kittyterm"
;;
-e | --element)
cmd=(element-desktop)
searchapp="Element"
;;
-d | --vesktop)
cmd=(vesktop)
searchapp="vesktop"
;;
-s | --spotifyplayer)
cmd=(sh -c 'kitty --add-id spotifytui -T spotifytui -o confirm_os_window_close=0 spotify_player' '&')
searchapp="spotifytui"
;;
*) break ;;
esac
shift
done
WIN_INFO=$(niri msg -j windows | jq --arg search "$searchapp" '.[] | select (.app_id | test($search)) | { id, is_focused, workspace_id }')
ID=$(echo "$WIN_INFO" | jq -r '.id // empty')
IS_FOCUSED=$(echo "$WIN_INFO" | jq -r '.is_focused // empty')
TARGET_MONITOR=$(niri msg -j workspaces | jq --arg search "" '.[] | select (.name != null and (.name | test($search))) | { output }' | jq -r '.output // empty')
CURRENT_WORKSPACE=$(niri msg -j workspaces | jq -r '.[] | select (.is_active == true) | .output // empty')
if [ -z "$ID" ]; then
niri msg action spawn -- "${cmd[@]}"
elif [ "$IS_FOCUSED" ]; then
niri msg action move-window-to-workspace "" --window-id "$ID" --focus false
else
niri msg action focus-monitor "$TARGET_MONITOR" && niri msg action move-window-to-workspace "$CURRENT_WORKSPACE" --window-id "$ID" && niri msg action focus-floating
fi

View file

@ -0,0 +1,565 @@
copy_command "wl-copy"
copy_on_select true
default_layout "swarsel"
default_shell "zsh"
keybinds clear-defaults=true {
entersearch {
bind "Ctrl c" {
SwitchToMode "scroll"
}
bind "esc" {
SwitchToMode "scroll"
}
bind "enter" {
SwitchToMode "search"
}
}
locked {
bind "Ctrl g" {
SwitchToMode "normal"
}
}
move {
bind "Ctrl h" {
SwitchToMode "normal"
}
bind "left" {
MovePane "left"
}
bind "down" {
MovePane "down"
}
bind "up" {
MovePane "up"
}
bind "right" {
MovePane "right"
}
bind "h" {
MovePane "left"
}
bind "j" {
MovePane "down"
}
bind "k" {
MovePane "up"
}
bind "l" {
MovePane "right"
}
}
pane {
bind "Ctrl p" {
SwitchToMode "normal"
}
bind "left" {
MoveFocus "left"
}
bind "down" {
MoveFocus "down"
}
bind "up" {
MoveFocus "up"
}
bind "right" {
MoveFocus "right"
}
bind "h" {
MoveFocus "left"
}
bind "j" {
MoveFocus "down"
}
bind "k" {
MoveFocus "up"
}
bind "l" {
MoveFocus "right"
}
bind "d" {
NewPane "down"
SwitchToMode "normal"
}
bind "e" {
TogglePaneEmbedOrFloating
SwitchToMode "normal"
}
bind "f" {
ToggleFocusFullscreen
SwitchToMode "normal"
}
bind "n" {
NewPane
SwitchToMode "normal"
}
bind "p" {
SwitchFocus
}
bind "f12" {
ToggleFloatingPanes
SwitchToMode "normal"
}
}
renamepane {
bind "esc" {
UndoRenamePane
SwitchToMode "pane"
}
}
renametab {
bind "esc" {
UndoRenameTab
SwitchToMode "tab"
}
}
resize {
bind "Ctrl n" {
SwitchToMode "normal"
}
bind "left" {
Resize "Increase left"
}
bind "down" {
Resize "Increase down"
}
bind "up" {
Resize "Increase up"
}
bind "right" {
Resize "Increase right"
}
bind "+" {
Resize "Increase"
}
bind "-" {
Resize "Decrease"
}
bind "=" {
Resize "Increase"
}
bind "H" {
Resize "Decrease left"
}
bind "J" {
Resize "Decrease down"
}
bind "K" {
Resize "Decrease up"
}
bind "L" {
Resize "Decrease right"
}
bind "h" {
Resize "Increase left"
}
bind "j" {
Resize "Increase down"
}
bind "k" {
Resize "Increase up"
}
bind "l" {
Resize "Increase right"
}
}
scroll {
bind "e" {
EditScrollback
SwitchToMode "normal"
}
bind "s" {
SwitchToMode "entersearch"
SearchInput 0
}
}
search {
bind "c" {
SearchToggleOption "CaseSensitivity"
}
bind "n" {
Search "down"
}
bind "o" {
SearchToggleOption "WholeWord"
}
bind "p" {
Search "up"
}
bind "w" {
SearchToggleOption "Wrap"
}
}
session {
bind "Ctrl o" {
SwitchToMode "normal"
}
bind "c" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "p" {
LaunchOrFocusPlugin "plugin-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
}
shared_among "pane" "tmux" {
bind "x" {
CloseFocus
SwitchToMode "normal"
}
}
shared_among "renametab" "renamepane" {
bind "Ctrl c" {
SwitchToMode "normal"
}
}
shared_among "scroll" "search" {
bind "PageDown" {
PageScrollDown
}
bind "PageUp" {
PageScrollUp
}
bind "left" {
PageScrollUp
}
bind "down" {
ScrollDown
}
bind "up" {
ScrollUp
}
bind "right" {
PageScrollDown
}
bind "Ctrl b" {
PageScrollUp
}
bind "Ctrl c" {
ScrollToBottom
SwitchToMode "normal"
}
bind "d" {
HalfPageScrollDown
}
bind "Ctrl f" {
PageScrollDown
}
bind "h" {
PageScrollUp
}
bind "j" {
ScrollDown
}
bind "k" {
ScrollUp
}
bind "l" {
PageScrollDown
}
bind "Ctrl s" {
SwitchToMode "normal"
}
bind "u" {
HalfPageScrollUp
}
}
shared_among "session" "tmux" {
bind "d" {
Detach
}
}
shared_except "locked" {
bind "Alt left" {
MoveFocusOrTab "left"
}
bind "Alt down" {
MoveFocus "down"
}
bind "Alt up" {
MoveFocus "up"
}
bind "Alt right" {
MoveFocusOrTab "right"
}
bind "Alt +" {
Resize "Increase"
}
bind "Alt -" {
Resize "Decrease"
}
bind "Alt =" {
Resize "Increase"
}
bind "Alt r" {
WriteChars "source cdr"
WriteChars "\n"
}
bind "Alt f" {
ToggleFloatingPanes
}
bind "Ctrl g" {
SwitchToMode "locked"
}
bind "Alt h" {
MoveFocusOrTab "left"
}
bind "Alt i" {
MoveTab "left"
}
bind "Alt j" {
MoveFocus "down"
}
bind "Alt k" {
MoveFocus "up"
}
bind "Alt p" {
NewPane
}
bind "Alt n" {
NewTab
}
}
shared_except "locked" "move" {
bind "Ctrl h" {
SwitchToMode "move"
}
}
shared_except "locked" "pane" {
bind "Ctrl p" {
SwitchToMode "pane"
}
}
shared_except "locked" "resize" {
bind "Ctrl n" {
SwitchToMode "resize"
}
}
shared_except "locked" "scroll" "search" {
bind "Ctrl s" {
SwitchToMode "scroll"
}
}
shared_except "locked" "scroll" "search" "tmux" {
bind "Ctrl b" {
SwitchToMode "tmux"
}
}
shared_except "locked" "session" {
bind "Ctrl o" {
SwitchToMode "session"
}
}
shared_except "locked" "tab" {
bind "Ctrl t" {
SwitchToMode "tab"
}
}
shared_except "normal" "locked" "entersearch" {
bind "enter" {
SwitchToMode "normal"
}
}
shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
bind "esc" {
SwitchToMode "normal"
}
}
tab {
bind "Ctrl t" {
SwitchToMode "normal"
}
bind "left" {
GoToPreviousTab
}
bind "down" {
GoToNextTab
}
bind "up" {
GoToPreviousTab
}
bind "right" {
GoToNextTab
}
bind "1" {
GoToTab 1
SwitchToMode "normal"
}
bind "2" {
GoToTab 2
SwitchToMode "normal"
}
bind "3" {
GoToTab 3
SwitchToMode "normal"
}
bind "4" {
GoToTab 4
SwitchToMode "normal"
}
bind "5" {
GoToTab 5
SwitchToMode "normal"
}
bind "6" {
GoToTab 6
SwitchToMode "normal"
}
bind "7" {
GoToTab 7
SwitchToMode "normal"
}
bind "8" {
GoToTab 8
SwitchToMode "normal"
}
bind "9" {
GoToTab 9
SwitchToMode "normal"
}
bind "h" {
GoToPreviousTab
}
bind "j" {
GoToNextTab
}
bind "k" {
GoToPreviousTab
}
bind "l" {
GoToNextTab
}
bind "n" {
NewTab
SwitchToMode "normal"
}
bind "r" {
SwitchToMode "renametab"
TabNameInput 0
}
bind "s" {
ToggleActiveSyncTab
SwitchToMode "normal"
}
bind "x" {
CloseTab
SwitchToMode "normal"
}
}
tmux {
bind "left" {
MoveFocus "left"
SwitchToMode "normal"
}
bind "down" {
MoveFocus "down"
SwitchToMode "normal"
}
bind "up" {
MoveFocus "up"
SwitchToMode "normal"
}
bind "right" {
MoveFocus "right"
SwitchToMode "normal"
}
bind "space" {
NextSwapLayout
}
bind "\"" {
NewPane "down"
SwitchToMode "normal"
}
bind "%" {
NewPane "right"
SwitchToMode "normal"
}
bind "," {
SwitchToMode "renametab"
}
bind "[" {
SwitchToMode "scroll"
}
bind "Ctrl b" {
Write 2
SwitchToMode "normal"
}
bind "c" {
NewTab
SwitchToMode "normal"
}
bind "h" {
MoveFocus "left"
SwitchToMode "normal"
}
bind "j" {
MoveFocus "down"
SwitchToMode "normal"
}
bind "k" {
MoveFocus "up"
SwitchToMode "normal"
}
bind "l" {
MoveFocus "right"
SwitchToMode "normal"
}
bind "n" {
GoToNextTab
SwitchToMode "normal"
}
bind "o" {
FocusNextPane
}
bind "p" {
GoToPreviousTab
SwitchToMode "normal"
}
bind "z" {
ToggleFocusFullscreen
SwitchToMode "normal"
}
}
}
layout_dir "/home/swarsel/.config/zellij/layouts"
on_force_close "detach"
pane_frames false
plugins {
compact-bar {
path "compact-bar"
}
status-bar {
path "status-bar"
}
strider {
path "strider"
}
tab-bar {
path "tab-bar"
}
}
scrollback_lines_to_serialize 100000
session_serialization true
show_startup_tips false
simplified_ui false
support_kitty_keyboard_protocol true
theme_dir "/home/swarsel/.config/zellij/themes"
ui {
pane_frames {
hide_session_name true
rounded_corners true
}
}

View file

@ -1,341 +0,0 @@
{ config }:
''
pane_frames false
simplified_ui false
default_shell "zsh"
copy_on_select true
on_force_close "detach"
show_startup_tips false
default_layout "default"
layout_dir "${config.home.homeDirectory}/.config/zellij/layouts"
theme_dir "${config.home.homeDirectory}/.config/zellij/themes"
keybinds clear-defaults=true {
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "left" { MoveFocus "left"; }
bind "down" { MoveFocus "down"; }
bind "up" { MoveFocus "up"; }
bind "right" { MoveFocus "right"; }
bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
bind "d" { NewPane "down"; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; }
bind "j" { MoveFocus "down"; }
bind "k" { MoveFocus "up"; }
bind "l" { MoveFocus "right"; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "p" { SwitchFocus; }
bind "Ctrl p" { SwitchToMode "normal"; }
bind "r" { NewPane "right"; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
}
tab {
bind "left" { GoToPreviousTab; }
bind "down" { GoToNextTab; }
bind "up" { GoToPreviousTab; }
bind "right" { GoToNextTab; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "[" { BreakPaneLeft; SwitchToMode "normal"; }
bind "]" { BreakPaneRight; SwitchToMode "normal"; }
bind "b" { BreakPane; SwitchToMode "normal"; }
bind "h" { GoToPreviousTab; }
bind "j" { GoToNextTab; }
bind "k" { GoToPreviousTab; }
bind "l" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "tab" { ToggleTab; }
}
resize {
bind "left" { Resize "Increase left"; }
bind "down" { Resize "Increase down"; }
bind "up" { Resize "Increase up"; }
bind "right" { Resize "Increase right"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "=" { Resize "Increase"; }
bind "H" { Resize "Decrease left"; }
bind "J" { Resize "Decrease down"; }
bind "K" { Resize "Decrease up"; }
bind "L" { Resize "Decrease right"; }
bind "h" { Resize "Increase left"; }
bind "j" { Resize "Increase down"; }
bind "k" { Resize "Increase up"; }
bind "l" { Resize "Increase right"; }
bind "Ctrl n" { SwitchToMode "normal"; }
}
move {
bind "left" { MovePane "left"; }
bind "down" { MovePane "down"; }
bind "up" { MovePane "up"; }
bind "right" { MovePane "right"; }
bind "h" { MovePane "left"; }
bind "Ctrl h" { SwitchToMode "normal"; }
bind "j" { MovePane "down"; }
bind "k" { MovePane "up"; }
bind "l" { MovePane "right"; }
bind "n" { MovePane; }
bind "p" { MovePaneBackwards; }
bind "tab" { MovePane; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
search {
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "n" { Search "down"; }
bind "o" { SearchToggleOption "WholeWord"; }
bind "p" { Search "up"; }
bind "w" { SearchToggleOption "Wrap"; }
}
session {
bind "c" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "Ctrl o" { SwitchToMode "normal"; }
bind "p" {
LaunchOrFocusPlugin "plugin-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
}
shared_except "locked" {
bind "Alt left" { MoveFocusOrTab "left"; }
bind "Alt down" { MoveFocus "down"; }
bind "Alt up" { MoveFocus "up"; }
bind "Alt right" { MoveFocusOrTab "right"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt [" { PreviousSwapLayout; }
bind "Alt ]" { NextSwapLayout; }
bind "Alt f" { ToggleFloatingPanes; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Alt h" { MoveFocusOrTab "left"; }
bind "Alt i" { MoveTab "left"; }
bind "Alt j" { MoveFocus "down"; }
bind "Alt k" { MoveFocus "up"; }
bind "Alt l" { MoveFocusOrTab "right"; }
bind "Alt n" { NewPane; }
bind "Alt o" { MoveTab "right"; }
bind "Ctrl q" { Quit; }
}
shared_except "locked" "move" {
bind "Ctrl h" { SwitchToMode "move"; }
}
shared_except "locked" "session" {
bind "Ctrl o" { SwitchToMode "session"; }
}
shared_except "locked" "scroll" "search" "tmux" {
bind "Ctrl b" { SwitchToMode "tmux"; }
}
shared_except "locked" "scroll" "search" {
bind "Ctrl s" { SwitchToMode "scroll"; }
}
shared_except "locked" "tab" {
bind "Ctrl t" { SwitchToMode "tab"; }
}
shared_except "locked" "pane" {
bind "Ctrl p" { SwitchToMode "pane"; }
}
shared_except "locked" "resize" {
bind "Ctrl n" { SwitchToMode "resize"; }
}
shared_except "normal" "locked" "entersearch" {
bind "enter" { SwitchToMode "normal"; }
}
shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
bind "esc" { SwitchToMode "normal"; }
}
shared_among "pane" "tmux" {
bind "x" { CloseFocus; SwitchToMode "normal"; }
}
shared_among "scroll" "search" {
bind "PageDown" { PageScrollDown; }
bind "PageUp" { PageScrollUp; }
bind "left" { PageScrollUp; }
bind "down" { ScrollDown; }
bind "up" { ScrollUp; }
bind "right" { PageScrollDown; }
bind "Ctrl b" { PageScrollUp; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "d" { HalfPageScrollDown; }
bind "Ctrl f" { PageScrollDown; }
bind "h" { PageScrollUp; }
bind "j" { ScrollDown; }
bind "k" { ScrollUp; }
bind "l" { PageScrollDown; }
bind "Ctrl s" { SwitchToMode "normal"; }
bind "u" { HalfPageScrollUp; }
}
entersearch {
bind "Ctrl c" { SwitchToMode "scroll"; }
bind "esc" { SwitchToMode "scroll"; }
bind "enter" { SwitchToMode "search"; }
}
renametab {
bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
}
shared_among "renametab" "renamepane" {
bind "Ctrl c" { SwitchToMode "normal"; }
}
renamepane {
bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
}
shared_among "session" "tmux" {
bind "d" { Detach; }
}
tmux {
bind "left" { MoveFocus "left"; SwitchToMode "normal"; }
bind "down" { MoveFocus "down"; SwitchToMode "normal"; }
bind "up" { MoveFocus "up"; SwitchToMode "normal"; }
bind "right" { MoveFocus "right"; SwitchToMode "normal"; }
bind "space" { NextSwapLayout; }
bind "\"" { NewPane "down"; SwitchToMode "normal"; }
bind "%" { NewPane "right"; SwitchToMode "normal"; }
bind "," { SwitchToMode "renametab"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; SwitchToMode "normal"; }
bind "j" { MoveFocus "down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "up"; SwitchToMode "normal"; }
bind "l" { MoveFocus "right"; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "o" { FocusNextPane; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
}
}
// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
plugins {
compact-bar location="zellij:compact-bar"
configuration location="zellij:configuration"
filepicker location="zellij:strider" {
cwd "/"
}
plugin-manager location="zellij:plugin-manager"
session-manager location="zellij:session-manager"
status-bar location="zellij:status-bar"
strider location="zellij:strider"
tab-bar location="zellij:tab-bar"
welcome-screen location="zellij:session-manager" {
welcome_screen true
}
}
// Plugins to load in the background when a new session starts
// eg. "file:/path/to/my-plugin.wasm"
// eg. "https://example.com/my-plugin.wasm"
load_plugins {
}
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
//
// copy_command "pbcopy"
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
// scrollback_editor "/usr/bin/vim"
// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
// - true (default)
// - false
//
// auto_layout false
// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// Options:
// - true (default)
// - false
//
// session_serialization false
// Whether pane viewports are serialized along with the session, default is false
// Options:
// - true
// - false (default)
//
// serialize_pane_viewport false
// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
//
// scrollback_lines_to_serialize 10000
// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false
// How often in seconds sessions are serialized
//
// serialization_interval 10000
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata false
// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false
''

27
flake.lock generated
View file

@ -1562,11 +1562,11 @@
}, },
"nixpkgs-dev": { "nixpkgs-dev": {
"locked": { "locked": {
"lastModified": 1769996711, "lastModified": 1770317794,
"narHash": "sha256-rzB5MFIyk0gec3/0LjlevvMGkWN7H3TrZ1p7AmKtik8=", "narHash": "sha256-C2pjgjp63uBXa+7JYG7PqYSZadjanr2ye/+QpdFjIGc=",
"owner": "Swarsel", "owner": "Swarsel",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "11da4ed1369bfbde772f2a0fda761b759e621f20", "rev": "bf4809db44ba271f1f147e1f966775b2e6ea673d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -2346,6 +2346,26 @@
"type": "gitlab" "type": "gitlab"
} }
}, },
"noctalia": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1770217681,
"narHash": "sha256-gMJRIJiZFBe7Bwrwo2cz7YAxV0OiAVQMcmp8fY/YDPg=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "91d07e9279aa9394427289f4b5dff959fbf779fb",
"type": "github"
},
"original": {
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"type": "github"
}
},
"nosys": { "nosys": {
"locked": { "locked": {
"lastModified": 1668010795, "lastModified": 1668010795,
@ -2659,6 +2679,7 @@
"nixpkgs-stable24_11": "nixpkgs-stable24_11", "nixpkgs-stable24_11": "nixpkgs-stable24_11",
"nixpkgs-stable25_05": "nixpkgs-stable25_05", "nixpkgs-stable25_05": "nixpkgs-stable25_05",
"nixpkgs-stable25_11": "nixpkgs-stable25_11", "nixpkgs-stable25_11": "nixpkgs-stable25_11",
"noctalia": "noctalia",
"nswitch-rcm-nix": "nswitch-rcm-nix", "nswitch-rcm-nix": "nswitch-rcm-nix",
"nur": "nur", "nur": "nur",
"pia": "pia", "pia": "pia",

View file

@ -58,6 +58,10 @@
url = "github:nix-community/emacs-overlay"; url = "github:nix-community/emacs-overlay";
# inputs.nixpkgs.follows = "nixpkgs"; # inputs.nixpkgs.follows = "nixpkgs";
}; };
noctalia = {
url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs";
};
topologyPrivate.url = "./files/topology/public"; topologyPrivate.url = "./files/topology/public";

View file

@ -18,7 +18,8 @@ in
"${self}/modules/nixos/optional/nswitch-rcm.nix" "${self}/modules/nixos/optional/nswitch-rcm.nix"
"${self}/modules/nixos/optional/virtualbox.nix" "${self}/modules/nixos/optional/virtualbox.nix"
"${self}/modules/nixos/optional/work.nix" "${self}/modules/nixos/optional/work.nix"
"${self}/modules/nixos/optional/niri.nix"
"${self}/modules/nixos/optional/noctalia.nix"
]; ];
topology.self = { topology.self = {

View file

@ -6,16 +6,18 @@
systemd.user.services.anki-applet = { systemd.user.services.anki-applet = {
Unit = { Unit = {
Description = "Anki applet"; Description = "Anki applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -7,7 +7,7 @@ in
config = lib.mkIf config.swarselmodules.${moduleName} { config = lib.mkIf config.swarselmodules.${moduleName} {
services.${moduleName} = { services.${moduleName} = {
enable = true; enable = true;
systemdTarget = config.wayland.systemd.target; systemdTarget = "sway-session.target";
}; };
}; };

View file

@ -11,6 +11,7 @@
bak bak
timer timer
e e
niri-resize
swarselcheck swarselcheck
swarselcheck-niri swarselcheck-niri
waybarupdate waybarupdate

View file

@ -6,16 +6,18 @@
systemd.user.services.element-applet = { systemd.user.services.element-applet = {
Unit = { Unit = {
Description = "Element applet"; Description = "Element applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -6,18 +6,18 @@
systemd.user.services.firezone-applet = { systemd.user.services.firezone-applet = {
Unit = { Unit = {
Description = "Firezone applet"; Description = "Firezone applet";
Requires = [ Requires = [ "graphical-session.target" ];
"tray.target"
];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -5,6 +5,7 @@ in
{ {
options.swarselmodules.gammastep = lib.mkEnableOption "gammastep settings"; options.swarselmodules.gammastep = lib.mkEnableOption "gammastep settings";
config = lib.mkIf config.swarselmodules.gammastep { config = lib.mkIf config.swarselmodules.gammastep {
systemd.user.services.gammastep = confLib.overrideTarget "sway-session.target";
services.gammastep = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) { services.gammastep = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
enable = true; enable = true;
provider = "manual"; provider = "manual";

View file

@ -1,4 +1,4 @@
{ self, lib, pkgs, config, ... }: { self, lib, pkgs, config, confLib, ... }:
{ {
options.swarselmodules.kanshi = lib.mkEnableOption "kanshi settings"; options.swarselmodules.kanshi = lib.mkEnableOption "kanshi settings";
config = lib.mkIf config.swarselmodules.kanshi { config = lib.mkIf config.swarselmodules.kanshi {
@ -14,6 +14,8 @@
}; };
}; };
}; };
systemd.user.services.kanshi = confLib.overrideTarget "sway-session.target";
services.kanshi = { services.kanshi = {
enable = true; enable = true;
settings = [ settings = [

View file

@ -6,16 +6,18 @@
systemd.user.services.obsidian-applet = { systemd.user.services.obsidian-applet = {
Unit = { Unit = {
Description = "Obsidian applet"; Description = "Obsidian applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -242,6 +242,7 @@ in
startup = config.swarselsystems.startup ++ [ startup = config.swarselsystems.startup ++ [
{ command = "kitty -T kittyterm -o confirm_os_window_close=0 zellij attach --create kittyterm"; } { command = "kitty -T kittyterm -o confirm_os_window_close=0 zellij attach --create kittyterm"; }
{ command = "sleep 60; kitty -T spotifytui -o confirm_os_window_close=0 spotify_player"; } { command = "sleep 60; kitty -T spotifytui -o confirm_os_window_close=0 spotify_player"; }
{ command = "mako"; }
]; ];
seat = { seat = {
"*" = { "*" = {

View file

@ -10,23 +10,25 @@ in
brightnessctl = "${lib.getExe pkgs.brightnessctl}"; brightnessctl = "${lib.getExe pkgs.brightnessctl}";
swaylock = "${lib.getExe pkgs.swaylock-effects}"; swaylock = "${lib.getExe pkgs.swaylock-effects}";
suspend = "${pkgs.systemd}/bin/systemctl suspend"; suspend = "${pkgs.systemd}/bin/systemctl suspend";
noctalia = "/etc/profiles/per-user/${config.swarselsystems.mainUser}/bin/noctalia-shell ipc call";
in in
{ {
enable = true; enable = true;
systemdTarget = config.wayland.systemd.target; # systemdTarget = "sway-session.target";
extraArgs = [ "-w" ]; extraArgs = [ "-w" ];
timeouts = [ timeouts = [
{ timeout = 60; command = "${brightnessctl} -s; ${brightnessctl} set 80%-"; resumeCommand = "${brightnessctl} -r"; } { timeout = 60; command = "${brightnessctl} -s; ${brightnessctl} set 80%-"; resumeCommand = "${brightnessctl} -r"; }
# { timeout = 300; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; } # { timeout = 300; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; }
{ timeout = 300; command = "${swaylock} -f"; } # { timeout = 300; command = "${swaylock} -f"; }
{ timeout = 300; command = "${noctalia} lockScreen lock || ${swaylock} -f"; }
# { timeout = 600; command = ''${pkgs.sway}/bin/swaymsg "output * dpms off"; resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on''; } # { timeout = 600; command = ''${pkgs.sway}/bin/swaymsg "output * dpms off"; resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on''; }
{ timeout = 600; command = "${suspend}"; } { timeout = 600; command = "${noctalia} sessionMenu lockAndSuspend || ${suspend}"; }
]; ];
events = { events = {
# { event = "before-sleep"; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; } # { event = "before-sleep"; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; }
# { event = "after-resume"; command = "${swaylock} -f "; } # { event = "after-resume"; command = "${swaylock} -f "; }
before-sleep = "${swaylock} -f "; # before-sleep = "${swaylock} -f ";
lock = "${swaylock} -f "; # lock = "${swaylock} -f ";
}; };
}; };
}; };

View file

@ -1,7 +1,8 @@
{ lib, pkgs, config, ... }: { lib, pkgs, config, confLib, ... }:
{ {
options.swarselmodules.swayosd = lib.mkEnableOption "swayosd settings"; options.swarselmodules.swayosd = lib.mkEnableOption "swayosd settings";
config = lib.mkIf config.swarselmodules.swayosd { config = lib.mkIf config.swarselmodules.swayosd {
systemd.user.services.swayosd = confLib.overrideTarget "sway-session.target";
services.swayosd = { services.swayosd = {
enable = true; enable = true;
package = pkgs.dev.swayosd; package = pkgs.dev.swayosd;

View file

@ -6,16 +6,18 @@
systemd.user.services.vesktop-applet = { systemd.user.services.vesktop-applet = {
Unit = { Unit = {
Description = "Vesktop applet"; Description = "Vesktop applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -66,8 +66,8 @@ in
enable = true; enable = true;
systemd = { systemd = {
enable = false; enable = false;
# target = "sway-session.target"; target = "sway-session.target";
inherit (config.wayland.systemd) target; # inherit (config.wayland.systemd) target;
}; };
settings = { settings = {
mainBar = { mainBar = {

View file

@ -5,12 +5,14 @@
programs.zellij = { programs.zellij = {
enable = true; enable = true;
enableZshIntegration = true; enableZshIntegration = true;
attachExistingSession = false;
exitShellOnExit = true;
settings = { settings = {
pane_frames = false; pane_frames = false;
simplified_ui = false; simplified_ui = false;
default_shell = "zsh"; default_shell = "zsh";
copy_on_select = true; copy_on_select = true;
on_force_close = "detach"; on_force_close = "quit";
show_startup_tips = false; show_startup_tips = false;
support_kitty_keyboard_protocol = true; support_kitty_keyboard_protocol = true;
default_layout = "swarsel"; default_layout = "swarsel";

View file

@ -1,23 +1,24 @@
{ inputs, config, pkgs, lib, vars, ... }: { inputs, config, pkgs, lib, vars, type, ... }:
{ {
imports = [ imports = lib.optionals (type != "nixos") [
inputs.niri-flake.homeModules.niri inputs.niri-flake.homeModules.niri
]; ];
options.swarselmodules.niri = lib.mkEnableOption "niri settings"; config = {
config = lib.mkIf config.swarselmodules.niri
{
programs.niri = { programs.niri = {
package = pkgs.niri-unstable; # which package to use for niri validation package = pkgs.niri-stable; # which package to use for niri validation
settings = { settings = {
debug = {
honor-xdg-activation-with-invalid-serial = [ ];
};
xwayland-satellite = { xwayland-satellite = {
enable = true; enable = true;
path = "${lib.getExe pkgs.xwayland-satellite-unstable}"; path = "${lib.getExe pkgs.xwayland-satellite-unstable}";
}; };
prefer-no-csd = true; prefer-no-csd = true;
layer-rules = [ layer-rules = [
{ matches = [{ namespace = "^notifications$"; }]; block-out-from = "screencast"; } { matches = [{ namespace = "^notifications$"; }]; block-out-from = "screen-capture"; }
{ matches = [{ namespace = "^wallpaper$"; }]; place-within-backdrop = true; } { matches = [{ namespace = "^wallpaper$"; }]; place-within-backdrop = true; }
{ matches = [{ namespace = "^noctalia-overview*"; }]; place-within-backdrop = true; }
]; ];
window-rules = [ window-rules = [
{ {
@ -28,23 +29,24 @@
enable = true; enable = true;
draw-behind-window = true; draw-behind-window = true;
}; };
geometry-corner-radius = { top-left = 2.0; top-right = 2.0; bottom-left = 2.0; bottom-right = 2.0; }; clip-to-geometry = true;
geometry-corner-radius = { top-left = 5.0; top-right = 5.0; bottom-left = 5.0; bottom-right = 5.0; };
} }
{ matches = [{ app-id = "at.yrlf.wl_mirror"; }]; opacity = 1.0; } { matches = [{ app-id = "at.yrlf.wl_mirror"; }]; opacity = 1.0; }
{ matches = [{ app-id = "Gimp"; }]; opacity = 1.0; } { matches = [{ app-id = "Gimp"; }]; opacity = 1.0; }
{ matches = [{ app-id = "firefox"; }]; opacity = 0.99; } { matches = [{ app-id = "^firefox$"; }]; opacity = 0.95; }
{ matches = [{ app-id = "^special.*"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; } { matches = [{ app-id = "^special.*"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; }
{ matches = [{ app-id = "chromium-browser"; }]; opacity = 0.99; } { matches = [{ app-id = "chromium-browser"; }]; opacity = 0.99; }
{ matches = [{ app-id = "^qalculate-gtk$"; }]; open-floating = true; } { matches = [{ app-id = "^qalculate-gtk$"; }]; open-floating = true; }
{ matches = [{ app-id = "^blueman$"; }]; open-floating = true; } { matches = [{ app-id = "^blueman$"; }]; open-floating = true; }
{ matches = [{ app-id = "^pavucontrol$"; }]; open-floating = true; } { matches = [{ app-id = "^pavucontrol$"; }]; open-floating = true; }
{ matches = [{ app-id = "^syncthingtray$"; }]; open-floating = true; } { matches = [{ app-id = "^syncthingtray$"; }]; open-floating = true; }
{ matches = [{ app-id = "^Element$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screencast"; } { matches = [{ app-id = "^Element$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screen-capture"; }
# { matches = [{ app-id = "^Element$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; } # { matches = [{ app-id = "^Element$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; }
{ matches = [{ app-id = "^vesktop$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screencast"; } { matches = [{ app-id = "^vesktop$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screen-capture"; }
# { matches = [{ app-id = "^vesktop$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; } # { matches = [{ app-id = "^vesktop$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; }
{ matches = [{ app-id = "^com.nextcloud.desktopclient.nextcloud$"; }]; open-floating = true; } { matches = [{ app-id = "^com.nextcloud.desktopclient.nextcloud$"; }]; open-floating = true; }
{ matches = [{ title = ".*1Password.*"; }]; excludes = [{ app-id = "^firefox$"; } { app-id = "^emacs$"; } { app-id = "^kitty$"; }]; open-floating = true; block-out-from = "screencast"; } { matches = [{ title = ".*1Password.*"; }]; excludes = [{ app-id = "^firefox$"; } { app-id = "^emacs$"; } { app-id = "^kitty$"; }]; open-floating = true; block-out-from = "screen-capture"; }
{ matches = [{ title = "(?:Open|Save) (?:File|Folder|As)"; }]; open-floating = true; } { matches = [{ title = "(?:Open|Save) (?:File|Folder|As)"; }]; open-floating = true; }
{ matches = [{ title = "^Add$"; }]; open-floating = true; } { matches = [{ title = "^Add$"; }]; open-floating = true; }
{ matches = [{ title = "^Picture-in-Picture$"; }]; open-floating = true; } { matches = [{ title = "^Picture-in-Picture$"; }]; open-floating = true; }
@ -56,6 +58,8 @@
]; ];
environment = { environment = {
DISPLAY = ":0"; DISPLAY = ":0";
QT_QPA_PLATFORM = lib.mkForce "wayland";
EDITOR = "emacsclient -c";
} // vars.waylandSessionVariables; } // vars.waylandSessionVariables;
screenshot-path = "~/Pictures/Screenshots/screenshot_%Y-%m-%d-%H%M%S.png"; screenshot-path = "~/Pictures/Screenshots/screenshot_%Y-%m-%d-%H%M%S.png";
input = { input = {
@ -100,19 +104,18 @@
}; };
binds = with config.lib.niri.actions; let binds = with config.lib.niri.actions; let
sh = spawn "sh" "-c"; sh = spawn "sh" "-c";
resizer = "niri-resize";
in in
{ {
# "Mod+Super_L" = spawn "killall -SIGUSR1 .waybar-wrapped";
"Mod+z".action = spawn "killall -SIGUSR1 .waybar-wrapped";
"Mod+Shift+t".action = toggle-window-rule-opacity; "Mod+Shift+t".action = toggle-window-rule-opacity;
# "Mod+Escape".action = "mode $exit";
"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 = toggle-windowed-fullscreen; "Mod+Shift+f".action = fullscreen-window;
"Mod+q".action = close-window; "Mod+q".action = sh "niri msg action close-window & ${resizer}";
"Mod+f".action = spawn "firefox"; "Mod+f".action = sh "${resizer} & firefox";
"Mod+Space".action = spawn "fuzzel"; # "Mod+Space".action = spawn "noctalia-shell" "ipc" "call" "launcher" "toggle";
"Mod+Space".action = sh "${resizer} & fuzzel";
"Mod+z".action = spawn "noctalia-shell" "ipc" "call" "bar" "toggle";
"Mod+Shift+c".action = spawn "qalculate-gtk"; "Mod+Shift+c".action = spawn "qalculate-gtk";
"Mod+Ctrl+p".action = spawn "1password" "--quick-acces"; "Mod+Ctrl+p".action = spawn "1password" "--quick-acces";
"Mod+Shift+Escape".action = spawn "kitty" "-o" "confirm_os_window_close=0" "btm"; "Mod+Shift+Escape".action = spawn "kitty" "-o" "confirm_os_window_close=0" "btm";
@ -125,11 +128,11 @@
"Mod+Shift+s".action.screenshot-window = { write-to-disk = true; }; "Mod+Shift+s".action.screenshot-window = { write-to-disk = true; };
# "Mod+Shift+v".action = spawn "wf-recorder" "-g" "'$(slurp -f %o -or)'" "-f" "~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv"; # "Mod+Shift+v".action = spawn "wf-recorder" "-g" "'$(slurp -f %o -or)'" "-f" "~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv";
"Mod+e".action = sh "emacsclient -nquc -a emacs -e '(dashboard-open)'"; "Mod+e".action = sh "${resizer} & emacsclient -nquc -a emacs -e '(dashboard-open)'";
"Mod+c".action = sh "emacsclient -ce '(org-capture)'"; "Mod+c".action = sh "${resizer} & emacsclient -ce '(org-capture)'";
"Mod+t".action = sh "emacsclient -ce '(org-agenda)'"; "Mod+t".action = sh "${resizer} & emacsclient -ce '(org-agenda)'";
"Mod+Shift+m".action = sh "emacsclient -ce '(mu4e)'"; "Mod+Shift+m".action = sh "${resizer} & emacsclient -ce '(mu4e)'";
"Mod+Shift+a".action = sh "emacsclient -ce '(swarsel/open-calendar)'"; "Mod+Shift+a".action = sh "${resizer} & 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";
@ -154,14 +157,18 @@
# "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 = spawn "swarselzellij"; "Mod+Return".action = sh "${resizer} & exec kitty -o confirm_os_window_close=0";
"XF86AudioRaiseVolume".action = spawn "swayosd-client" "--output-volume" "raise"; "XF86AudioRaiseVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "increase";
"XF86AudioLowerVolume".action = spawn "swayosd-client" "--output-volume" "lower"; "XF86AudioLowerVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "decrease";
"XF86AudioMute".action = spawn "swayosd-client" "--output-volume" "mute-toggle"; "XF86AudioMute".action = spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput";
"XF86MonBrightnessUp".action = spawn "swayosd-client" "--brightness raise"; "XF86AudioPrev".action = spawn "noctalia-shell" "ipc" "call" "media" "previous";
"XF86MonBrightnessDown".action = spawn "swayosd-client" "--brightness lower"; "XF86AudioPlay".action = spawn "noctalia-shell" "ipc" "call" "media" "playPause";
"XF86AudioNext".action = spawn "noctalia-shell" "ipc" "call" "media" "next";
"XF86MonBrightnessUp".action = spawn "noctalia-shell" "ipc" "call" "brightness" "increase";
"XF86MonBrightnessDown".action = spawn "noctalia-shell" "ipc" "call" "brightness" "decrease";
"XF86Display".action = spawn "wl-mirror" "eDP-1"; "XF86Display".action = spawn "wl-mirror" "eDP-1";
"Mod+Escape".action = spawn "wlogout"; "Mod+Escape".action = spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle";
"Mod+i".action = spawn "noctalia-shell" "ipc" "call" "launcher" "emoji";
"Mod+Equal".action = set-column-width "+10%"; "Mod+Equal".action = set-column-width "+10%";
"Mod+Minus".action = set-column-width "-10%"; "Mod+Minus".action = set-column-width "-10%";
@ -193,24 +200,21 @@
# { command = [ "anki" ]; } # { command = [ "anki" ]; }
# { command = [ "obsidian" ]; } # { command = [ "obsidian" ]; }
# { command = [ "nm-applet" ]; } # { command = [ "nm-applet" ]; }
{ command = [ "niri" "msg" "action" "focus-workspace" "2" ]; } # { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; }
# { command = [ "noctalia-shell" ]; }
{ command = [ "pkill mako" ]; }
{ command = [ "systemctl" "--user" "start" "noctalia-shell.target" ]; }
]; ];
workspaces = { # workspaces = {
# "01-Main" = { # "01-Main" = {
# name = "Scratchpad"; # name = "Scratchpad";
# }; # };
"99-Scratchpad" = { # "99-Scratchpad" = {
name = ""; # name = "";
}; # };
}; # };
}; };
}; };
} // {
programs.niri = lib.mkIf (!config.swarselmodules.niri) {
package = null;
config = null;
settings = null;
};
}; };
} }

View file

@ -0,0 +1,605 @@
{ self, inputs, config, pkgs, lib, confLib, ... }:
{
imports = [
inputs.noctalia.homeModules.default
];
config = {
systemd.user = {
targets = {
noctalia-shell.Unit = {
After = [ "graphical-session.target" ];
Wants = [
"tray.target"
"noctalia-tray-pre.target"
];
};
tray = {
Unit = {
After = [ "noctalia-tray-pre.target" ];
PartOf = [ "noctalia-shell.service" ];
};
Install.WantedBy = [ "noctalia-shell.target" ];
};
noctalia-tray-pre = {
Unit = {
After = [
"noctalia-init.service"
];
};
Install.WantedBy = [ "noctalia-shell.target" ];
};
};
services = {
noctalia-shell = confLib.overrideTarget "noctalia-shell.target";
noctalia-init = {
Unit = {
PartOf = [ "noctalia-tray-pre.target" ];
};
Service = {
Type = "oneshot";
ExecStartPre = "${pkgs.coreutils}/bin/sleep 5";
ExecStart = "-${pkgs.busybox}/bin/pkill mako";
RemainAfterExit = true;
};
Install = {
WantedBy = [ "noctalia-tray-pre.target" ];
};
};
};
};
programs = {
fastfetch.enable = true;
noctalia-shell = {
enable = true;
package = pkgs.noctalia-shell.override { calendarSupport = true; };
systemd.enable = true;
settings = {
bar = {
barType = "simple";
position = "top";
monitors = [ ];
density = "default";
showCapsule = false;
showOutline = false;
capsuleOpacity = lib.mkForce 1;
backgroundOpacity = lib.mkForce 0.5;
useSeparateOpacity = true;
floating = false;
marginVertical = 4;
marginHorizontal = 0;
frameThickness = 8;
frameRadius = 12;
outerCorners = true;
hideOnOverview = false;
displayMode = "auto_hide";
autoHideDelay = 100;
autoShowDelay = 300;
screenOverrides = [ ];
widgets = {
left = [
{
characterCount = 2;
colorizeIcons = false;
emptyColor = "primary";
enableScrollWheel = false;
focusedColor = "secondary";
followFocusedScreen = false;
groupedBorderOpacity = 1;
hideUnoccupied = true;
iconScale = 0.5;
id = "Workspace";
labelMode = "none";
occupiedColor = "primary";
pillSize = 0.4;
reverseScroll = false;
showApplications = true;
showBadge = true;
showLabelsOnlyWhenOccupied = true;
unfocusedIconsOpacity = 0.25;
}
];
center = [
{
colorizeIcons = false;
hideMode = "hidden";
id = "ActiveWindow";
maxWidth = 145;
scrollingMode = "hover";
showIcon = true;
useFixedWidth = false;
}
{
id = "plugin:privacy-indicator";
}
{
id = "plugin:screen-recorder";
}
];
right = [
{
blacklist = [
"bluetooth*"
];
colorizeIcons = false;
drawerEnabled = true;
hidePassive = true;
id = "Tray";
pinned = [ ];
}
{
displayMode = "alwaysShow";
id = "Volume";
middleClickCommand = "pavucontrol";
}
{
displayMode = "onhover";
id = "Network";
}
{
displayMode = "onhover";
id = "Bluetooth";
}
{
displayMode = "onhover";
id = "VPN";
}
{
deviceNativePath = "__default__";
hideIfIdle = true;
hideIfNotDetected = true;
id = "Battery";
showNoctaliaPerformance = false;
showPowerProfiles = true;
}
{
id = "plugin:ba7043:github-feed";
}
{
id = "plugin:clipper";
}
{
colorName = "primary";
id = "SessionMenu";
}
{
customFont = "FiraCode Nerd Font Mono";
formatHorizontal = "ddd dd. MMM HH:mm:ss";
formatVertical = "";
id = "Clock";
tooltipFormat = "ddd dd. MMM HH:mm:ss";
useCustomFont = true;
usePrimaryColor = true;
}
{
colorizeDistroLogo = false;
colorizeSystemIcon = "primary";
customIconPath = "";
enableColorization = true;
icon = "noctalia";
id = "ControlCenter";
useDistroLogo = true;
}
];
};
};
general = {
avatarImage = "${self}/files/wallpaper/swarsel.png";
dimmerOpacity = 0.2;
showScreenCorners = false;
forceBlackScreenCorners = false;
scaleRatio = 1;
radiusRatio = 0.2;
iRadiusRatio = 1;
boxRadiusRatio = 1;
screenRadiusRatio = 1;
animationSpeed = 1;
animationDisabled = false;
compactLockScreen = true;
lockOnSuspend = true;
showSessionButtonsOnLockScreen = true;
showHibernateOnLockScreen = false;
enableShadows = true;
shadowDirection = "bottom_right";
shadowOffsetX = 2;
shadowOffsetY = 3;
language = "";
allowPanelsOnScreenWithoutBar = true;
showChangelogOnStartup = true;
telemetryEnabled = false;
enableLockScreenCountdown = true;
lockScreenCountdownDuration = 10000;
autoStartAuth = true;
allowPasswordWithFprintd = true;
};
ui = {
fontDefaultScale = 1;
fontFixedScale = 1;
tooltipsEnabled = true;
panelBackgroundOpacity = lib.mkForce 1;
panelsAttachedToBar = true;
settingsPanelMode = "centered";
wifiDetailsViewMode = "grid";
bluetoothDetailsViewMode = "grid";
networkPanelView = "wifi";
bluetoothHideUnnamedDevices = false;
boxBorderEnabled = false;
};
location = {
name = confLib.getConfig.repo.secrets.common.location.timezoneSpecific;
weatherEnabled = true;
weatherShowEffects = false;
useFahrenheit = false;
use12hourFormat = false;
showWeekNumberInCalendar = true;
showCalendarEvents = true;
showCalendarWeather = true;
analogClockInCalendar = false;
firstDayOfWeek = 1;
hideWeatherTimezone = false;
hideWeatherCityName = false;
};
calendar = {
cards = [
{
enabled = true;
id = "calendar-header-card";
}
{
enabled = true;
id = "calendar-month-card";
}
{
enabled = true;
id = "weather-card";
}
];
};
wallpaper = {
enabled = true;
overviewEnabled = true;
directory = "${self}/files/wallpaper";
monitorDirectories = [ ];
enableMultiMonitorDirectories = true;
showHiddenFiles = false;
viewMode = "single";
setWallpaperOnAllMonitors = true;
fillMode = "crop";
fillColor = "#000000";
useSolidColor = false;
solidColor = "#1a1a2e";
automationEnabled = false;
wallpaperChangeMode = "random";
randomIntervalSec = 300;
transitionDuration = 500;
transitionType = "random";
transitionEdgeSmoothness = 0.05;
panelPosition = "follow_bar";
hideWallpaperFilenames = false;
useWallhaven = false;
wallhavenQuery = "";
wallhavenSorting = "relevance";
wallhavenOrder = "desc";
wallhavenCategories = "111";
wallhavenPurity = "100";
wallhavenRatios = "";
wallhavenApiKey = "";
wallhavenResolutionMode = "atleast";
wallhavenResolutionWidth = "";
wallhavenResolutionHeight = "";
sortOrder = "name";
};
appLauncher = {
enableClipboardHistory = false;
autoPasteClipboard = false;
enableClipPreview = true;
clipboardWrapText = true;
clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store";
clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store";
position = "center";
pinnedApps = [ ];
useApp2Unit = false;
sortByMostUsed = true;
terminalCommand = "kitty -e";
customLaunchPrefixEnabled = false;
customLaunchPrefix = "";
viewMode = "list";
showCategories = false;
iconMode = "native";
showIconBackground = false;
enableSettingsSearch = false;
enableWindowsSearch = false;
ignoreMouseInput = true;
screenshotAnnotationTool = "";
};
controlCenter = {
position = "close_to_bar_button";
diskPath = "/";
shortcuts = {
left = [
{
id = "Network";
}
{
id = "Bluetooth";
}
];
right = [
{
id = "Notifications";
}
{
id = "PowerProfile";
}
{
id = "KeepAwake";
}
{
id = "plugin:screen-recorder";
}
];
};
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";
}
];
};
systemMonitor = {
cpuWarningThreshold = 80;
cpuCriticalThreshold = 90;
tempWarningThreshold = 80;
tempCriticalThreshold = 90;
gpuWarningThreshold = 80;
gpuCriticalThreshold = 90;
memWarningThreshold = 80;
memCriticalThreshold = 90;
swapWarningThreshold = 80;
swapCriticalThreshold = 90;
diskWarningThreshold = 80;
diskCriticalThreshold = 90;
diskAvailWarningThreshold = 20;
diskAvailCriticalThreshold = 10;
cpuPollingInterval = 1000;
gpuPollingInterval = 3000;
enableDgpuMonitoring = false;
memPollingInterval = 1000;
diskPollingInterval = 30000;
networkPollingInterval = 1000;
loadAvgPollingInterval = 3000;
useCustomColors = true;
warningColor = "#5ec4ff";
criticalColor = "#d95468";
externalMonitor = "btm";
};
dock = {
enabled = false;
};
network = {
wifiEnabled = true;
bluetoothRssiPollingEnabled = false;
bluetoothRssiPollIntervalMs = 10000;
wifiDetailsViewMode = "grid";
bluetoothDetailsViewMode = "grid";
bluetoothHideUnnamedDevices = false;
};
sessionMenu = {
enableCountdown = true;
countdownDuration = 3000;
position = "center";
showHeader = true;
largeButtonsStyle = true;
largeButtonsLayout = "grid";
showNumberLabels = true;
powerOptions = [
{
action = "lock";
command = "";
countdownEnabled = true;
enabled = true;
}
{
action = "suspend";
command = "";
countdownEnabled = true;
enabled = true;
}
{
action = "hibernate";
command = "";
countdownEnabled = true;
enabled = true;
}
{
action = "reboot";
command = "";
countdownEnabled = true;
enabled = true;
}
{
action = "logout";
command = "";
countdownEnabled = true;
enabled = true;
}
{
action = "shutdown";
command = "";
countdownEnabled = true;
enabled = true;
}
];
};
notifications = {
enabled = true;
monitors = [ ];
location = "top_right";
overlayLayer = true;
backgroundOpacity = 0.5;
respectExpireTimeout = true;
lowUrgencyDuration = 3;
normalUrgencyDuration = 8;
criticalUrgencyDuration = 15;
enableMediaToast = false;
enableKeyboardLayoutToast = true;
batteryWarningThreshold = 20;
batteryCriticalThreshold = 5;
saveToHistory = {
low = true;
normal = true;
critical = true;
};
sounds.enabled = false;
};
osd = {
enabled = true;
location = "right";
autoHideMs = 2000;
overlayLayer = true;
backgroundOpacity = 0.5;
monitors = [ ];
enabledTypes = [ 0 1 2 3 ];
};
audio = {
volumeStep = 5;
volumeOverdrive = false;
cavaFrameRate = 30;
visualizerType = "linear";
mprisBlacklist = [ ];
preferredPlayer = "";
volumeFeedback = false;
};
brightness = {
brightnessStep = 5;
enforceMinimum = true;
enableDdcSupport = false;
};
nightLight = {
enabled = true;
autoSchedule = true;
nightTemp = "3700";
dayTemp = "5500";
manualSunrise = "06:30";
manualSunset = "18:30";
};
hooks.enabled = false;
desktopWidgets.enabled = false;
plugins = {
sources = [
{
enabled = true;
name = "Official Noctalia Plugins";
url = "https://github.com/noctalia-dev/noctalia-plugins";
}
{
enabled = true;
name = "Dev";
url = "https://github.com/Swarsel/noctalia-plugins";
}
];
states = lib.listToAttrs
(map
(plugin:
lib.nameValuePair plugin {
enabled = true;
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
})
[
"clipper"
"github-feed"
"privacy-indicator"
"kaomoji-provider"
"unicode-picker"
"screen-recorder"
]) // {
github-feed = {
enabled = true;
sourceUrl = "https://github.com/Swarsel/noctalia-plugins";
};
};
};
pluginSettings = {
clipper = {
enableTodoIntegration = false;
};
privacy-indicator = {
hideInactive = true;
iconSpacing = 4;
removeMargins = true;
};
screen-recorder = {
hideInactive = true;
directory = "";
filenamePattern = "recording_yyyyMMdd_HHmmss";
frameRate = "60";
audioCodec = "opus";
videoCodec = "h264";
quality = "very_high";
colorRange = "limited";
showCursor = true;
copyToClipboard = true;
audioSource = "default_output";
videoSource = "portal";
resolution = "original";
};
github-feed = {
username = lib.toUpper config.swarselsystems.mainUser;
token = confLib.getConfig.repo.secrets.common.noctaliaGithubToken;
refreshInterval = 300;
maxEvents = 50;
showStars = false;
showForks = false;
showPRs = false;
showRepoCreations = false;
showMyRepoStars = true;
showMyRepoForks = true;
openInBrowser = true;
# my fork:
showNotificationBadge = true;
colorizationEnabled = true;
colorizationIcon = "Primary";
colorizationBadge = "Tertiary";
colorizationBadgeText = "Primary";
defaultTab = 1;
enableSystemNotifications = true;
notifyGitHubNotifications = true;
notifyStars = true;
notifyForks = true;
notifyPRs = true;
notifyRepoCreations = true;
notifyMyRepoStars = true;
notifyMyRepoForks = true;
};
};
};
};
};
};
}

View file

@ -459,16 +459,18 @@ in
teams-applet = { teams-applet = {
Unit = { Unit = {
Description = "teams applet"; Description = "teams applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {
@ -479,16 +481,18 @@ in
onepassword-applet = { onepassword-applet = {
Unit = { Unit = {
Description = "1password applet"; Description = "1password applet";
Requires = [ "tray.target" ]; Requires = [ "graphical-session.target" ];
After = [ After = [
"graphical-session.target" "graphical-session.target"
"tray.target" "tray.target"
]; ];
PartOf = [ "graphical-session.target" ]; PartOf = [
"tray.target"
];
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = [ "tray.target" ];
}; };
Service = { Service = {

View file

@ -2,11 +2,15 @@
{ {
options.swarselmodules.lowBattery = lib.mkEnableOption "low battery notification config"; options.swarselmodules.lowBattery = lib.mkEnableOption "low battery notification config";
config = lib.mkIf config.swarselmodules.lowBattery { config = lib.mkIf config.swarselmodules.lowBattery {
systemd.user.services."battery-low" = { systemd.user.services."battery-low" =
let
target = "sway-session.target";
in
{
enable = true; enable = true;
description = "Timer for battery check that alerts at 10% or less"; description = "Timer for battery check that alerts at 10% or less";
partOf = [ "graphical-session.target" ]; partOf = [ target ];
wantedBy = [ "graphical-session.target" ]; wantedBy = [ target ];
serviceConfig = { serviceConfig = {
Type = "simple"; Type = "simple";
ExecStart = pkgs.writeShellScript "battery-low-notification" ExecStart = pkgs.writeShellScript "battery-low-notification"

View file

@ -14,7 +14,7 @@ in
comment = "Sway compositor managed by UWSM"; comment = "Sway compositor managed by UWSM";
binPath = "/run/current-system/sw/bin/sway"; binPath = "/run/current-system/sw/bin/sway";
}; };
niri = lib.mkIf (config.swarselmodules ? niri) { niri = lib.mkIf (config.programs ? niri) {
prettyName = "Niri"; prettyName = "Niri";
comment = "Niri compositor managed by UWSM"; comment = "Niri compositor managed by UWSM";
binPath = "/run/current-system/sw/bin/niri-session"; binPath = "/run/current-system/sw/bin/niri-session";

View file

@ -1,20 +1,20 @@
{ lib, config, pkgs, ... }: { lib, config, ... }:
{ {
options.swarselmodules.xdg-portal = lib.mkEnableOption "xdg portal config"; options.swarselmodules.xdg-portal = lib.mkEnableOption "xdg portal config";
config = lib.mkIf config.swarselmodules.xdg-portal { config = lib.mkIf config.swarselmodules.xdg-portal {
xdg.portal = { xdg.portal = {
enable = true; enable = true;
config = { # config = {
common = { # common = {
default = "wlr"; # default = "wlr";
}; # };
}; # };
wlr.enable = true; # wlr.enable = true;
wlr.settings.screencast = { # wlr.settings.screencast = {
output_name = "eDP-1"; # output_name = "eDP-1";
chooser_type = "simple"; # chooser_type = "simple";
chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or"; # chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or";
}; # };
}; };
}; };
} }

View file

@ -1,14 +1,14 @@
{ inputs, lib, config, pkgs, ... }: { self, inputs, config, pkgs, ... }:
let
moduleName = "niri";
in
{ {
imports = [ imports = [
inputs.niri-flake.nixosModules.niri inputs.niri-flake.nixosModules.niri
]; ];
options.swarselmodules.${moduleName} = lib.mkEnableOption "${moduleName} settings"; config = {
config = lib.mkIf config.swarselmodules.${moduleName}
{ niri-flake.cache.enable = true;
home-manager.users.${config.swarselsystems.mainUser}.imports = [
"${self}/modules/home/optional/niri.nix"
];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wl-clipboard wl-clipboard
@ -20,14 +20,11 @@ in
]; ];
programs.niri = { programs = {
niri = {
enable = true; enable = true;
package = pkgs.niri-unstable; # the actual niri that will be installed and used package = pkgs.niri-stable; # the actual niri that will be installed and used
}; };
} // {
niri-flake.cache.enable = true;
programs.niri = {
package = null;
}; };
}; };
} }

View file

@ -0,0 +1,17 @@
{ self, inputs, config, ... }:
{
disabledModules = [ "programs/gpu-screen-recorder.nix" ];
imports = [
"${inputs.nixpkgs-dev}/nixos/modules/programs/gpu-screen-recorder.nix"
];
config = {
home-manager.users.${config.swarselsystems.mainUser}.imports = [
"${self}/modules/home/optional/noctalia.nix"
];
services = {
upower.enable = true; # needed for battery percentage
gnome.evolution-data-server.enable = true; # needed for calendar integration
};
programs.gpu-screen-recorder.enable = true;
};
}

View file

@ -1,4 +1,4 @@
{ self, lib, config, globals, dns, confLib, ... }: { lib, config, globals, dns, confLib, ... }:
let let
inherit (confLib.gen { name = "firefly-iii"; port = 80; }) servicePort serviceName serviceUser serviceGroup serviceDomain serviceAddress proxyAddress4 proxyAddress6; inherit (confLib.gen { name = "firefly-iii"; port = 80; }) servicePort serviceName serviceUser serviceGroup serviceDomain serviceAddress proxyAddress4 proxyAddress6;
inherit (confLib.static) isHome dnsServer webProxy homeWebProxy homeServiceAddress nginxAccessRules; inherit (confLib.static) isHome dnsServer webProxy homeWebProxy homeServiceAddress nginxAccessRules;
@ -30,11 +30,11 @@ in
}; };
}; };
topology.self.services.${serviceName} = { # topology.self.services.${serviceName} = {
name = "Firefly-III"; # name = "Firefly-III";
info = "https://${serviceDomain}"; # info = "https://${serviceDomain}";
icon = "${self}/files/topology-images/${serviceName}.png"; # icon = "${self}/files/topology-images/${serviceName}.png";
}; # };
globals.services.${serviceName} = { globals.services.${serviceName} = {
domain = serviceDomain; domain = serviceDomain;

View file

@ -1,4 +1,4 @@
{ self, lib, config, globals, dns, confLib, ... }: { lib, config, globals, dns, confLib, ... }:
let let
inherit (confLib.gen { name = "freshrss"; port = 80; }) servicePort serviceName serviceUser serviceGroup serviceDomain serviceAddress proxyAddress4 proxyAddress6; inherit (confLib.gen { name = "freshrss"; port = 80; }) servicePort serviceName serviceUser serviceGroup serviceDomain serviceAddress proxyAddress4 proxyAddress6;
inherit (confLib.static) isHome webProxy homeWebProxy dnsServer homeServiceAddress nginxAccessRules; inherit (confLib.static) isHome webProxy homeWebProxy dnsServer homeServiceAddress nginxAccessRules;
@ -49,11 +49,11 @@ in
# }; # };
}; };
topology.self.services.${serviceName} = { # topology.self.services.${serviceName} = {
name = "FreshRSS"; # name = "FreshRSS";
info = "https://${serviceDomain}"; # info = "https://${serviceDomain}";
icon = "${self}/files/topology-images/${serviceName}.png"; # icon = "${self}/files/topology-images/${serviceName}.png";
}; # };
globals.services.${serviceName} = { globals.services.${serviceName} = {
domain = serviceDomain; domain = serviceDomain;

View file

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

View file

@ -82,6 +82,7 @@ in
(additions final prev) (additions final prev)
// (nixpkgs-stable-versions final prev) // (nixpkgs-stable-versions final prev)
// (inputs.niri-flake.overlays.niri final prev) // (inputs.niri-flake.overlays.niri final prev)
// (inputs.noctalia.overlays.default final prev)
// (inputs.vbc-nix.overlays.default final prev) // (inputs.vbc-nix.overlays.default final prev)
// (inputs.nur.overlays.default final prev) // (inputs.nur.overlays.default final prev)
// (inputs.emacs-overlay.overlay final prev) // (inputs.emacs-overlay.overlay final prev)

View file

@ -30,7 +30,7 @@ writeShellApplication {
;; ;;
-r | --repo) -r | --repo)
shift shift
target_repo=rue target_repo=true
;; ;;
-d | --directory) -d | --directory)
shift shift

View file

@ -0,0 +1,6 @@
{ self, name, writeShellApplication, jq }:
writeShellApplication {
inherit name;
runtimeInputs = [ jq ];
text = builtins.readFile "${self}/files/scripts/${name}.sh";
}

View file

@ -2,5 +2,38 @@
writeShellApplication { writeShellApplication {
inherit name; inherit name;
runtimeInputs = [ kitty element-desktop vesktop spotify-player jq ]; runtimeInputs = [ kitty element-desktop vesktop spotify-player jq ];
text = builtins.readFile "${self}/files/scripts/${name}.sh"; text = ''
while :; do
case ''${1:-} in
-k | --kitty)
cmd=(sh -c 'kitty --app-id kittyterm -T kittyterm -o confirm_os_window_close=0 zellij --config ${self}/files/zellij/config-kittyterm.kdl attach --create kittyterm' '&')
searchapp="kittyterm"
;;
-e | --element)
cmd=(element-desktop)
searchapp="Element"
;;
-d | --vesktop)
cmd=(vesktop)
searchapp="vesktop"
;;
-s | --spotifyplayer)
cmd=(sh -c 'kitty --add-id spotifytui -T spotifytui -o confirm_os_window_close=0 spotify_player' '&')
searchapp="spotifytui"
;;
*) break ;;
esac
shift
done
WIN_INFO=$(niri msg -j windows | jq --arg search "$searchapp" '.[] | select (.app_id | test($search)) | { id, is_focused, workspace_id }')
ID=$(echo "$WIN_INFO" | jq -r '.id // empty')
if [ -z "$ID" ]; then
niri msg action spawn -- "''${cmd[@]}"
else
niri msg action close-window --id "$ID"
fi
'';
} }

File diff suppressed because one or more lines are too long