commit e7426264e77dd77a6569966bcba4d574778191fd Author: Aiden Gerbrandt Date: Sun Dec 28 10:41:44 2025 -0600 inital commit diff --git a/etc/cron.d/zfs-auto-snapshot b/etc/cron.d/zfs-auto-snapshot new file mode 100755 index 0000000..f4b1006 --- /dev/null +++ b/etc/cron.d/zfs-auto-snapshot @@ -0,0 +1,2 @@ + +*/15 * * * * root command -v zfs-auto-snapshot > /dev/null || exit 0 ; zfs-auto-snapshot --quiet --syslog --label=frequent --keep=4 // diff --git a/etc/cron.daily/config-backup b/etc/cron.daily/config-backup new file mode 100755 index 0000000..ff03ac4 --- /dev/null +++ b/etc/cron.daily/config-backup @@ -0,0 +1,6 @@ +#!/bin/sh + +#only call if script is there +command -v /home/aiden/sync-config.sh >/dev/null || exit 0 + +exec /home/aiden/sync-config.sh diff --git a/etc/cron.daily/makewhatis b/etc/cron.daily/makewhatis new file mode 100755 index 0000000..efe892e --- /dev/null +++ b/etc/cron.daily/makewhatis @@ -0,0 +1,2 @@ +#!/bin/sh +exec makewhatis -Tutf8 diff --git a/etc/cron.daily/shadow b/etc/cron.daily/shadow new file mode 100755 index 0000000..1931a79 --- /dev/null +++ b/etc/cron.daily/shadow @@ -0,0 +1,6 @@ +#!/bin/sh + +# Verify integrity of password and group files +/usr/sbin/pwck -r +/usr/sbin/grpck -r + diff --git a/etc/cron.daily/zfs-auto-snapshot b/etc/cron.daily/zfs-auto-snapshot new file mode 100755 index 0000000..417f751 --- /dev/null +++ b/etc/cron.daily/zfs-auto-snapshot @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --prefix=znap --label=daily --keep=5 // diff --git a/etc/cron.hourly/sddm-background.sh b/etc/cron.hourly/sddm-background.sh new file mode 100755 index 0000000..2eaaee7 --- /dev/null +++ b/etc/cron.hourly/sddm-background.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +#only call if script is there +command -v /home/aiden/sddm-random-background.sh >/dev/null || exit 0 + +exec /home/aiden/sddm-random-background.sh diff --git a/etc/cron.hourly/zfs-auto-snapshot b/etc/cron.hourly/zfs-auto-snapshot new file mode 100755 index 0000000..0ef454f --- /dev/null +++ b/etc/cron.hourly/zfs-auto-snapshot @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --prefix=znap --label=hourly --keep=5 // diff --git a/etc/cron.monthly/zfs-auto-snapshot b/etc/cron.monthly/zfs-auto-snapshot new file mode 100755 index 0000000..602fb84 --- /dev/null +++ b/etc/cron.monthly/zfs-auto-snapshot @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --prefix=znap --label=monthly --keep=4 // diff --git a/etc/cron.weekly/zfs-auto-snapshot b/etc/cron.weekly/zfs-auto-snapshot new file mode 100755 index 0000000..4a97175 --- /dev/null +++ b/etc/cron.weekly/zfs-auto-snapshot @@ -0,0 +1,6 @@ +#!/bin/sh + +# Only call zfs-auto-snapshot if it's available +command -v zfs-auto-snapshot > /dev/null || exit 0 + +exec zfs-auto-snapshot --quiet --syslog --prefix=znap --label=weekly --keep=4 // diff --git a/home/aiden/.bashrc b/home/aiden/.bashrc new file mode 100644 index 0000000..07221e3 --- /dev/null +++ b/home/aiden/.bashrc @@ -0,0 +1,14 @@ +# .bashrc + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' + +alias update='~/update.sh' +export EDITOR=/usr/bin/nvim +export SUDO_EDITOR=/usr/bin/nvim +export VISUAL=/usr/bin/nvim +alias sedit="sudoedit" +alias flat='flatpak --user' diff --git a/home/aiden/.config/alacritty/alacritty.toml b/home/aiden/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..073bedb --- /dev/null +++ b/home/aiden/.config/alacritty/alacritty.toml @@ -0,0 +1,13 @@ +#[general] +#import = ["themes/noctalia.toml"] + +general.import = [ + # uncomment the flavour you want below: + #"~/.config/alacritty/catppuccin-latte.toml" + # "~/.config/alacritty/catppuccin-frappe.toml" + # "~/.config/alacritty/catppuccin-macchiato.toml" + "~/.config/alacritty/catppuccin-mocha.toml" +] + +#[env] +#TERM = "xterm-256color" diff --git a/home/aiden/.config/alacritty/catppuccin-frappe.toml b/home/aiden/.config/alacritty/catppuccin-frappe.toml new file mode 100644 index 0000000..3e6fac1 --- /dev/null +++ b/home/aiden/.config/alacritty/catppuccin-frappe.toml @@ -0,0 +1,65 @@ +[colors.primary] +background = "#303446" +foreground = "#c6d0f5" +dim_foreground = "#838ba7" +bright_foreground = "#c6d0f5" + +[colors.cursor] +text = "#303446" +cursor = "#f2d5cf" + +[colors.vi_mode_cursor] +text = "#303446" +cursor = "#babbf1" + +[colors.search.matches] +foreground = "#303446" +background = "#a5adce" + +[colors.search.focused_match] +foreground = "#303446" +background = "#a6d189" + +[colors.footer_bar] +foreground = "#303446" +background = "#a5adce" + +[colors.hints.start] +foreground = "#303446" +background = "#e5c890" + +[colors.hints.end] +foreground = "#303446" +background = "#a5adce" + +[colors.selection] +text = "#303446" +background = "#f2d5cf" + +[colors.normal] +black = "#51576d" +red = "#e78284" +green = "#a6d189" +yellow = "#e5c890" +blue = "#8caaee" +magenta = "#f4b8e4" +cyan = "#81c8be" +white = "#b5bfe2" + +[colors.bright] +black = "#626880" +red = "#e78284" +green = "#a6d189" +yellow = "#e5c890" +blue = "#8caaee" +magenta = "#f4b8e4" +cyan = "#81c8be" +white = "#a5adce" + +[[colors.indexed_colors]] +index = 16 +color = "#ef9f76" + +[[colors.indexed_colors]] +index = 17 +color = "#f2d5cf" diff --git a/home/aiden/.config/alacritty/catppuccin-latte.toml b/home/aiden/.config/alacritty/catppuccin-latte.toml new file mode 100644 index 0000000..e9414ad --- /dev/null +++ b/home/aiden/.config/alacritty/catppuccin-latte.toml @@ -0,0 +1,65 @@ +[colors.primary] +background = "#eff1f5" +foreground = "#4c4f69" +dim_foreground = "#8c8fa1" +bright_foreground = "#4c4f69" + +[colors.cursor] +text = "#eff1f5" +cursor = "#dc8a78" + +[colors.vi_mode_cursor] +text = "#eff1f5" +cursor = "#7287fd" + +[colors.search.matches] +foreground = "#eff1f5" +background = "#6c6f85" + +[colors.search.focused_match] +foreground = "#eff1f5" +background = "#40a02b" + +[colors.footer_bar] +foreground = "#eff1f5" +background = "#6c6f85" + +[colors.hints.start] +foreground = "#eff1f5" +background = "#df8e1d" + +[colors.hints.end] +foreground = "#eff1f5" +background = "#6c6f85" + +[colors.selection] +text = "#eff1f5" +background = "#dc8a78" + +[colors.normal] +black = "#bcc0cc" +red = "#d20f39" +green = "#40a02b" +yellow = "#df8e1d" +blue = "#1e66f5" +magenta = "#ea76cb" +cyan = "#179299" +white = "#5c5f77" + +[colors.bright] +black = "#acb0be" +red = "#d20f39" +green = "#40a02b" +yellow = "#df8e1d" +blue = "#1e66f5" +magenta = "#ea76cb" +cyan = "#179299" +white = "#6c6f85" + +[[colors.indexed_colors]] +index = 16 +color = "#fe640b" + +[[colors.indexed_colors]] +index = 17 +color = "#dc8a78" diff --git a/home/aiden/.config/alacritty/catppuccin-macchiato.toml b/home/aiden/.config/alacritty/catppuccin-macchiato.toml new file mode 100644 index 0000000..88c07a5 --- /dev/null +++ b/home/aiden/.config/alacritty/catppuccin-macchiato.toml @@ -0,0 +1,65 @@ +[colors.primary] +background = "#24273a" +foreground = "#cad3f5" +dim_foreground = "#8087a2" +bright_foreground = "#cad3f5" + +[colors.cursor] +text = "#24273a" +cursor = "#f4dbd6" + +[colors.vi_mode_cursor] +text = "#24273a" +cursor = "#b7bdf8" + +[colors.search.matches] +foreground = "#24273a" +background = "#a5adcb" + +[colors.search.focused_match] +foreground = "#24273a" +background = "#a6da95" + +[colors.footer_bar] +foreground = "#24273a" +background = "#a5adcb" + +[colors.hints.start] +foreground = "#24273a" +background = "#eed49f" + +[colors.hints.end] +foreground = "#24273a" +background = "#a5adcb" + +[colors.selection] +text = "#24273a" +background = "#f4dbd6" + +[colors.normal] +black = "#494d64" +red = "#ed8796" +green = "#a6da95" +yellow = "#eed49f" +blue = "#8aadf4" +magenta = "#f5bde6" +cyan = "#8bd5ca" +white = "#b8c0e0" + +[colors.bright] +black = "#5b6078" +red = "#ed8796" +green = "#a6da95" +yellow = "#eed49f" +blue = "#8aadf4" +magenta = "#f5bde6" +cyan = "#8bd5ca" +white = "#a5adcb" + +[[colors.indexed_colors]] +index = 16 +color = "#f5a97f" + +[[colors.indexed_colors]] +index = 17 +color = "#f4dbd6" diff --git a/home/aiden/.config/alacritty/catppuccin-mocha.toml b/home/aiden/.config/alacritty/catppuccin-mocha.toml new file mode 100644 index 0000000..7762dcd --- /dev/null +++ b/home/aiden/.config/alacritty/catppuccin-mocha.toml @@ -0,0 +1,65 @@ +[colors.primary] +background = "#1e1e2e" +foreground = "#cdd6f4" +dim_foreground = "#7f849c" +bright_foreground = "#cdd6f4" + +[colors.cursor] +text = "#1e1e2e" +cursor = "#f5e0dc" + +[colors.vi_mode_cursor] +text = "#1e1e2e" +cursor = "#b4befe" + +[colors.search.matches] +foreground = "#1e1e2e" +background = "#a6adc8" + +[colors.search.focused_match] +foreground = "#1e1e2e" +background = "#a6e3a1" + +[colors.footer_bar] +foreground = "#1e1e2e" +background = "#a6adc8" + +[colors.hints.start] +foreground = "#1e1e2e" +background = "#f9e2af" + +[colors.hints.end] +foreground = "#1e1e2e" +background = "#a6adc8" + +[colors.selection] +text = "#1e1e2e" +background = "#f5e0dc" + +[colors.normal] +black = "#45475a" +red = "#f38ba8" +green = "#a6e3a1" +yellow = "#f9e2af" +blue = "#89b4fa" +magenta = "#f5c2e7" +cyan = "#94e2d5" +white = "#bac2de" + +[colors.bright] +black = "#585b70" +red = "#f38ba8" +green = "#a6e3a1" +yellow = "#f9e2af" +blue = "#89b4fa" +magenta = "#f5c2e7" +cyan = "#94e2d5" +white = "#a6adc8" + +[[colors.indexed_colors]] +index = 16 +color = "#fab387" + +[[colors.indexed_colors]] +index = 17 +color = "#f5e0dc" diff --git a/home/aiden/.config/alacritty/themes/noctalia.toml b/home/aiden/.config/alacritty/themes/noctalia.toml new file mode 100644 index 0000000..e296bdb --- /dev/null +++ b/home/aiden/.config/alacritty/themes/noctalia.toml @@ -0,0 +1,74 @@ +# Colors section of "Alacritty - TOML configuration file format" +# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd#colors + +[colors.primary] +foreground = "#e0def4" +background = "#1f1d2e" +dim_foreground = "#908caa" +bright_foreground = "#e0def4" + +[colors.cursor] +text = "#e0def4" +cursor = "#524f67" + +[colors.vi_mode_cursor] +text = "#e0def4" +cursor = "#524f67" + +[colors.search.matches] +foreground = "#908caa" +background = "#26233a" + +[colors.search.focused_match] +foreground = "#191724" +background = "#ebbcba" + +[colors.hints.start] +foreground = "#908caa" +background = "#1f1d2e" + +[colors.hints.end] +foreground = "#6e6a86" +background = "#1f1d2e" + +[colors.line_indicator] +foreground = "None" +background = "None" + +[colors.footer_bar] +foreground = "#e0def4" +background = "#1f1d2e" + +[colors.selection] +text = "#e0def4" +background = "#403d52" + +[colors.normal] +black = "#26233a" +red = "#eb6f92" +green = "#31748f" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ebbcba" +white = "#e0def4" + +[colors.bright] +black = "#6e6a86" +red = "#eb6f92" +green = "#31748f" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ebbcba" +white = "#e0def4" + +[colors.dim] +black = "#6e6a86" +red = "#eb6f92" +green = "#31748f" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ebbcba" +white = "#e0def4" \ No newline at end of file diff --git a/home/aiden/.config/niri/binds.kdl b/home/aiden/.config/niri/binds.kdl new file mode 100644 index 0000000..07dbfd6 --- /dev/null +++ b/home/aiden/.config/niri/binds.kdl @@ -0,0 +1,196 @@ +hotkey-overlay { + // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. + skip-at-startup +} + +// Alt+Tab +recent-windows { + binds { + Mod+Tab { next-window; } + Mod+Shift+Tab { previous-window; } + Mod+grave { next-window filter="app-id"; } + Mod+Shift+grave { previous-window filter="app-id"; } + } +} + +binds { + // Mod-Shift-/, which is usually the same as Mod-?, + // shows a list of important hotkeys. + Mod+Shift+Slash { show-hotkey-overlay; } + + // Suggested binds for running programs: terminal, app launcher, screen locker. + Mod+Return hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; } + Mod+D hotkey-overlay-title="App Launcher" { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "launcher" "toggle"; } + Mod+S hotkey-overlay-title="Control Center" { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "controlCenter" "toggle"; } + Mod+L hotkey-overlay-title="Lock the Screen" { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } + Mod+Escape hotkey-overlay-title="Power Options" { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "sessionMenu" "toggle"; } + Mod+E hotkey-overlay-title="File Manager" { spawn "nemo"; } + Mod+B hotkey-overlay-title="Firefox" { spawn "firefox-wayland"; } + Mod+V hotkey-overlay-title="Clipboard History" { spawn "qs" "-c" "noctalia-shell" "ipc" "call" "launcher" "clipboard"; } + + // 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`. + // For example, this is a standard bind to toggle the screen reader (orca). + Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; } + + // Example volume keys mappings for PipeWire & WirePlumber. + // The allow-when-locked=true property makes them work even when the session is locked. + // Using spawn-sh allows to pass multiple arguments together with the command. + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-"; } + 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"; } + + // 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" "+5%"; } + XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "5%-"; } + + // Open/close the Overview: a zoomed-out view of workspaces and windows. + // You can also move the mouse into the top-left hot corner, + // or do a four-finger swipe up on a touchpad. + Mod+O repeat=false { toggle-overview; } + + Mod+Q repeat=false { close-window; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + + Mod+Ctrl+Left { move-column-left; } + Mod+Ctrl+Down { move-window-down; } + Mod+Ctrl+Up { move-window-up; } + Mod+Ctrl+Right { move-column-right; } + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + Mod+Shift+Left { focus-monitor-left; } + Mod+Shift+Right { focus-monitor-right; } + // Mod+Shift+Down { focus-monitor-down; } + // Mod+Shift+Up { focus-monitor-up; } + + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } + //Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } + //Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } + + Mod+Shift+Down { focus-workspace-down; } + Mod+Shift+Up { focus-workspace-up; } + Mod+Shift+Ctrl+Down { move-column-to-workspace-down; } + Mod+Shift+Ctrl+Up { move-column-to-workspace-up; } + + // You can bind mouse wheel scroll ticks using the following syntax. + // These binds will change direction based on the natural-scroll setting. + // + // To avoid scrolling through workspaces really fast, you can use + // the cooldown-ms property. The bind will be rate-limited to this value. + // You can set a cooldown on any bind, but it's most useful for the wheel. + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } + + Mod+WheelScrollRight { focus-column-right; } + Mod+WheelScrollLeft { focus-column-left; } + Mod+Ctrl+WheelScrollRight { move-column-right; } + Mod+Ctrl+WheelScrollLeft { move-column-left; } + + // Usually scrolling up and down with Shift in applications results in + // horizontal scrolling; these binds replicate that. + Mod+Shift+WheelScrollDown { focus-column-right; } + Mod+Shift+WheelScrollUp { focus-column-left; } + Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } + Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } + + // Similarly, you can bind touchpad scroll "ticks". + // Touchpad scrolling is continuous, so for these binds it is split into + // discrete intervals. + // These binds are also affected by touchpad's natural-scroll, so these + // example binds are "inverted", since we have natural-scroll enabled for + // touchpads by default. + // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; } + // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; } + + // Switches focus between the current and the previous workspace. + // Mod+Tab { focus-workspace-previous; } + + // The following binds move the focused window in and out of a column. + // If the window is alone, they will consume it into the nearby column to the side. + // If the window is already in a column, they will expel it out. + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + + // Consume one window from the right to the bottom of the focused column. + Mod+Comma { consume-window-into-column; } + // Expel the bottom window from the focused column to the right. + Mod+Period { expel-window-from-column; } + + Mod+R { switch-preset-column-width; } + // Cycling through the presets in reverse order is also possible. + // Mod+R { switch-preset-column-width-back; } + Mod+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + Mod+F { maximize-column; } + Mod+Shift+F { fullscreen-window; } + + // Expand the focused column to space not taken up by other fully visible columns. + // Makes the column "fill the rest of the space". + Mod+Ctrl+F { expand-column-to-available-width; } + + Mod+C { center-column; } + + // Center all fully visible columns on screen. + Mod+Ctrl+C { center-visible-columns; } + + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + + // Finer height adjustments when in column with other windows. + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + + // Move the focused window between the floating and the tiling layout. + Mod+Ctrl+V { toggle-window-floating; } + Mod+Shift+V { switch-focus-between-floating-and-tiling; } + + // Toggle tabbed column display mode. + // Windows in this column will appear as vertical tabs, + // rather than stacked on top of each other. + Mod+W { toggle-column-tabbed-display; } + + // Actions to switch layouts. + // Note: if you uncomment these, make sure you do NOT have + // a matching layout switch hotkey configured in xkb options above. + // Having both at once on the same hotkey will break the switching, + // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). + // Mod+Space { switch-layout "next"; } + // Mod+Shift+Space { switch-layout "prev"; } + + Print { screenshot; } + Mod+Shift+S { screenshot; } + Ctrl+Print { screenshot-screen; } + Alt+Print { screenshot-window; } + + // Applications such as remote-desktop clients and software KVM switches may + // request that niri stops processing the keyboard shortcuts defined here + // so they may, for example, forward the key presses as-is to a remote machine. + // It's a good idea to bind an escape hatch to toggle the inhibitor, + // so a buggy application can't hold your session hostage. + // + // The allow-inhibiting=false property can be applied to other binds as well, + // which ensures niri always processes them, even when an inhibitor is active. + Mod+Shift+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + + // The quit action will show a confirmation dialog to avoid accidental exits. + Mod+Shift+E { quit; } + Ctrl+Alt+Delete { quit; } + + // Powers off the monitors. To turn them back on, do any input like + // moving the mouse or pressing any other key. + Mod+Shift+P { power-off-monitors; } +} diff --git a/home/aiden/.config/niri/config.kdl b/home/aiden/.config/niri/config.kdl new file mode 100644 index 0000000..99352c3 --- /dev/null +++ b/home/aiden/.config/niri/config.kdl @@ -0,0 +1,51 @@ +// This config is in the KDL format: https://kdl.dev +// "/-" comments out the following node. +// Check the wiki for a full description of the configuration: +// https://yalter.github.io/niri/Configuration:-Introduction + +environment { + QT_QPA_PLATFORMTHEME "gtk3" +} + +include "startup.kdl" +include "input.kdl" +include "outputs.kdl" +include "layout.kdl" +include "style.kdl" +include "binds.kdl" + +// Example: block out two password managers from screen capture. +// (This example rule is commented out with a "/-" in front.) +window-rule { + match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id=r#"^org\.gnome\.World\.Secrets$"# + + block-out-from "screen-capture" + + // Use this instead if you want them visible on third-party screenshot tools. + // block-out-from "screencast" +} + +debug { + // Allows notification actions and window activation from Noctalia. + honor-xdg-activation-with-invalid-serial +} + +// You can change the path where screenshots are saved. +// A ~ at the front will be expanded to the home directory. +// The path is formatted with strftime(3) to give you the screenshot date and time. +screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" + +// You can also set this to null to disable saving screenshots to disk. +// screenshot-path null + +// Work around WezTerm's initial configure bug +// by setting an empty default-column-width. +window-rule { + // This regular expression is intentionally made as specific as possible, + // since this is the default config, and we want no false positives. + // You can get away with just app-id="wezterm" if you want. + match app-id=r#"^org\.wezfurlong\.wezterm$"# + default-column-width {} +} +include "./noctalia.kdl" diff --git a/home/aiden/.config/niri/input.kdl b/home/aiden/.config/niri/input.kdl new file mode 100644 index 0000000..df494ef --- /dev/null +++ b/home/aiden/.config/niri/input.kdl @@ -0,0 +1,28 @@ +// Input device configuration. +// Find the full list of options on the wiki: +// https://yalter.github.io/niri/Configuration:-Input +input { + keyboard { + // Enable numlock on startup, omitting this setting disables it. + numlock + } + touchpad { + tap + natural-scroll + } + mouse { + accel-profile "flat" + } + trackpoint { + // off + // natural-scroll + // accel-speed 0.2 + // accel-profile "flat" + // scroll-method "on-button-down" + // scroll-button 273 + // scroll-button-lock + // middle-emulation + } + warp-mouse-to-focus + focus-follows-mouse max-scroll-amount="40%" +} diff --git a/home/aiden/.config/niri/layout.kdl b/home/aiden/.config/niri/layout.kdl new file mode 100644 index 0000000..a233c6b --- /dev/null +++ b/home/aiden/.config/niri/layout.kdl @@ -0,0 +1,15 @@ +// Window rules let you adjust behavior for individual windows. +// Find more information on the wiki: +// https://yalter.github.io/niri/Configuration:-Window-Rules + +// Open as floating by default. +window-rule { + // This app-id regular expression will work for both: + // - host Firefox (app-id is "firefox") + // - Flatpak Firefox (app-id is "org.mozilla.firefox") + match app-id=r#"firefox$"# title="^Picture-in-Picture$" + match app-id="org.kde.dolphin" + match app-id="nemo" + match app-id="org.gnome.Calculator" + open-floating true +} diff --git a/home/aiden/.config/niri/noctalia.kdl b/home/aiden/.config/niri/noctalia.kdl new file mode 100644 index 0000000..5968944 --- /dev/null +++ b/home/aiden/.config/niri/noctalia.kdl @@ -0,0 +1,28 @@ +layout { + + focus-ring { + active-color "#cba6f7" + inactive-color "#1e1e2e" + urgent-color "#f38ba8" + } + + border { + active-color "#cba6f7" + inactive-color "#1e1e2e" + urgent-color "#f38ba8" + } + + shadow { + color "#00000070" + } + + tab-indicator { + active-color "#cba6f7" + inactive-color "#460594" + urgent-color "#f38ba8" + } + + insert-hint { + color "#cba6f780" + } +} diff --git a/home/aiden/.config/niri/outputs.kdl b/home/aiden/.config/niri/outputs.kdl new file mode 100644 index 0000000..5b836a1 --- /dev/null +++ b/home/aiden/.config/niri/outputs.kdl @@ -0,0 +1,53 @@ +//Acer 1080p +output "DP-3" { + mode "1920x1080" + transform "normal" + position x=0 y=0 + scale 1.0 +} +output "DP-4" { + mode "1920x1080" + transform "normal" + position x=0 y=0 + scale 1.0 +} +//LG 2K +output "DP-5" { + mode "2560x1440" + transform "normal" + position x=1920 y=0 + scale 1.0 +} +output "DP-6" { + mode "2560x1440" + transform "normal" + position x=1920 y=0 + scale 1.0 +} +output "DP-7" { + mode "2560x1440" + transform "normal" + position x=1920 y=0 + scale 1.0 +} + +//HP 1080p +//output "DP-4" { +// mode "1920x1080" +// transform "normal" +// position x=4480 y=0 +// scale 1.0 +//} +output "HDMI-A-1" { + mode "1920x1080" + transform "normal" + position x=4480 y=0 + scale 1.0 +} +//Built-in display +output "eDP-1" { + mode "1920x1080" + transform "normal" + position x=6400 y=0 + scale 1.0 +} diff --git a/home/aiden/.config/niri/startup.kdl b/home/aiden/.config/niri/startup.kdl new file mode 100644 index 0000000..efbac2e --- /dev/null +++ b/home/aiden/.config/niri/startup.kdl @@ -0,0 +1,31 @@ +//spawn-at-startup "/usr/lib/pam_kwallet_init" +//spawn-at-startup "/usr/lib/polkit-1/polkitd" +spawn-at-startup "/usr/bin/gnome-keyring-daemon" "--start" "--components=secrets" +spawn-at-startup "/usr/libexec/polkit-kde-authentication-agent-1" +spawn-at-startup "qs" "-c" "noctalia-shell" +spawn-at-startup "/usr/bin/pipewire" +spawn-at-startup "/usr/bin/wireplumber" +spawn-at-startup "/usr/bin/pipewire-pulse" +spawn-at-startup "/usr/bin/nextcloud" +spawn-at-startup "/usr/bin/swayidle" "-w" + +workspace "chat" { + open-on-output "DP-3" +} +window-rule { + match app-id="Element" + open-on-workspace "chat" +} +spawn-at-startup "/usr/bin/element-desktop" +//"--enable-features=UseOzonePlatform" "--ozone-platform=wayland" +window-rule { + match app-id="discord" + open-on-workspace "chat" +} +//spawn-at-startup "/usr/bin/flatpak" "run" "--socket=wayland" "com.discordapp.Discord" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland" +spawn-at-startup "/usr/local/bin/discord-delay.sh" +//window-rule { +// match app-id="srain" +// open-on-workspace "chat" +//} +//spawn-at-startup "/usr/bin/srain" diff --git a/home/aiden/.config/niri/style.kdl b/home/aiden/.config/niri/style.kdl new file mode 100644 index 0000000..08686ae --- /dev/null +++ b/home/aiden/.config/niri/style.kdl @@ -0,0 +1,118 @@ +// Settings that influence how windows are positioned and sized. +// Find more information on the wiki: +// https://yalter.github.io/niri/Configuration:-Layout +layout { + gaps 10 + background-color "transparent" + center-focused-column "never" + + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. + preset-column-widths { + // Proportion sets the width as a fraction of the output width, taking gaps into account. + // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. + // The default preset widths are 1/3, 1/2 and 2/3 of the output. + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + // Fixed sets the width in logical pixels exactly. + // fixed 1920 + } + default-column-width { proportion 0.5; } + + // You can change how the focus ring looks. + focus-ring { + width 4 + active-color "#7fc8ff" + inactive-color "#505050" + } + + // You can also add a border. It's similar to the focus ring, but always visible. + border { + // The settings are the same as for the focus ring. + // If you enable the border, you probably want to disable the focus ring. + off + width 4 + active-color "#ffc87f" + inactive-color "#505050" + urgent-color "#9b0000" + } + + // You can enable drop shadows for windows. + shadow { + // Uncomment the next line to enable shadows. + //on + softness 10 + // Spread expands the shadow. + spread 10 + // Offset moves the shadow relative to the window. + offset x=0 y=5 + color "#0007" + } + + // Struts shrink the area occupied by windows, similarly to layer-shell panels. + // You can think of them as a kind of outer gaps. They are set in logical pixels. + // Left and right struts will cause the next window to the side to always be visible. + // Top and bottom struts will simply add outer gaps in addition to the area occupied by + // layer-shell panels and regular gaps. + struts { + // left 64 + // right 64 + // top 64 + // bottom 64 + } +} + + +// Set the regular wallpaper on the backdrop. +layer-rule { + match namespace="^noctalia-wallpaper*" + place-within-backdrop true +} + +// Optionally, disable the workspace shadows in the overview. +overview { + workspace-shadow { + off + } +} + +// Uncomment this line to ask the clients to omit their client-side decorations if possible. +// If the client will specifically ask for CSD, the request will be honored. +// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. +// This option will also fix border/focus ring drawing behind some semitransparent windows. +// After enabling or disabling this, you need to restart the apps for this to take effect. +//prefer-no-csd + +// Animation settings. +// The wiki explains how to configure individual animations: +// https://yalter.github.io/niri/Configuration:-Animations +animations { + +} + +// enable transparency +window-rule { + match is-active=false + opacity 0.8 +} +window-rule { + match is-active=true + opacity 0.95 +} +window-rule { + draw-border-with-background false +} +// Add to exempt from transparency +window-rule { + match app-id="gimp" + match title="^*Invidious — Mozilla Firefox$" + match title="^Watch2Gether — Mozilla Firefox$" + opacity 1.0 +} + +// enable rounded corners for all windows. +window-rule { + geometry-corner-radius 12 + clip-to-geometry true +} + diff --git a/home/aiden/.config/noctalia/colors.json b/home/aiden/.config/noctalia/colors.json new file mode 100644 index 0000000..fb88025 --- /dev/null +++ b/home/aiden/.config/noctalia/colors.json @@ -0,0 +1,18 @@ +{ + "mError": "#f38ba8", + "mHover": "#94e2d5", + "mOnError": "#11111b", + "mOnHover": "#11111b", + "mOnPrimary": "#11111b", + "mOnSecondary": "#11111b", + "mOnSurface": "#cdd6f4", + "mOnSurfaceVariant": "#a3b4eb", + "mOnTertiary": "#11111b", + "mOutline": "#4c4f69", + "mPrimary": "#cba6f7", + "mSecondary": "#fab387", + "mShadow": "#11111b", + "mSurface": "#1e1e2e", + "mSurfaceVariant": "#313244", + "mTertiary": "#94e2d5" +} diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json new file mode 100644 index 0000000..e3fcb42 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json @@ -0,0 +1,34 @@ +{ + "dark": { + "mPrimary": "#b58fff", + "mOnPrimary": "#000000", + "mSecondary": "#c79aff", + "mOnSecondary": "#000000", + "mTertiary": "#d8b4ff", + "mOnTertiary": "#000000", + "mError": "#ff6f9b", + "mOnError": "#000000", + "mSurface": "#000000", + "mOnSurface": "#e8d8ff", + "mSurfaceVariant": "#110d1a", + "mOnSurfaceVariant": "#b58fff", + "mOutline": "#4c3a70", + "mShadow": "#000000" + }, + "light": { + "mPrimary": "#8a56d4", + "mOnPrimary": "#ffffff", + "mSecondary": "#a074ff", + "mOnSecondary": "#ffffff", + "mTertiary": "#c79aff", + "mOnTertiary": "#ffffff", + "mError": "#ff6f9b", + "mOnError": "#ffffff", + "mSurface": "#fbf8ff", + "mOnSurface": "#1a1428", + "mSurfaceVariant": "#e8e0f8", + "mOnSurfaceVariant": "#8a56d4", + "mOutline": "#9b85c2", + "mShadow": "#e2d8f5" + } +} diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED dark b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED dark new file mode 100644 index 0000000..7071a9b --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED dark @@ -0,0 +1,31 @@ +[colors.primary] +background = "#000000" +foreground = "#e8d8ff" + +[colors.cursor] +text = "#000000" +cursor = "#e8d8ff" + +[colors.selection] +text = "#e8d8ff" +background = "#4c3a70" + +[colors.normal] +black = "#000000" +red = "#ff6f9b" +green = "#a8e6cf" +yellow = "#d8b4ff" +blue = "#b58fff" +magenta = "#c79aff" +cyan = "#e0c1ff" +white = "#e8d8ff" + +[colors.bright] +black = "#4c3a70" +red = "#ff8cb3" +green = "#b8f0d8" +yellow = "#e6d1ff" +blue = "#c9a8ff" +magenta = "#d4b8ff" +cyan = "#f0e0ff" +white = "#f5f0ff" diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED light b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED light new file mode 100644 index 0000000..17d515b --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/alacritty/Lilac AMOLED light @@ -0,0 +1,31 @@ +[colors.primary] +background = "#fbf8ff" +foreground = "#1a1428" + +[colors.cursor] +text = "#fbf8ff" +cursor = "#1a1428" + +[colors.selection] +text = "#1a1428" +background = "#e8e0f8" + +[colors.normal] +black = "#6b5b95" +red = "#ff6f9b" +green = "#6fb58f" +yellow = "#c79aff" +blue = "#8a56d4" +magenta = "#a074ff" +cyan = "#b89fff" +white = "#1a1428" + +[colors.bright] +black = "#9b85c2" +red = "#ff8cb3" +green = "#85d7a8" +yellow = "#e0c1ff" +blue = "#b58fff" +magenta = "#c79aff" +cyan = "#d8b4ff" +white = "#120f1f" diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED dark b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED dark new file mode 100644 index 0000000..5bff7f8 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED dark @@ -0,0 +1,10 @@ +[colors] +foreground=e8d8ff +background=000000 +regular0=000000 regular1=ff6f9b regular2=a8e6cf regular3=d8b4ff +regular4=b58fff regular5=c79aff regular6=e0c1ff regular7=e8d8ff +bright0=4c3a70 bright1=ff8cb3 bright2=b8f0d8 bright3=e6d1ff +bright4=c9a8ff bright5=d4b8ff bright6=f0e0ff bright7=f5f0ff +selection-foreground=e8d8ff +selection-background=4c3a70 +cursor=000000 e8d8ff diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED light b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED light new file mode 100644 index 0000000..2c5fba4 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/foot/Lilac AMOLED light @@ -0,0 +1,10 @@ +[colors] +foreground=1a1428 +background=fbf8ff +regular0=6b5b95 regular1=ff6f9b regular2=6fb58f regular3=c79aff +regular4=8a56d4 regular5=a074ff regular6=b89fff regular7=1a1428 +bright0=9b85c2 bright1=ff8cb3 bright2=85d7a8 bright3=e0c1ff +bright4=b58fff bright5=c79aff bright6=d8b4ff bright7=120f1f +selection-foreground=1a1428 +selection-background=e8e0f8 +cursor=fbf8ff 1a1428 diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED dark b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED dark new file mode 100644 index 0000000..ecf00d1 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED dark @@ -0,0 +1,22 @@ +palette = 0=#000000 +palette = 1=#ff6f9b +palette = 2=#a8e6cf +palette = 3=#d8b4ff +palette = 4=#b58fff +palette = 5=#c79aff +palette = 6=#e0c1ff +palette = 7=#e8d8ff +palette = 8=#4c3a70 +palette = 9=#ff8cb3 +palette = 10=#b8f0d8 +palette = 11=#e6d1ff +palette = 12=#c9a8ff +palette = 13=#d4b8ff +palette = 14=#f0e0ff +palette = 15=#f5f0ff +background = #000000 +foreground = #e8d8ff +cursor-color = #e8d8ff +cursor-text = #000000 +selection-background = #4c3a70 +selection-foreground = #e8d8ff diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED light b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED light new file mode 100644 index 0000000..5cd98b1 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/ghostty/Lilac AMOLED light @@ -0,0 +1,22 @@ +palette = 0=#6b5b95 +palette = 1=#ff6f9b +palette = 2=#6fb58f +palette = 3=#c79aff +palette = 4=#8a56d4 +palette = 5=#a074ff +palette = 6=#b89fff +palette = 7=#1a1428 +palette = 8=#9b85c2 +palette = 9=#ff8cb3 +palette = 10=#85d7a8 +palette = 11=#e0c1ff +palette = 12=#b58fff +palette = 13=#c79aff +palette = 14=#d8b4ff +palette = 15=#120f1f +background = #fbf8ff +foreground = #1a1428 +cursor-color = #1a1428 +cursor-text = #fbf8ff +selection-background = #e8e0f8 +selection-foreground = #1a1428 diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED dark.conf b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED dark.conf new file mode 100644 index 0000000..2d7ab97 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED dark.conf @@ -0,0 +1,22 @@ +background #000000 +foreground #e8d8ff +selection_background #4c3a70 +selection_foreground #e8d8ff +cursor #e8d8ff +cursor_text_color #000000 +color0 #000000 +color1 #ff6f9b +color2 #a8e6cf +color3 #d8b4ff +color4 #b58fff +color5 #c79aff +color6 #e0c1ff +color7 #e8d8ff +color8 #4c3a70 +color9 #ff8cb3 +color10 #b8f0d8 +color11 #e6d1ff +color12 #c9a8ff +color13 #d4b8ff +color14 #f0e0ff +color15 #f5f0ff diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED light.conf b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED light.conf new file mode 100644 index 0000000..09a5500 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/kitty/Lilac AMOLED light.conf @@ -0,0 +1,22 @@ +background #fbf8ff +foreground #1a1428 +selection_background #e8e0f8 +selection_foreground #1a1428 +cursor #1a1428 +cursor_text_color #fbf8ff +color0 #6b5b95 +color1 #ff6f9b +color2 #6fb58f +color3 #c79aff +color4 #8a56d4 +color5 #a074ff +color6 #b89fff +color7 #1a1428 +color8 #9b85c2 +color9 #ff8cb3 +color10 #85d7a8 +color11 #e0c1ff +color12 #b58fff +color13 #c79aff +color14 #d8b4ff +color15 #120f1f diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED dark.toml b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED dark.toml new file mode 100644 index 0000000..d0637cb --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED dark.toml @@ -0,0 +1,17 @@ +[colors] +ansi = [ + "#000000","#ff6f9b","#a8e6cf","#d8b4ff","#b58fff","#c79aff","#e0c1ff","#e8d8ff", +] +background = "#000000" +brights = [ + "#4c3a70","#ff8cb3","#b8f0d8","#e6d1ff","#c9a8ff","#d4b8ff","#f0e0ff","#f5f0ff", +] +cursor_bg = "#e8d8ff" +cursor_border = "#e8d8ff" +cursor_fg = "#000000" +foreground = "#e8d8ff" +selection_bg = "#4c3a70" +selection_fg = "#e8d8ff" + +[metadata] +name = "LilacAMOLED (Dark)" diff --git a/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED light.toml b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED light.toml new file mode 100644 index 0000000..537f88b --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Lilac AMOLED/terminal/wezterm/Lilac AMOLED light.toml @@ -0,0 +1,17 @@ +[colors] +ansi = [ + "#6b5b95","#ff6f9b","#6fb58f","#c79aff","#8a56d4","#a074ff","#b89fff","#1a1428", +] +background = "#fbf8ff" +brights = [ + "#9b85c2","#ff8cb3","#85d7a8","#e0c1ff","#b58fff","#c79aff","#d8b4ff","#120f1f", +] +cursor_bg = "#1a1428" +cursor_border = "#1a1428" +cursor_fg = "#fbf8ff" +foreground = "#1a1428" +selection_bg = "#e8e0f8" +selection_fg = "#1a1428" + +[metadata] +name = "LilacAMOLED (Light)" diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/Rose Pine Moon.json b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/Rose Pine Moon.json new file mode 100644 index 0000000..2df81f8 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/Rose Pine Moon.json @@ -0,0 +1,38 @@ +{ + "dark": { + "mPrimary": "#ea9a97", + "mOnPrimary": "#232136", + "mSecondary": "#9ccfd8", + "mOnSecondary": "#232136", + "mTertiary": "#3e8fb0", + "mOnTertiary": "#e0def4", + "mError": "#eb6f92", + "mOnError": "#232136", + "mSurface": "#232136", + "mOnSurface": "#e0def4", + "mSurfaceVariant": "#393552", + "mOnSurfaceVariant": "#908caa", + "mOutline": "#44415a", + "mShadow": "#232136", + "mHover": "#56526e", + "mOnHover": "#e0def4" + }, + "light": { + "mPrimary": "#d7827e", + "mOnPrimary": "#faf4ed", + "mSecondary": "#56949f", + "mOnSecondary": "#faf4ed", + "mTertiary": "#286983", + "mOnTertiary": "#faf4ed", + "mError": "#b4637a", + "mOnError": "#faf4ed", + "mSurface": "#fffaf3", + "mOnSurface": "#575279", + "mSurfaceVariant": "#f2e9e1", + "mOnSurfaceVariant": "#797593", + "mOutline": "#dfdad9", + "mShadow": "#faf4ed", + "mHover": "#cecacd", + "mOnHover": "#575279" + } +} diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon dark b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon dark new file mode 100644 index 0000000..6014d69 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon dark @@ -0,0 +1,74 @@ +# Colors section of "Alacritty - TOML configuration file format" +# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd#colors + +[colors.primary] +foreground = "#e0def4" +background = "#232136" +dim_foreground = "#908caa" +bright_foreground = "#e0def4" + +[colors.cursor] +text = "None" +cursor = "None" + +[colors.vi_mode_cursor] +text = "None" +cursor = "None" + +[colors.search.matches] +foreground = "#908caa" +background = "#393552" + +[colors.search.focused_match] +foreground = "#232136" +background = "#ea9a97" + +[colors.hints.start] +foreground = "#908caa" +background = "#2a273f" + +[colors.hints.end] +foreground = "#6e6a86" +background = "#2a273f" + +[colors.line_indicator] +foreground = "None" +background = "None" + +[colors.footer_bar] +foreground = "#e0def4" +background = "#2a273f" + +[colors.selection] +text = "#e0def4" +background = "#44415a" + +[colors.normal] +black = "#393552" +red = "#eb6f92" +green = "#3e8fb0" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ea9a97" +white = "#e0def4" + +[colors.bright] +black = "#6e6a86" +red = "#eb6f92" +green = "#3e8fb0" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ea9a97" +white = "#e0def4" + +[colors.dim] +black = "#6e6a86" +red = "#eb6f92" +green = "#31748f" +yellow = "#f6c177" +blue = "#9ccfd8" +magenta = "#c4a7e7" +cyan = "#ebbcba" +white = "#e0def4" diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon light b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon light new file mode 100644 index 0000000..c5f87ed --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/alacritty/Rose Pine Moon light @@ -0,0 +1,74 @@ +# Colors section of "Alacritty - TOML configuration file format" +# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd#colors + +[colors.primary] +foreground = "#575279" +background = "#faf4ed" +dim_foreground = "#797593" +bright_foreground = "#575279" + +[colors.cursor] +text = "None" +cursor = "None" + +[colors.vi_mode_cursor] +text = "None" +cursor = "None" + +[colors.search.matches] +foreground = "#797593" +background = "#f2e9e1" + +[colors.search.focused_match] +foreground = "#faf4ed" +background = "#d7827e" + +[colors.hints.start] +foreground = "#797593" +background = "#fffaf3" + +[colors.hints.end] +foreground = "#9893a5" +background = "#fffaf3" + +[colors.line_indicator] +foreground = "None" +background = "None" + +[colors.footer_bar] +foreground = "#575279" +background = "#fffaf3" + +[colors.selection] +text = "#575279" +background = "#dfdad9" + +[colors.normal] +black = "#f2e9e1" +red = "#b4637a" +green = "#286983" +yellow = "#ea9d34" +blue = "#56949f" +magenta = "#907aa9" +cyan = "#d7827e" +white = "#575279" + +[colors.bright] +black = "#9893a5" +red = "#b4637a" +green = "#286983" +yellow = "#ea9d34" +blue = "#56949f" +magenta = "#907aa9" +cyan = "#d7827e" +white = "#575279" + +[colors.dim] +black = "#9893a5" +red = "#b4637a" +green = "#286983" +yellow = "#ea9d34" +blue = "#56949f" +magenta = "#907aa9" +cyan = "#d7827e" +white = "#575279" diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon dark b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon dark new file mode 100644 index 0000000..0d98266 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon dark @@ -0,0 +1,23 @@ +[colors] +foreground=e0def4 +background=232136 + +regular0=393552 +regular1=eb6f92 +regular2=3e8fb0 +regular3=f6c177 +regular4=9ccfd8 +regular5=c4a7e7 +regular6=ea9a97 +regular7=e0def4 + +bright0=6e6a86 +bright1=eb6f92 +bright2=3e8fb0 +bright3=f6c177 +bright4=9ccfd8 +bright5=c4a7e7 +bright6=ea9a97 +bright7=e0def4 + +flash=f6c177 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon light b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon light new file mode 100644 index 0000000..5daa9d8 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/foot/Rose Pine Moon light @@ -0,0 +1,23 @@ +[colors] +foreground=575279 +background=faf4ed + +regular0=f2e9e1 +regular1=b4637a +regular2=286983 +regular3=ea9d34 +regular4=56949f +regular5=907aa9 +regular6=d7827e +regular7=575279 + +bright0=9893a5 +bright1=b4637a +bright2=286983 +bright3=ea9d34 +bright4=56949f +bright5=907aa9 +bright6=d7827e +bright7=575279 + +flash=ea9d34 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon dark b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon dark new file mode 100644 index 0000000..37f294c --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon dark @@ -0,0 +1,22 @@ +palette = 0=#393552 +palette = 1=#eb6f92 +palette = 2=#3e8fb0 +palette = 3=#f6c177 +palette = 4=#9ccfd8 +palette = 5=#c4a7e7 +palette = 6=#ea9a97 +palette = 7=#e0def4 +palette = 8=#6e6a86 +palette = 9=#eb6f92 +palette = 10=#3e8fb0 +palette = 11=#f6c177 +palette = 12=#9ccfd8 +palette = 13=#c4a7e7 +palette = 14=#ea9a97 +palette = 15=#e0def4 +background = #232136 +foreground = #e0def4 +cursor-color = #908caa +cursor-text = #e0def4 +selection-background = #44415a +selection-foreground = #e0def4 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon light b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon light new file mode 100644 index 0000000..12e99ac --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/ghostty/Rose Pine Moon light @@ -0,0 +1,22 @@ +palette = 0=#f2e9e1 +palette = 1=#b4637a +palette = 2=#286983 +palette = 3=#ea9d34 +palette = 4=#56949f +palette = 5=#907aa9 +palette = 6=#d7827e +palette = 7=#575279 +palette = 8=#9893a5 +palette = 9=#b4637a +palette = 10=#286983 +palette = 11=#ea9d34 +palette = 12=#56949f +palette = 13=#907aa9 +palette = 14=#d7827e +palette = 15=#575279 +background = #faf4ed +foreground = #575279 +cursor-color = #797593 +cursor-text = #faf4ed +selection-background = #dfdad9 +selection-foreground = #575279 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon dark.conf b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon dark.conf new file mode 100644 index 0000000..d5438f1 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon dark.conf @@ -0,0 +1,22 @@ +color0 #26233a +color1 #eb6f92 +color2 #31748f +color3 #f6c177 +color4 #9ccfd8 +color5 #c4a7e7 +color6 #ebbcba +color7 #e0def4 +color8 #6e6a86 +color9 #eb6f92 +color10 #31748f +color11 #f6c177 +color12 #9ccfd8 +color13 #c4a7e7 +color14 #ebbcba +color15 #e0def4 +background #232136 +selection_foreground #232136 +cursor #908caa +cursor_text_color #e0def4 +foreground #e0def4 +selection_background #6e6a86 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon light.conf b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon light.conf new file mode 100644 index 0000000..d02cf22 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/kitty/Rose Pine Moon light.conf @@ -0,0 +1,22 @@ +color0 #f2e9e1 +color1 #b4637a +color2 #286983 +color3 #ea9d34 +color4 #56949f +color5 #907aa9 +color6 #d7827e +color7 #575279 +color8 #9893a5 +color9 #b4637a +color10 #286983 +color11 #ea9d34 +color12 #56949f +color13 #907aa9 +color14 #d7827e +color15 #575279 +background #faf4ed +selection_foreground #575279 +cursor #797593 +cursor_text_color #faf4ed +foreground #575279 +selection_background #dfdad9 diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon dark.toml b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon dark.toml new file mode 100644 index 0000000..33b7d67 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon dark.toml @@ -0,0 +1,33 @@ +[colors] +ansi = [ + "#393552", + "#eb6f92", + "#9ccfd8", + "#f6c177", + "#3e8fb0", + "#c4a7e7", + "#ea9a97", + "#e0def4", +] +background = "#232136" +brights = [ + "#6e6a86", + "#eb6f92", + "#9ccfd8", + "#f6c177", + "#3e8fb0", + "#c4a7e7", + "#ea9a97", + "#e0def4", +] +cursor_bg = "#908caa" +cursor_border = "#908caa" +cursor_fg = "#e0def4" +foreground = "#e0def4" +selection_bg = "#44415a" +selection_fg = "#e0def4" + +[colors.indexed] + +[metadata] +name = "Noctalia" diff --git a/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon light.toml b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon light.toml new file mode 100644 index 0000000..95c40ec --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Rose Pine Moon/terminal/wezterm/Rose Pine Moon light.toml @@ -0,0 +1,33 @@ +[colors] +ansi = [ + "#f2e9e1", + "#b4637a", + "#56949f", + "#ea9d34", + "#286983", + "#907aa9", + "#d7827e", + "#575279", +] +background = "#faf4ed" +brights = [ + "#9893a5", + "#b4637a", + "#56949f", + "#ea9d34", + "#286983", + "#907aa9", + "#d7827e", + "#575279", +] +cursor_bg = "#797593" +cursor_border = "#797593" +cursor_fg = "#faf4ed" +foreground = "#575279" +selection_bg = "#dfdad9" +selection_fg = "#575279" + +[colors.indexed] + +[metadata] +name = "Noctalia" diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/Tokyo Night Moon.json b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/Tokyo Night Moon.json new file mode 100644 index 0000000..78bd1c1 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/Tokyo Night Moon.json @@ -0,0 +1,38 @@ +{ + "dark": { + "mPrimary": "#7a88cf", + "mOnPrimary": "#1f2335", + "mSecondary": "#d7729f", + "mOnSecondary": "#1f2335", + "mTertiary": "#9cd58a", + "mOnTertiary": "#1f2335", + "mError": "#f7768e", + "mOnError": "#1f2335", + "mSurface": "#1f2335", + "mOnSurface": "#a9b1d6", + "mSurfaceVariant": "#2c314a", + "mOnSurfaceVariant": "#8289a6", + "mOutline": "#4b517a", + "mShadow": "#181b2a", + "mHover": "#9cd58a", + "mOnHover": "#1f2335" + }, + "light": { + "mPrimary": "#4e70c2", + "mOnPrimary": "#f0f2f7", + "mSecondary": "#85539c", + "mOnSecondary": "#f0f2f7", + "mTertiary": "#4c663b", + "mOnTertiary": "#f0f2f7", + "mError": "#e55561", + "mOnError": "#f0f2f7", + "mSurface": "#f0f2f7", + "mOnSurface": "#4e70c2", + "mSurfaceVariant": "#dbdfea", + "mOnSurfaceVariant": "#6a708a", + "mOutline": "#c8ccd8", + "mShadow": "#a4a8b7", + "mHover": "#4c663b", + "mOnHover": "#f0f2f7" + } +} diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon dark b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon dark new file mode 100644 index 0000000..7bf7229 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon dark @@ -0,0 +1,33 @@ +# Colors (TokyoNight-Moon) + +[colors.bright] +black = '#545c7e' +blue = '#7a88cf' +cyan = '#7bb0c0' +green = '#9cd58a' +magenta = '#d7729f' +red = '#f7768e' +white = '#a9b1d6' +yellow = '#e6c384' + +[colors.cursor] +cursor = '#a9b1d6' +text = '#1f2335' + +[colors.normal] +black = '#1f2335' +blue = '#7a88cf' +cyan = '#7bb0c0' +green = '#9cd58a' +magenta = '#d7729f' +red = '#f7768e' +white = '#8289a6' +yellow = '#e6c384' + +[colors.primary] +background = '#1f2335' +foreground = '#a9b1d6' + +[colors.selection] +background = '#4b517a' +text = '#a9b1d6' diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon light b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon light new file mode 100644 index 0000000..030f331 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/alacritty/Tokyo Night Moon light @@ -0,0 +1,33 @@ +# Colors (TokyoNight-Moon-Light) + +[colors.bright] +black = '#939ab7' +blue = '#5e7bba' +cyan = '#569b9f' +green = '#5e7250' +magenta = '#85539c' +red = '#d26e7a' +white = '#6a708a' +yellow = '#9e8c6b' + +[colors.cursor] +cursor = '#4e70c2' +text = '#f0f2f7' + +[colors.normal] +black = '#f0f2f7' +blue = '#4e70c2' +cyan = '#569b9f' +green = '#4c663b' +magenta = '#85539c' +red = '#e55561' +white = '#6a708a' +yellow = '#9e8c6b' + +[colors.primary] +background = '#f0f2f7' +foreground = '#4e70c2' + +[colors.selection] +background = '#c8ccd8' +text = '#4e70c2' diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon dark b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon dark new file mode 100644 index 0000000..410d86a --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon dark @@ -0,0 +1,22 @@ +[colors] +foreground=a9b1d6 +background=1f2335 +regular0=1f2335 +regular1=f7768e +regular2=9cd58a +regular3=e6c384 +regular4=7a88cf +regular5=d7729f +regular6=7bb0c0 +regular7=8289a6 +bright0=545c7e +bright1=f7768e +bright2=9cd58a +bright3=e6c384 +bright4=7a88cf +bright5=d7729f +bright6=7bb0c0 +bright7=a9b1d6 +selection-foreground=a9b1d6 +selection-background=4b517a +cursor=1f2335 a9b1d6 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon light b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon light new file mode 100644 index 0000000..f8d9356 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/foot/Tokyo Night Moon light @@ -0,0 +1,22 @@ +[colors] +foreground=4e70c2 +background=f0f2f7 +regular0=f0f2f7 +regular1=e55561 +regular2=4c663b +regular3=9e8c6b +regular4=4e70c2 +regular5=85539c +regular6=569b9f +regular7=6a708a +bright0=939ab7 +bright1=d26e7a +bright2=5e7250 +bright3=9e8c6b +bright4=5e7bba +bright5=85539c +bright6=569b9f +bright7=6a708a +selection-foreground=4e70c2 +selection-background=c8ccd8 +cursor=f0f2f7 4e70c2 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon dark b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon dark new file mode 100644 index 0000000..df2b3f8 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon dark @@ -0,0 +1,22 @@ +palette = 0=#1f2335 +palette = 1=#f7768e +palette = 2=#9cd58a +palette = 3=#e6c384 +palette = 4=#7a88cf +palette = 5=#d7729f +palette = 6=#7bb0c0 +palette = 7=#8289a6 +palette = 8=#545c7e +palette = 9=#f7768e +palette = 10=#9cd58a +palette = 11=#e6c384 +palette = 12=#7a88cf +palette = 13=#d7729f +palette = 14=#7bb0c0 +palette = 15=#a9b1d6 +background = #1f2335 +foreground = #a9b1d6 +cursor-color = #a9b1d6 +cursor-text = #1f2335 +selection-background = #4b517a +selection-foreground = #a9b1d6 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon light b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon light new file mode 100644 index 0000000..aca6080 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/ghostty/Tokyo Night Moon light @@ -0,0 +1,22 @@ +palette = 0=#f0f2f7 +palette = 1=#e55561 +palette = 2=#4c663b +palette = 3=#9e8c6b +palette = 4=#4e70c2 +palette = 5=#85539c +palette = 6=#569b9f +palette = 7=#6a708a +palette = 8=#939ab7 +palette = 9=#d26e7a +palette = 10=#5e7250 +palette = 11=#9e8c6b +palette = 12=#5e7bba +palette = 13=#85539c +palette = 14=#569b9f +palette = 15=#4e70c2 +background = #f0f2f7 +foreground = #4e70c2 +cursor-color = #4e70c2 +cursor-text = #f0f2f7 +selection-background = #c8ccd8 +selection-foreground = #4e70c2 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon dark.conf b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon dark.conf new file mode 100644 index 0000000..66b7893 --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon dark.conf @@ -0,0 +1,22 @@ +color0 #1f2335 +color1 #f7768e +color2 #9cd58a +color3 #e6c384 +color4 #7a88cf +color5 #d7729f +color6 #7bb0c0 +color7 #8289a6 +color8 #545c7e +color9 #f7768e +color10 #9cd58a +color11 #e6c384 +color12 #7a88cf +color13 #d7729f +color14 #7bb0c0 +color15 #a9b1d6 +background #1f2335 +foreground #a9b1d6 +cursor #a9b1d6 +cursor_text_color #1f2335 +selection_background #4b517a +selection_foreground #a9b1d6 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon light.conf b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon light.conf new file mode 100644 index 0000000..1a09bbb --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/kitty/Tokyo Night Moon light.conf @@ -0,0 +1,22 @@ +color0 #f0f2f7 +color1 #e55561 +color2 #4c663b +color3 #9e8c6b +color4 #4e70c2 +color5 #85539c +color6 #569b9f +color7 #6a708a +color8 #939ab7 +color9 #d26e7a +color10 #5e7250 +color11 #9e8c6b +color12 #5e7bba +color13 #85539c +color14 #569b9f +color15 #4e70c2 +background #f0f2f7 +foreground #4e70c2 +cursor #4e70c2 +cursor_text_color #f0f2f7 +selection_background #c8ccd8 +selection_foreground #4e70c2 diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon dark.toml b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon dark.toml new file mode 100644 index 0000000..1e1319a --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon dark.toml @@ -0,0 +1,78 @@ +[colors] +ansi = [ + "#1f2335", + "#f7768e", + "#9cd58a", + "#e6c384", + "#7a88cf", + "#d7729f", + "#7bb0c0", + "#8289a6", +] +background = "#1f2335" +brights = [ + "#545c7e", + "#f7768e", + "#9cd58a", + "#e6c384", + "#7a88cf", + "#d7729f", + "#7bb0c0", + "#a9b1d6", +] +cursor_bg = "#a9b1d6" +cursor_border = "#a9b1d6" +cursor_fg = "#1f2335" +foreground = "#a9b1d6" +selection_bg = "#4b517a" +selection_fg = "#a9b1d6" + +[colors.indexed] + +[colors.tab_bar] +background = "#1a1e30" +inactive_tab_edge = "#1f2335" + +[colors.tab_bar.active_tab] +bg_color = "#1f2335" +fg_color = "#7a88cf" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab] +bg_color = "#1a1e30" +fg_color = "#545c7e" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab_hover] +bg_color = "#1a1e30" +fg_color = "#7a88cf" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab] +bg_color = "#1a1e30" +fg_color = "#7a88cf" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab_hover] +bg_color = "#7a88cf" +fg_color = "#1f2335" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[metadata] +author = "folke (Moon Adapted)" +name = "TokyoNight-Moon" diff --git a/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon light.toml b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon light.toml new file mode 100644 index 0000000..56e17ec --- /dev/null +++ b/home/aiden/.config/noctalia/colorschemes/Tokyo Night Moon/terminal/wezterm/Tokyo Night Moon light.toml @@ -0,0 +1,78 @@ +[colors] +ansi = [ + "#f0f2f7", + "#e55561", + "#4c663b", + "#9e8c6b", + "#4e70c2", + "#85539c", + "#569b9f", + "#6a708a", +] +background = "#f0f2f7" +brights = [ + "#939ab7", + "#d26e7a", + "#5e7250", + "#9e8c6b", + "#5e7bba", + "#85539c", + "#569b9f", + "#4e70c2", +] +cursor_bg = "#4e70c2" +cursor_border = "#4e70c2" +cursor_fg = "#f0f2f7" +foreground = "#4e70c2" +selection_bg = "#c8ccd8" +selection_fg = "#4e70c2" + +[colors.indexed] + +[colors.tab_bar] +background = "#dbdfea" +inactive_tab_edge = "#e6eaf3" + +[colors.tab_bar.active_tab] +bg_color = "#f0f2f7" +fg_color = "#4e70c2" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab] +bg_color = "#dbdfea" +fg_color = "#939ab7" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.inactive_tab_hover] +bg_color = "#dbdfea" +fg_color = "#4e70c2" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab] +bg_color = "#dbdfea" +fg_color = "#4e70c2" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[colors.tab_bar.new_tab_hover] +bg_color = "#4e70c2" +fg_color = "#f0f2f7" +intensity = "Normal" +italic = false +strikethrough = false +underline = "None" + +[metadata] +author = "folke (Moon Adapted)" +name = "TokyoNight-Moon-Light" diff --git a/home/aiden/.config/noctalia/pam/password.conf b/home/aiden/.config/noctalia/pam/password.conf new file mode 100644 index 0000000..68fc325 --- /dev/null +++ b/home/aiden/.config/noctalia/pam/password.conf @@ -0,0 +1,3 @@ +#auth sufficient pam_fprintd.so max-tries=1 +# only uncomment this if you have a fingerprint reader +auth required pam_unix.so diff --git a/home/aiden/.config/noctalia/plugins.json b/home/aiden/.config/noctalia/plugins.json new file mode 100644 index 0000000..1c44f01 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins.json @@ -0,0 +1,18 @@ +{ + "sources": [ + { + "enabled": true, + "name": "Official Noctalia Plugins", + "url": "https://github.com/noctalia-dev/noctalia-plugins" + } + ], + "states": { + "privacy-indicator": { + "enabled": true + }, + "update-count": { + "enabled": true + } + }, + "version": 1 +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/BarWidget.qml b/home/aiden/.config/noctalia/plugins/privacy-indicator/BarWidget.qml new file mode 100644 index 0000000..91cb16f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/BarWidget.qml @@ -0,0 +1,273 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Quickshell +import Quickshell.Io +import Quickshell.Services.Pipewire +import qs.Commons +import qs.Modules.Bar.Extras +import qs.Services.UI +import qs.Widgets + +Rectangle { + id: root + + property var pluginApi: null + + property ShellScreen screen + property string widgetId: "" + property string section: "" + + readonly property string barPosition: Settings.data.bar.position + readonly property bool isVertical: barPosition === "left" || barPosition === "right" + + property bool micActive: false + property bool camActive: false + property bool scrActive: false + property var micApps: [] + property var camApps: [] + property var scrApps: [] + + property var cfg: pluginApi?.pluginSettings || ({}) + property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({}) + + property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive + property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins + property int iconSpacing: cfg.iconSpacing || Style.marginXS + + readonly property color activeColor: Color.mPrimary + readonly property color inactiveColor: Qt.alpha(Color.mOnSurfaceVariant, 0.3) + readonly property color micColor: micActive ? activeColor : inactiveColor + readonly property color camColor: camActive ? activeColor : inactiveColor + readonly property color scrColor: scrActive ? activeColor : inactiveColor + + readonly property bool isVisible: !hideInactive || micActive || camActive || scrActive + + property real margins: removeMargins ? 0 : Style.marginM * 2 + implicitWidth: isVertical ? Style.capsuleHeight : Math.round(layout.implicitWidth + margins) + implicitHeight: isVertical ? Math.round(layout.implicitHeight + margins) : Style.capsuleHeight + + Layout.alignment: Qt.AlignVCenter + radius: Style.radiusM + color: Style.capsuleColor + visible: root.isVisible + opacity: root.isVisible ? 1.0 : 0.0 + + PwObjectTracker { + objects: Pipewire.ready ? Pipewire.nodes.values : [] + } + + Process { + id: cameraCheckProcess + running: false + + command: ["sh", "-c", "for dev in /dev/video*; do [ -e \"$dev\" ] && [ -n \"$(find /proc/[0-9]*/fd/ -lname \"$dev\" 2>/dev/null | head -n1)\" ] && echo \"active\" && exit 0; done; exit 1"] + + onExited: (code, status) => { + var isActive = code === 0; + root.camActive = isActive; + + if (isActive) { + cameraAppsProcess.running = true; + } else { + root.camApps = []; + } + } + } + + Process { + id: cameraAppsProcess + running: false + + command: ["sh", "-c", "for dev in /dev/video*; do [ -e \"$dev\" ] && for fd in /proc/[0-9]*/fd/*; do [ -L \"$fd\" ] && [ \"$(readlink \"$fd\" 2>/dev/null)\" = \"$dev\" ] && ps -p \"$(echo \"$fd\" | cut -d/ -f3)\" -o comm= 2>/dev/null; done; done | sort -u | tr '\\n' ',' | sed 's/,$//'"] + + onExited: (code, status) => { + if (stdout) { + var appsString = stdout.trim(); + var apps = appsString.length > 0 ? appsString.split(',') : []; + root.camApps = apps; + } else { + root.camApps = []; + } + } + } + + Timer { + interval: 1000 + repeat: true + running: true + triggeredOnStart: true + onTriggered: updatePrivacyState() + } + + function hasNodeLinks(node, links) { + for (var i = 0; i < links.length; i++) { + var link = links[i]; + if (link && (link.source === node || link.target === node)) { + return true; + } + } + return false; + } + + function getAppName(node) { + return node.properties["application.name"] || node.nickname || node.name || ""; + } + + function updateMicrophoneState(nodes, links) { + var appNames = []; + var isActive = false; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (!node || !node.isStream || !node.audio || node.isSink) continue; + if (!hasNodeLinks(node, links) || !node.properties) continue; + + var mediaClass = node.properties["media.class"] || ""; + if (mediaClass === "Stream/Input/Audio") { + if (node.properties["stream.capture.sink"] === "true") { + continue; + } + + isActive = true; + var appName = getAppName(node); + if (appName && appNames.indexOf(appName) === -1) { + appNames.push(appName); + } + } + } + + root.micActive = isActive; + root.micApps = appNames; + } + + function updateCameraState() { + cameraCheckProcess.running = true; + } + + function isScreenShareNode(node) { + if (!node.properties) { + return false; + } + + var mediaClass = node.properties["media.class"] || ""; + + if (mediaClass.indexOf("Audio") >= 0) { + return false; + } + + if (mediaClass.indexOf("Video") === -1) { + return false; + } + + var mediaName = (node.properties["media.name"] || "").toLowerCase(); + + if (mediaName.match(/^(xdph-streaming|gsr-default|game capture|screen|desktop|display|cast|webrtc|v4l2)/) || + mediaName === "gsr-default_output" || + mediaName.match(/screen-cast|screen-capture|desktop-capture|monitor-capture|window-capture|game-capture/i)) { + return true; + } + + return false; + } + + function updateScreenShareState(nodes, links) { + var appNames = []; + var isActive = false; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (!node || !hasNodeLinks(node, links) || !node.properties) continue; + + if (isScreenShareNode(node)) { + isActive = true; + var appName = getAppName(node); + if (appName && appNames.indexOf(appName) === -1) { + appNames.push(appName); + } + } + } + + root.scrActive = isActive; + root.scrApps = appNames; + } + + function updatePrivacyState() { + if (!Pipewire.ready) return; + + var nodes = Pipewire.nodes.values || []; + var links = Pipewire.links.values || []; + + updateMicrophoneState(nodes, links); + updateCameraState(); + updateScreenShareState(nodes, links); + } + + function buildTooltip() { + var parts = []; + + if (micActive && micApps.length > 0) { + parts.push("Mic: " + micApps.join(", ")); + } + + if (camActive && camApps.length > 0) { + parts.push("Cam: " + camApps.join(", ")); + } + + if (scrActive && scrApps.length > 0) { + parts.push("Screen sharing: " + scrApps.join(", ")); + } + + return parts.length > 0 ? parts.join("\n") : ""; + } + + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.RightButton + hoverEnabled: true + + onEntered: { + var tooltipText = buildTooltip(); + if (tooltipText) { + TooltipService.show(root, tooltipText, BarService.getTooltipDirection()); + } + } + onExited: TooltipService.hide() + } + + Item { + id: layout + + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + + implicitWidth: iconsLayout.implicitWidth + implicitHeight: iconsLayout.implicitHeight + + GridLayout { + id: iconsLayout + + columns: root.isVertical ? 1 : 3 + rows: root.isVertical ? 3 : 1 + + rowSpacing: root.iconSpacing + columnSpacing: root.iconSpacing + + NIcon { + visible: micActive || !root.hideInactive + icon: micActive ? "microphone" : "microphone-off" + color: root.micColor + } + NIcon { + visible: camActive || !root.hideInactive + icon: camActive ? "camera" : "camera-off" + color: root.camColor + } + NIcon { + visible: scrActive || !root.hideInactive + icon: scrActive ? "screen-share" : "screen-share-off" + color: root.scrColor + } + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/README.md b/home/aiden/.config/noctalia/plugins/privacy-indicator/README.md new file mode 100644 index 0000000..7ae2c0b --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/README.md @@ -0,0 +1,45 @@ +# Privacy Indicator Plugin + +A privacy indicator widget that monitors and displays when microphone, camera, or screen sharing is active on your system. + +## Features + +- **Microphone Monitoring**: Detects active microphone usage via Pipewire +- **Camera Monitoring**: Detects active camera usage by checking `/dev/video*` devices +- **Screen Sharing Detection**: Monitors screen sharing sessions via Pipewire +- **Visual Indicators**: Shows icons that change color based on active state + - Active: Primary color + - Inactive: Semi-transparent variant color +- **App Information**: Tooltip displays which applications are using each resource +- **Adaptive Layout**: Automatically adjusts layout for horizontal or vertical bar positions + +## Configuration + +Access the plugin settings in Noctalia to configure the following options: + +- **Hide Inactive States**: If enabled, microphone, camera, and screen icons are hidden whenever they are inactive. Only active states are shown. +- **RemoveMargins**: If enabled, removes all outer margins of the widget. +- **Icon Spacing**: Controls the horizontal/vertical spacing between the icons. + + +## Usage + +The widget displays three icons in the bar: +- **Microphone**: Shows when any app is using the microphone +- **Camera**: Shows when any app is accessing the camera +- **Screen Share**: Shows when screen sharing is active + +Hover over the widget to see a tooltip listing which applications are using each resource. + +## Requirements + +- Noctalia Shell 3.6.0 or higher +- Pipewire (for microphone and screen sharing detection) +- Access to `/dev/video*` devices (for camera detection) + +## Technical Details + +- Updates privacy state every second +- Uses Pipewire API to monitor audio/video streams +- Checks `/proc/[0-9]*/fd/` for camera device access +- Detects screen sharing by analyzing Pipewire node properties and media class diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/Settings.qml b/home/aiden/.config/noctalia/plugins/privacy-indicator/Settings.qml new file mode 100644 index 0000000..9ac1d04 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/Settings.qml @@ -0,0 +1,88 @@ +import QtQuick +import QtQuick.Layouts +import qs.Commons +import qs.Widgets + +ColumnLayout { + id: root + + property var pluginApi: null + + property var cfg: pluginApi?.pluginSettings || ({}) + property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({}) + + property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive + property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins + property int iconSpacing: cfg.iconSpacing || Style.marginXS + + spacing: Style.marginL + + Component.onCompleted: { + Logger.i("PrivacyIndicator", "Settings UI loaded"); + } + + ColumnLayout { + spacing: Style.marginM + Layout.fillWidth: true + + NToggle { + label: pluginApi?.tr("settings.hideInactive.label") + description: pluginApi?.tr("settings.hideInactive.desc") + + checked: root.hideInactive + onToggled: function (checked) { + root.hideInactive = checked; + } + } + + NToggle { + label: pluginApi?.tr("settings.removeMargins.label") + description: pluginApi?.tr("settings.removeMargins.desc") + + checked: root.removeMargins + onToggled: function (checked) { + root.removeMargins = checked; + } + } + + NComboBox { + label: pluginApi?.tr("settings.iconSpacing.label") + description: pluginApi?.tr("settings.iconSpacing.desc") + + model: { + const labels = ["XXS", "XS", "S", "M", "L", "XL"]; + const values = [Style.marginXXS, Style.marginXS, Style.marginS, Style.marginM, Style.marginL, Style.marginXL]; + + const result = []; + for (var i = 0; i < labels.length; ++i) { + const v = values[i]; + result.push({ + key: v.toFixed(0), + name: `${labels[i]} (${v}px)` + }); + } + return result; + } + + // INFO: From my understanding, the toFixed(0) shouldn't be needed here and there, but without the + // current key does not show when opening the settings window. + currentKey: root.iconSpacing.toFixed(0) + onSelected: key => root.iconSpacing = key + } + } + + function saveSettings() { + if (!pluginApi) { + Logger.e("PrivacyIndicator", "Cannot save settings: pluginApi is null"); + return; + } + + pluginApi.pluginSettings.hideInactive = root.hideInactive; + pluginApi.pluginSettings.iconSpacing = root.iconSpacing; + pluginApi.pluginSettings.removeMargins = root.removeMargins; + + pluginApi.saveSettings(); + + Logger.i("PrivacyIndicator", "Settings saved successfully"); + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/de.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/de.json new file mode 100644 index 0000000..1b89c25 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/de.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Mikrofon-, Kamera- und Bildschirmsymbole ausblenden, wenn sie inaktiv sind.", + "label": "Inaktive Zustände ausblenden" + }, + "iconSpacing": { + "desc": "Den Abstand zwischen den Symbolen festlegen.", + "label": "Symbolabstand" + }, + "removeMargins": { + "desc": "Alle äußeren Ränder des Widgets entfernen.", + "label": "Ränder entfernen" + } + }, + "tooltip": { + "cam-on": "Kamera: {apps}", + "mic-on": "Mikrofon: {apps}", + "screen-on": "Bildschirmfreigabe: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/en.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/en.json new file mode 100644 index 0000000..37eb83b --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/en.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Hide microphone, camera, and screen icons when there are inactive.", + "label": "Hide inactive states" + }, + "iconSpacing": { + "desc": "Set the spacing between the icons.", + "label": "Icon spacing" + }, + "removeMargins": { + "desc": "Remove all outer margins of the widget.", + "label": "Remove margins" + } + }, + "tooltip": { + "cam-on": "Camera: {apps}", + "mic-on": "Microphone: {apps}", + "screen-on": "Screen sharing: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/es.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/es.json new file mode 100644 index 0000000..46d1c86 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/es.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Ocultar los iconos de micrófono, cámara y pantalla cuando estén inactivos.", + "label": "Ocultar estados inactivos" + }, + "iconSpacing": { + "desc": "Configurar el espacio entre los iconos.", + "label": "Espaciado de iconos" + }, + "removeMargins": { + "desc": "Quita todos los márgenes externos del widget.", + "label": "Quitar márgenes" + } + }, + "tooltip": { + "cam-on": "Cámara: {apps}", + "mic-on": "Micrófono: {apps}", + "screen-on": "Compartir pantalla: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/fr.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/fr.json new file mode 100644 index 0000000..50a1af0 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/fr.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Masquer les icônes du micro, de la caméra et de l’écran lorsqu’ils sont inactifs.", + "label": "Masquer les états inactifs" + }, + "iconSpacing": { + "desc": "Définir l’espacement entre les icônes.", + "label": "Espacement des icônes" + }, + "removeMargins": { + "desc": "Supprime toutes les marges extérieures du widget.", + "label": "Supprimer les marges" + } + }, + "tooltip": { + "cam-on": "Caméra: {apps}", + "mic-on": "Microphone: {apps}", + "screen-on": "Partage d'écran: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/it.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/it.json new file mode 100644 index 0000000..87fb44f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/it.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Nascondi le icone di microfono, fotocamera e schermo quando sono inattive.", + "label": "Nascondi stati inattivi" + }, + "iconSpacing": { + "desc": "Imposta la distanza tra le icone.", + "label": "Spaziatura delle icone" + }, + "removeMargins": { + "desc": "Rimuove tutti i margini esterni del widget.", + "label": "Rimuovi margini" + } + }, + "tooltip": { + "cam-on": "Kamera: {apps}", + "mic-on": "Mikrofonoa: {apps}", + "screen-on": "Ekran-partaĝado: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ja.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ja.json new file mode 100644 index 0000000..ffec145 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ja.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "マイク・カメラ・画面共有のアイコンを、非アクティブなときは非表示にします。", + "label": "非アクティブ状態を非表示" + }, + "iconSpacing": { + "desc": "アイコン同士の間隔を設定します。", + "label": "アイコン間隔" + }, + "removeMargins": { + "desc": "ウィジェットの外側の余白をすべて削除します。", + "label": "余白を削除" + } + }, + "tooltip": { + "cam-on": "カメラ: {apps}", + "mic-on": "マイク: {apps}", + "screen-on": "画面共有: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/nl.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/nl.json new file mode 100644 index 0000000..d486d0a --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/nl.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Verberg de pictogrammen voor microfoon, camera en scherm wanneer ze inactief zijn.", + "label": "Inactieve status verbergen" + }, + "iconSpacing": { + "desc": "Stel de afstand tussen de pictogrammen in.", + "label": "Pictogramafstand" + }, + "removeMargins": { + "desc": "Verwijdert alle buitenste marges van de widget.", + "label": "Marges verwijderen" + } + }, + "tooltip": { + "cam-on": "Camera: {apps}", + "mic-on": "Microfoon: {apps}", + "screen-on": "Schermdeling: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/pt.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/pt.json new file mode 100644 index 0000000..0efffde --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/pt.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Oculta os ícones de microfone, câmera e tela quando estiverem inativos.", + "label": "Ocultar estados inativos" + }, + "iconSpacing": { + "desc": "Define o espaçamento entre os ícones.", + "label": "Espaçamento dos ícones" + }, + "removeMargins": { + "desc": "Remove todas as margens externas do widget.", + "label": "Remover margens" + } + }, + "tooltip": { + "cam-on": "Câmera: {apps}", + "mic-on": "Microfone: {apps}", + "screen-on": "Compartilhamento de tela: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ru.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ru.json new file mode 100644 index 0000000..4011d0f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/ru.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Скрывать значки микрофона, камеры и экрана, когда они неактивны.", + "label": "Скрывать неактивные состояния" + }, + "iconSpacing": { + "desc": "Задать расстояние между значками.", + "label": "Интервал между значками" + }, + "removeMargins": { + "desc": "Удаляет все внешние отступы виджета.", + "label": "Убрать отступы" + } + }, + "tooltip": { + "cam-on": "Камера: {apps}", + "mic-on": "Микрофон: {apps}", + "screen-on": "Демонстрация экрана: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/tr.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/tr.json new file mode 100644 index 0000000..900edfb --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/tr.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Mikrofon, kamera ve ekran simgelerini pasif olduklarında gizle.", + "label": "Pasif durumları gizle" + }, + "iconSpacing": { + "desc": "Simgeler arasındaki boşluğu ayarla.", + "label": "Simge aralığı" + }, + "removeMargins": { + "desc": "Widget’ın tüm dış kenar boşluklarını kaldırır.", + "label": "Kenarlıkları kaldır" + } + }, + "tooltip": { + "cam-on": "Kamera: {apps}", + "mic-on": "Mikrofon: {apps}", + "screen-on": "Ekran paylaşımı: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/uk-UA.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/uk-UA.json new file mode 100644 index 0000000..7c78f93 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/uk-UA.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "Приховувати значки мікрофона, камери та екрана, коли вони неактивні.", + "label": "Приховувати неактивні стани" + }, + "iconSpacing": { + "desc": "Встановити відстань між значками.", + "label": "Інтервал між значками" + }, + "removeMargins": { + "desc": "Видаляє всі зовнішні відступи віджета.", + "label": "Прибрати відступи" + } + }, + "tooltip": { + "cam-on": "Камера: {apps}", + "mic-on": "Мікрофон: {apps}", + "screen-on": "Демонстрація екрана: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/zh-CN.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/zh-CN.json new file mode 100644 index 0000000..1defede --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/i18n/zh-CN.json @@ -0,0 +1,21 @@ +{ + "settings": { + "hideInactive": { + "desc": "在麦克风、摄像头和屏幕图标处于非活动状态时将其隐藏。", + "label": "隐藏非活动状态" + }, + "iconSpacing": { + "desc": "设置图标之间的间距。", + "label": "图标间距" + }, + "removeMargins": { + "desc": "移除小部件所有外部边距。", + "label": "移除边距" + } + }, + "tooltip": { + "cam-on": "摄像头: {apps}", + "mic-on": "麦克风: {apps}", + "screen-on": "屏幕共享: {apps}" + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/manifest.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/manifest.json new file mode 100644 index 0000000..d1a9fa5 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/manifest.json @@ -0,0 +1,23 @@ +{ + "id": "privacy-indicator", + "name": "Privacy Indicator", + "version": "1.0.10", + "minNoctaliaVersion": "3.6.0", + "author": "Noctalia Team ", + "license": "MIT", + "repository": "https://github.com/noctalia-dev/noctalia-plugins", + "description": "A privacy indicator widget that shows when microphone, camera or screen sharing is active.", + "entryPoints": { + "barWidget": "BarWidget.qml", + "settings": "Settings.qml" + }, + "dependencies": { + "plugins": [] + }, + "metadata": { + "defaultSettings": { + "hideInactive": false, + "removeMargins": false + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/preview.png b/home/aiden/.config/noctalia/plugins/privacy-indicator/preview.png new file mode 100644 index 0000000..6d862e5 Binary files /dev/null and b/home/aiden/.config/noctalia/plugins/privacy-indicator/preview.png differ diff --git a/home/aiden/.config/noctalia/plugins/privacy-indicator/settings.json b/home/aiden/.config/noctalia/plugins/privacy-indicator/settings.json new file mode 100644 index 0000000..fa88a40 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/privacy-indicator/settings.json @@ -0,0 +1,5 @@ +{ + "hideInactive": true, + "iconSpacing": 4, + "removeMargins": false +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml b/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml new file mode 100644 index 0000000..250f733 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/BarWidget.qml @@ -0,0 +1,98 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell +import Quickshell.Io +import qs.Commons +import qs.Widgets +import qs.Services.UI + +Rectangle { + id: root + + property var pluginApi: null + property ShellScreen screen + property string widgetId: "" + property string section: "" + property bool hovered: false + + readonly property string barPosition: Settings.data.bar.position + readonly property bool isVertical: barPosition === "left" || barPosition === "right" + + implicitWidth: isVertical ? Style.capsuleHeight : layout.implicitWidth + Style.marginS * 2 + implicitHeight: isVertical ? layout.implicitHeight + Style.marginS * 2 : Style.capsuleHeight + + color: root.hovered ? Color.mHover : Style.capsuleColor + radius: Style.radiusM + border.color: Style.capsuleBorderColor + border.width: Style.capsuleBorderWidth + + property string currentIconName: pluginApi?.pluginSettings?.currentIconName || pluginApi?.manifest?.metadata?.defaultSettings?.currentIconName + property bool hideOnZero: pluginApi?.pluginSettings.hideOnZero || pluginApi?.manifest?.metadata.defaultSettings?.hideOnZero + readonly property bool isVisible: (root.pluginApi?.mainInstance?.updateCount > 0) || !root.hideOnZero + visible: root.isVisible + // also set opacity to zero when invisible as we use opacity to hide the barWidgetLoader + opacity: root.isVisible ? 1.0 : 0.0 + + + // + // ------ Widget ------ + // + Item { + id: layout + anchors.centerIn: parent + + implicitWidth: grid.implicitWidth + implicitHeight: grid.implicitHeight + + GridLayout { + id: grid + columns: root.isVertical ? 1 : 2 + rowSpacing: Style.marginS + columnSpacing: Style.marginS + + NIcon { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + icon: root.currentIconName + color: root.hovered ? Color.mOnHover : Color.mOnSurface + } + + NText { + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + text: root.pluginApi?.mainInstance?.updateCount.toString() + color: root.hovered ? Color.mOnHover : Color.mOnSurface + pointSize: Style.fontSizeS + } + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + cursorShape: root.pluginApi?.mainInstance?.updateCount > 0 ? Qt.PointingHandCursor : Qt.ArrowCursor + + onClicked: { + root.pluginApi?.mainInstance?.startDoSystemUpdate(); + } + + + onEntered: { + root.hovered = true; + buildTooltip(); + } + + onExited: { + root.hovered = false; + TooltipService.hide(); + } + } + } + + function buildTooltip() { + const updateCount = root.pluginApi?.mainInstance?.updateCount + + if (updateCount === 0) { + TooltipService.show(root, pluginApi?.tr("tooltip.noUpdatesAvailable"), BarService.getTooltipDirection()); + } else { + TooltipService.show(root, pluginApi?.tr("tooltip.updatesAvailable"), BarService.getTooltipDirection()); + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/Main.qml b/home/aiden/.config/noctalia/plugins/update-count/Main.qml new file mode 100644 index 0000000..1589a8b --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/Main.qml @@ -0,0 +1,126 @@ +import QtQuick +import Quickshell +import Quickshell.Io +import qs.Commons + +Item { + id: root + + property var pluginApi: null + + readonly property url updaterJson: Qt.resolvedUrl("file://" + Settings.configDir + "/plugins/update-count/updaterConfigs.json") + readonly property int minutesToMillis: 60_000 + + readonly property int updateIntervalMinutes: pluginApi?.pluginSettings.updateIntervalMinutes || pluginApi?.manifest?.metadata.defaultSettings?.updateIntervalMinutes || 30 + readonly property string updateTerminalCommand: pluginApi?.pluginSettings.updateTerminalCommand || pluginApi?.manifest?.metadata.defaultSettings?.updateTerminalCommand || "" + + property int updateCount: 0 + property var updater: null + property var customUpdater: ({ + name: "custom", + cmdGetNumUpdates: pluginApi?.pluginSettings.customCmdGetNumUpdates || "", + cmdDoSystemUpdate: pluginApi?.pluginSettings.customCmdDoSystemUpdate || "" + }) + + // + // ------ Initialization ------ + // + property var updaters: [] + property int checkIndex: 0 + property var current: null + + FileView { + id: updaterFile + path: root.updaterJson + + onLoaded: { + try { + root.updaters = JSON.parse(updaterFile.text()); + root.runAllCmdChecks(); + } catch (e) { + Logger.e("UpdateCount", "JSON Error in", root.updaterJson, ":", e); + } + } + } + + function runAllCmdChecks() { + if (!root.updaters || root.updaters.length === 0) { + return; + } + + root.checkIndex = 0; + root.checkNext(); + } + + function checkNext() { + if (root.checkIndex >= root.updaters.length) { + startGetNumUpdates(); + return; + } + + root.current = root.updaters[root.checkIndex++]; + cmdCheckProc.command = ["sh", "-c", root.current.cmdCheck]; + cmdCheckProc.running = true; + } + + Process { + id: cmdCheckProc + + onExited: function (exitCode, exitStatus) { + if (exitCode === 0) { + root.updater = root.current + Logger.i("UpdateCount", `Initialization finished. Detected updater: ${root.updater.name}.`); + root.startGetNumUpdates() + } else { + root.checkNext(); + } + } + } + + // + // ------ Get number of updates ------ + // + Timer { + id: timerGetNumUpdates + + interval: root.updateIntervalMinutes * root.minutesToMillis + running: true + repeat: true + onTriggered: root.startGetNumUpdates() + } + + function startGetNumUpdates() { + const cmd = root.customUpdater.cmdGetNumUpdates || root.updater.cmdGetNumUpdates || "exit 1" + getNumUpdates.command = ["sh", "-c", cmd] + getNumUpdates.running = true; + } + + Process { + id: getNumUpdates + + stdout: StdioCollector { + onStreamFinished: { + var count = parseInt(text.trim()); + root.updateCount = isNaN(count) ? -1 : count; + if (root.updateCount >= 0) { + Logger.i("UpdateCount", `Updates available: ${root.updateCount}`); + } else { + Logger.e("UpdateCount", `getNumUpdates return '${text.trim()}' cannot be parsed into int`); + } + } + } + } + + // + // ------ Start update ------ + // + function startDoSystemUpdate() { + const cmd = root.customUpdater.cmdDoSystemUpdate || root.updater.cmdDoSystemUpdate || "echo 'No update cmd found.'" + const term = root.updateTerminalCommand.trim(); + + const fullCmd = (term.indexOf("{}") !== -1) ? term.replace("{}", cmd) : term + " " + cmd; + + Quickshell.execDetached(["sh", "-c", fullCmd]); + Logger.i("UpdateCount", `Executed update command: ${fullCmd}`); + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/README.md b/home/aiden/.config/noctalia/plugins/update-count/README.md new file mode 100644 index 0000000..f3b6c03 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/README.md @@ -0,0 +1,52 @@ +# Update Count Plugin + +A compact Noctalia bar widget that periodically checks for available system updates and displays the current update count. Clicking the widget spawns a terminal to execute the configured system update command. + +## Features + +- **Periodic Update Checks**: Polls at a configurable interval and updates the displayed count. +- **Package Manager Detection**: Supports common update-check/update flows for supported distros (see Requirements). +- **Click to Update**: Launches a terminal to execute the configured system update command. +- **Custom Commands**: Optional custom commands for both “get number of updates” and “do system update”. + +## Installation + +This plugin is part of the `noctalia-plugins` repository. + +## Configuration + +Configure the plugin in Noctalia settings: + +- **Hide on Zero Updates**: Hides the widget when the available update count is `0`. +- **Update Check Interval**: Polling interval used for update checks. +- **Icon Identifier / Select Icon**: View and change the currently used icon name. +- **Custom Update Count Command**: Shell command that must output a single integer. +- **Custom System Update Command**: Shell command used to perform the update. +- **Terminal Emulator**: Command used to spawn a terminal for the update action. + - If the value contains `{}`, it will be replaced with the update command. + - If `{}` is not present, the update command is appended. + +## Usage + +- **Display**: Shows an icon and the current update count. +- **Click**: Spawns the configured terminal command and executes the system update command. +- **Hover**: Shows a tooltip indicating whether updates are available or not. + +## Requirements + +- **Noctalia Shell**: 3.6.0 or later. +- **Update backend**: one of the supported package managers defined in `updaterConfigs.json` (recommended, but not required). + +## Technical Details + +- **Updater selection**: + - Built-in update handling is driven by `updaterConfigs.json`, which defines the commands used to: + - determine the number of available updates (`cmdGetNumUpdates`), and + - perform the system update (`cmdDoSystemUpdate`). + - At runtime, the plugin selects the **first available** updater whose required executable checks succeed. + - If no updater matches, the plugin relies on the **custom command** settings. + +- **Supported package managers / tools**: + - Arch Linux: `pacman`; `yay`, `paru` (AUR helpers) + - Fedora: `dnf` + - Void Linux: `xbps` diff --git a/home/aiden/.config/noctalia/plugins/update-count/Settings.qml b/home/aiden/.config/noctalia/plugins/update-count/Settings.qml new file mode 100644 index 0000000..7ab77c0 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/Settings.qml @@ -0,0 +1,193 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell +import qs.Commons +import qs.Widgets + +ColumnLayout { + id: root + + property var pluginApi: null + + property int updateIntervalMinutes: pluginApi?.pluginSettings?.updateIntervalMinutes || pluginApi?.manifest?.metadata?.defaultSettings?.updateIntervalMinutes + property string updateTerminalCommand: pluginApi?.pluginSettings?.updateTerminalCommand || pluginApi?.manifest?.metadata.defaultSettings?.updateTerminalCommand + property string currentIconName: pluginApi?.pluginSettings?.currentIconName || pluginApi?.manifest?.metadata?.defaultSettings?.currentIconName + property bool hideOnZero: pluginApi?.pluginSettings?.hideOnZero || pluginApi?.manifest?.metadata?.defaultSettings?.hideOnZero + + property string customCmdGetNumUpdates: pluginApi?.pluginSettings.customCmdGetNumUpdates || "" + property string customCmdDoSystemUpdate: pluginApi?.pluginSettings.customCmdDoSystemUpdate || "" + + spacing: Style.marginL + + Component.onCompleted: { + Logger.i("UpdateCount", "Settings UI loaded"); + } + + // + // ------ General ------ + // + NToggle { + id: widgetSwitch + label: pluginApi?.tr("settings.hideWidget.label") + description: pluginApi?.tr("settings.hideWidget.desc") + checked: root.hideOnZero + onToggled: function (checked) { + root.hideOnZero = checked; + } + } + + RowLayout { + spacing: Style.marginL + + NLabel { + label: pluginApi?.tr("settings.currentIconName.label") + description: pluginApi?.tr("settings.currentIconName.desc") + } + + NText { + text: root.currentIconName + color: Settings.data.colorSchemes.darkMode ? Color.mPrimary : Color.mOnPrimary + } + + NIcon { + icon: root.currentIconName + color: Settings.data.colorSchemes.darkMode ? Color.mPrimary : Color.mOnPrimary + } + + NButton { + text: pluginApi?.tr("settings.changeIcon.label") + onClicked: { + Logger.i("UpdateCount", "Icon selector button clicked."); + changeIcon.open(); + } + } + + NIconPicker { + id: changeIcon + onIconSelected: function (icon) { + root.currentIconName = icon; + } + } + } + + RowLayout { + Layout.fillWidth: true + spacing: Style.marginL + + NLabel { + label: pluginApi?.tr("settings.updateInterval.label") + description: pluginApi?.tr("settings.updateInterval.desc") + } + + NSlider { + from: 5 + to: 300 + value: root.updateIntervalMinutes + stepSize: 5 + onValueChanged: { + root.updateIntervalMinutes = value; + } + } + + NText { + text: root.updateIntervalMinutes.toString().padStart(3, " ") + " minutes" + color: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary + } + } + + NDivider { + visible: true + Layout.fillWidth: true + Layout.topMargin: Style.marginL + Layout.bottomMargin: Style.marginL + } + + // + // ------ Custom commands ------ + // + NTextInput { + label: pluginApi?.tr("settings.customCmdGetNumUpdates.label") + description: pluginApi?.tr("settings.customCmdGetNumUpdates.desc") + placeholderText: pluginApi?.tr("settings.customCmdGetNumUpdates.placeholder") + text: root.customCmdGetNumUpdates + onTextChanged: root.customCmdGetNumUpdates = text + } + + NTextInput { + label: pluginApi?.tr("settings.customCmdDoSystemUpdate.label") + description: pluginApi?.tr("settings.customCmdDoSystemUpdate.desc") + placeholderText: pluginApi?.tr("settings.customCmdDoSystemUpdate.placeholder") + text: root.customCmdDoSystemUpdate + onTextChanged: root.customCmdDoSystemUpdate = text + } + + NTextInput { + Layout.fillWidth: true + label: pluginApi?.tr("settings.terminal.label") + description: pluginApi?.tr("settings.terminal.desc") + placeholderText: pluginApi?.tr("settings.terminal.placeholder") + text: root.updateTerminalCommand + onTextChanged: root.updateTerminalCommand = text + } + + NDivider { + visible: true + Layout.fillWidth: true + Layout.topMargin: Style.marginL + Layout.bottomMargin: Style.marginL + } + + // + // ------ Information ------ + // + NLabel { + label: pluginApi?.tr("settings.currentCommands.label") + } + + ColumnLayout { + RowLayout { + NText { + Layout.fillWidth: true + text: pluginApi?.tr("settings.currentNumUpdatesCmd.label") + color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary + } + NText { + text: root.customCmdGetNumUpdates || pluginApi?.mainInstance?.updater.cmdGetNumUpdates || "NA" + color: Settings.data.colorSchemes.darkMode ? Color.mTertiary : Color.mOnTertiary + } + } + + RowLayout { + NText { + Layout.fillWidth: true + text: pluginApi?.tr("settings.currentUpdateCmd.label") + color: Settings.data.colorSchemes.darkMode ? Color.mSecondary : Color.mOnSecondary + } + NText { + text: root.customCmdDoSystemUpdate || pluginApi?.mainInstance?.updater.cmdDoSystemUpdate || "NA" + color: Settings.data.colorSchemes.darkMode ? Color.mTertiary : Color.mOnTertiary + } + } + } + + function saveSettings() { + if (!pluginApi) { + Logger.e("UpdateCount", "Cannot save settings: pluginApi is null"); + return; + } + + pluginApi.pluginSettings.updateIntervalMinutes = root.updateIntervalMinutes; + pluginApi.pluginSettings.updateTerminalCommand = root.updateTerminalCommand || pluginApi?.manifest?.metadata.defaultSettings?.updateTerminalCommand; + pluginApi.pluginSettings.currentIconName = root.currentIconName; + pluginApi.pluginSettings.hideOnZero = root.hideOnZero; + + pluginApi.pluginSettings.customCmdGetNumUpdates = root.customCmdGetNumUpdates; + pluginApi.pluginSettings.customCmdDoSystemUpdate = root.customCmdDoSystemUpdate; + + pluginApi.saveSettings(); + pluginApi?.mainInstance?.startGetNumUpdates(); + + Logger.i("UpdateCount", "Settings saved successfully"); + pluginApi.closePanel(root.screen); + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/de.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/de.json new file mode 100644 index 0000000..379b9c2 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/de.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Icon auswählen" + }, + "currentCommands": { + "label": "Aktuell konfigurierte Befehle" + }, + "currentIconName": { + "desc": "Der aktuell konfigurierte Icon-Name.", + "label": "Icon-Kennung" + }, + "currentNumUpdatesCmd": { + "label": "Update-Anzahl" + }, + "currentUpdateCmd": { + "label": "System-Update" + }, + "customCmdDoSystemUpdate": { + "desc": "Shell-Befehl zum Ausführen des System-Updates.", + "label": "Benutzerdefinierter System-Update-Befehl", + "placeholder": "z. B. yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Shell-Befehl, der eine einzelne Ganzzahl als Anzahl verfügbarer Updates ausgeben muss.", + "label": "Benutzerdefinierter Befehl für Update-Anzahl", + "placeholder": "z. B. yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Blendet das Widget aus, wenn die Anzahl verfügbarer Updates 0 ist.", + "label": "Bei 0 Updates ausblenden" + }, + "terminal": { + "desc": "Terminalbefehl zum Ausführen des System-Update-Befehls. Optional: {} für den Update-Befehl.", + "label": "Terminal-Emulator", + "placeholder": "z. B. foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Abfrageintervall für Update-Prüfungen", + "label": "Intervall für Update-Prüfung" + } + }, + "tooltip": { + "noUpdatesAvailable": "Keine Updates gefunden", + "updatesAvailable": "Klicken, um den konfigurierten System-Update-Befehl auszuführen" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/en.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/en.json new file mode 100644 index 0000000..b8ac0d1 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/en.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Select Icon" + }, + "currentCommands": { + "label": "Currently configured commands" + }, + "currentIconName": { + "desc": "Currently configured icon name.", + "label": "Icon Identifier" + }, + "currentNumUpdatesCmd": { + "label": "Update count" + }, + "currentUpdateCmd": { + "label": "System update" + }, + "customCmdDoSystemUpdate": { + "desc": "Shell command used to perform the system update.", + "label": "Custom System Update Command", + "placeholder": "e.g., yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Shell command that must output a single integer representing the number of available updates.", + "label": "Custom Update Count Command", + "placeholder": "e.g., yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Hide the widget when the available update count is 0.", + "label": "Hide on Zero Updates" + }, + "terminal": { + "desc": "Terminal command used to execute the system update command. Optional: {} for update command.", + "label": "Terminal Emulator", + "placeholder": "e.g., foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Polling interval for update checks", + "label": "Update Check Interval" + } + }, + "tooltip": { + "noUpdatesAvailable": "No updates detected", + "updatesAvailable": "Click to run the configured system update command" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/es.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/es.json new file mode 100644 index 0000000..bc7e798 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/es.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Seleccionar icono" + }, + "currentCommands": { + "label": "Comandos configurados actualmente" + }, + "currentIconName": { + "desc": "Nombre de icono configurado actualmente.", + "label": "Identificador de icono" + }, + "currentNumUpdatesCmd": { + "label": "Recuento de actualizaciones" + }, + "currentUpdateCmd": { + "label": "Actualización del sistema" + }, + "customCmdDoSystemUpdate": { + "desc": "Comando de shell para ejecutar la actualización del sistema.", + "label": "Comando personalizado de actualización", + "placeholder": "p. ej., yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Comando de shell que debe imprimir un único entero con el número de actualizaciones disponibles.", + "label": "Comando personalizado de recuento", + "placeholder": "p. ej., yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Oculta el widget cuando el número de actualizaciones disponibles es 0.", + "label": "Ocultar con 0 actualizaciones" + }, + "terminal": { + "desc": "Comando del terminal usado para ejecutar el comando de actualización del sistema. Opcional: {} para el comando de actualización.", + "label": "Emulador de terminal", + "placeholder": "p. ej., foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Intervalo de sondeo para las comprobaciones de actualizaciones", + "label": "Intervalo de comprobación" + } + }, + "tooltip": { + "noUpdatesAvailable": "No se detectaron actualizaciones", + "updatesAvailable": "Haz clic para ejecutar el comando de actualización del sistema configurado" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/fr.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/fr.json new file mode 100644 index 0000000..cb61773 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/fr.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Choisir l’icône" + }, + "currentCommands": { + "label": "Commandes actuellement configurées" + }, + "currentIconName": { + "desc": "Nom d’icône actuellement configuré.", + "label": "Identifiant d’icône" + }, + "currentNumUpdatesCmd": { + "label": "Nombre de mises à jour" + }, + "currentUpdateCmd": { + "label": "Mise à jour système" + }, + "customCmdDoSystemUpdate": { + "desc": "Commande shell utilisée pour effectuer la mise à jour du système.", + "label": "Commande personnalisée de mise à jour", + "placeholder": "ex. yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Commande shell devant afficher un seul entier correspondant au nombre de mises à jour disponibles.", + "label": "Commande personnalisée de comptage", + "placeholder": "ex. yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Masque le widget lorsque le nombre de mises à jour disponibles est 0.", + "label": "Masquer si 0 mise à jour" + }, + "terminal": { + "desc": "Commande du terminal utilisée pour exécuter la commande de mise à jour du système. Optionnel : {} pour la commande de mise à jour.", + "label": "Émulateur de terminal", + "placeholder": "ex. foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Intervalle de sondage pour les vérifications de mises à jour", + "label": "Intervalle de vérification" + } + }, + "tooltip": { + "noUpdatesAvailable": "Aucune mise à jour détectée", + "updatesAvailable": "Cliquer pour exécuter la commande de mise à jour système configurée" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/it.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/it.json new file mode 100644 index 0000000..1a7305d --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/it.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Seleziona icona" + }, + "currentCommands": { + "label": "Comandi attualmente configurati" + }, + "currentIconName": { + "desc": "Nome icona attualmente configurato.", + "label": "Identificatore icona" + }, + "currentNumUpdatesCmd": { + "label": "Conteggio aggiornamenti" + }, + "currentUpdateCmd": { + "label": "Aggiornamento di sistema" + }, + "customCmdDoSystemUpdate": { + "desc": "Comando shell usato per effettuare l’aggiornamento di sistema.", + "label": "Comando personalizzato di aggiornamento", + "placeholder": "es., yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Comando shell che deve stampare un singolo intero che rappresenta il numero di aggiornamenti disponibili.", + "label": "Comando personalizzato per conteggio", + "placeholder": "es., yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Nasconde il widget quando il numero di aggiornamenti disponibili è 0.", + "label": "Nascondi con 0 aggiornamenti" + }, + "terminal": { + "desc": "Comando del terminale usato per eseguire il comando di aggiornamento di sistema. Opzionale: {} per il comando di aggiornamento.", + "label": "Emulatore di terminale", + "placeholder": "es., foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Intervallo di polling per i controlli aggiornamenti", + "label": "Intervallo di verifica" + } + }, + "tooltip": { + "noUpdatesAvailable": "Nessun aggiornamento rilevato", + "updatesAvailable": "Clicca per eseguire il comando di aggiornamento di sistema configurato" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/ja.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/ja.json new file mode 100644 index 0000000..0f70b3f --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/ja.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "アイコンを選択" + }, + "currentCommands": { + "label": "現在の設定コマンド" + }, + "currentIconName": { + "desc": "現在設定されているアイコン名です。", + "label": "アイコン識別子" + }, + "currentNumUpdatesCmd": { + "label": "更新件数" + }, + "currentUpdateCmd": { + "label": "システム更新" + }, + "customCmdDoSystemUpdate": { + "desc": "システム更新を実行するためのシェルコマンドです。", + "label": "システム更新のカスタムコマンド", + "placeholder": "例: yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "利用可能な更新数を表す整数を 1 つ出力する必要があります。", + "label": "更新件数のカスタムコマンド", + "placeholder": "例: yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "利用可能な更新数が 0 の場合にウィジェットを非表示にします。", + "label": "更新 0 件で非表示" + }, + "terminal": { + "desc": "システム更新コマンドを実行するためのターミナルコマンド。任意: 更新コマンド用に {} を使用します。", + "label": "ターミナルエミュレーター", + "placeholder": "例: foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "更新チェックのポーリング間隔", + "label": "更新チェック間隔" + } + }, + "tooltip": { + "noUpdatesAvailable": "更新は検出されませんでした", + "updatesAvailable": "クリックして設定済みのシステム更新コマンドを実行" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/nl.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/nl.json new file mode 100644 index 0000000..7c2debc --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/nl.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Pictogram kiezen" + }, + "currentCommands": { + "label": "Huidig geconfigureerde commando’s" + }, + "currentIconName": { + "desc": "Huidig geconfigureerde pictogramnaam.", + "label": "Pictogram-ID" + }, + "currentNumUpdatesCmd": { + "label": "Update-aantal" + }, + "currentUpdateCmd": { + "label": "Systeemupdate" + }, + "customCmdDoSystemUpdate": { + "desc": "Shell-commando om de systeemupdate uit te voeren.", + "label": "Aangepast systeemupdatecommando", + "placeholder": "bijv. yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Shell-commando dat één geheel getal moet uitvoereren met het aantal beschikbare updates.", + "label": "Aangepast commando voor update-aantal", + "placeholder": "bijv. yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Verbergt de widget wanneer het aantal beschikbare updates 0 is.", + "label": "Verbergen bij 0 updates" + }, + "terminal": { + "desc": "Terminalcommando om het systeemupdatecommando uit te voeren. Optioneel: {} voor het updatecommando.", + "label": "Terminalemulator", + "placeholder": "bijv. foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Poll-interval voor updatecontroles", + "label": "Controle-interval" + } + }, + "tooltip": { + "noUpdatesAvailable": "Geen updates gevonden", + "updatesAvailable": "Klik om het geconfigureerde systeemupdatecommando uit te voeren" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/pt.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/pt.json new file mode 100644 index 0000000..641241b --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/pt.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Selecionar ícone" + }, + "currentCommands": { + "label": "Comandos atualmente configurados" + }, + "currentIconName": { + "desc": "Nome do ícone atualmente configurado.", + "label": "Identificador do ícone" + }, + "currentNumUpdatesCmd": { + "label": "Contagem de atualizações" + }, + "currentUpdateCmd": { + "label": "Atualização do sistema" + }, + "customCmdDoSystemUpdate": { + "desc": "Comando de shell usado para efetuar a atualização do sistema.", + "label": "Comando personalizado de atualização do sistema", + "placeholder": "ex.: yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Comando de shell que deve imprimir um único inteiro representando o número de atualizações disponíveis.", + "label": "Comando personalizado para contagem de atualizações", + "placeholder": "ex.: yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Oculta o widget quando o número de atualizações disponíveis é 0.", + "label": "Ocultar com 0 atualizações" + }, + "terminal": { + "desc": "Comando de terminal usado para executar o comando de atualização do sistema. Opcional: {} para o comando de atualização.", + "label": "Emulador de terminal", + "placeholder": "ex.: foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Intervalo de polling para verificações de atualizações", + "label": "Intervalo de verificação de atualizações" + } + }, + "tooltip": { + "noUpdatesAvailable": "Nenhuma atualização detetada", + "updatesAvailable": "Clique para executar o comando de atualização do sistema configurado" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/ru.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/ru.json new file mode 100644 index 0000000..6b9107c --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/ru.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Выбрать значок" + }, + "currentCommands": { + "label": "Текущие настроенные команды" + }, + "currentIconName": { + "desc": "Текущее настроенное имя значка.", + "label": "Идентификатор значка" + }, + "currentNumUpdatesCmd": { + "label": "Количество обновлений" + }, + "currentUpdateCmd": { + "label": "Обновление системы" + }, + "customCmdDoSystemUpdate": { + "desc": "Команда оболочки для выполнения обновления системы.", + "label": "Пользовательская команда обновления", + "placeholder": "например: yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Команда оболочки должна вывести одно целое число — количество доступных обновлений.", + "label": "Пользовательская команда подсчёта", + "placeholder": "например: yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Скрывает виджет, когда количество доступных обновлений равно 0.", + "label": "Скрывать при 0 обновлений" + }, + "terminal": { + "desc": "Команда терминала для выполнения команды обновления системы. Необязательно: {} для команды обновления.", + "label": "Эмулятор терминала", + "placeholder": "например: foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Интервал опроса для проверки обновлений", + "label": "Интервал проверки" + } + }, + "tooltip": { + "noUpdatesAvailable": "Обновления не обнаружены", + "updatesAvailable": "Нажмите, чтобы выполнить настроенную команду обновления системы" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/tr.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/tr.json new file mode 100644 index 0000000..eed6478 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/tr.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Simge seç" + }, + "currentCommands": { + "label": "Şu anda yapılandırılmış komutlar" + }, + "currentIconName": { + "desc": "Şu anda yapılandırılmış simge adı.", + "label": "Simge tanımlayıcı" + }, + "currentNumUpdatesCmd": { + "label": "Güncelleme sayısı" + }, + "currentUpdateCmd": { + "label": "Sistem güncellemesi" + }, + "customCmdDoSystemUpdate": { + "desc": "Sistem güncellemesini gerçekleştirmek için kullanılan kabuk komutu.", + "label": "Özel sistem güncelleme komutu", + "placeholder": "örn., yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Mevcut güncellemelerin sayısını temsil eden tek bir tamsayı çıktılaması gereken kabuk komutu.", + "label": "Özel güncelleme sayısı komutu", + "placeholder": "örn., yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Mevcut güncelleme sayısı 0 olduğunda widget'ı gizler.", + "label": "0 güncellemede gizle" + }, + "terminal": { + "desc": "Sistem güncelleme komutunu çalıştırmak için kullanılan terminal komutu. İsteğe bağlı: güncelleme komutu için {}.", + "label": "Terminal emülatörü", + "placeholder": "örn., foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Güncelleme denetimleri için yoklama aralığı", + "label": "Güncelleme denetim aralığı" + } + }, + "tooltip": { + "noUpdatesAvailable": "Güncelleme algılanmadı", + "updatesAvailable": "Yapılandırılmış sistem güncelleme komutunu çalıştırmak için tıklayın" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/uk-UA.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/uk-UA.json new file mode 100644 index 0000000..852e815 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/uk-UA.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "Вибрати іконку" + }, + "currentCommands": { + "label": "Поточні налаштовані команди" + }, + "currentIconName": { + "desc": "Поточна налаштована назва іконки.", + "label": "Ідентифікатор іконки" + }, + "currentNumUpdatesCmd": { + "label": "Кількість оновлень" + }, + "currentUpdateCmd": { + "label": "Оновлення системи" + }, + "customCmdDoSystemUpdate": { + "desc": "Команда оболонки для виконання оновлення системи.", + "label": "Користувацька команда оновлення системи", + "placeholder": "напр., yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Команда оболонки має вивести одне ціле число, що представляє кількість доступних оновлень.", + "label": "Користувацька команда підрахунку оновлень", + "placeholder": "напр., yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "Приховує віджет, коли кількість доступних оновлень дорівнює 0.", + "label": "Приховувати за 0 оновлень" + }, + "terminal": { + "desc": "Команда термінала для виконання команди оновлення системи. Необов’язково: {} для команди оновлення.", + "label": "Емулятор термінала", + "placeholder": "напр., foot -e, hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "Інтервал опитування для перевірок оновлень", + "label": "Інтервал перевірки оновлень" + } + }, + "tooltip": { + "noUpdatesAvailable": "Оновлень не виявлено", + "updatesAvailable": "Натисніть, щоб запустити налаштовану команду оновлення системи" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/i18n/zh-CN.json b/home/aiden/.config/noctalia/plugins/update-count/i18n/zh-CN.json new file mode 100644 index 0000000..4bbd7e2 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/i18n/zh-CN.json @@ -0,0 +1,47 @@ +{ + "settings": { + "changeIcon": { + "label": "选择图标" + }, + "currentCommands": { + "label": "当前配置的命令" + }, + "currentIconName": { + "desc": "当前配置的图标名称。", + "label": "图标标识" + }, + "currentNumUpdatesCmd": { + "label": "更新数量" + }, + "currentUpdateCmd": { + "label": "系统更新" + }, + "customCmdDoSystemUpdate": { + "desc": "用于执行系统更新的 Shell 命令。", + "label": "自定义系统更新命令", + "placeholder": "例如:yay -Syu" + }, + "customCmdGetNumUpdates": { + "desc": "Shell 命令必须输出一个整数,表示可用更新的数量。", + "label": "自定义更新数量命令", + "placeholder": "例如:yay -Quq 2>/dev/null | wc -l" + }, + "hideWidget": { + "desc": "当可用更新数为 0 时隐藏该小部件。", + "label": "零更新时隐藏" + }, + "terminal": { + "desc": "用于执行系统更新命令的终端命令。可选:使用 {} 代表更新命令占位符。", + "label": "终端模拟器", + "placeholder": "例如:foot -e,hyprctl dispatch exec '[float] kitty -e {}'" + }, + "updateInterval": { + "desc": "更新检查的轮询间隔", + "label": "检查间隔" + } + }, + "tooltip": { + "noUpdatesAvailable": "未检测到更新", + "updatesAvailable": "点击运行已配置的系统更新命令" + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/manifest.json b/home/aiden/.config/noctalia/plugins/update-count/manifest.json new file mode 100644 index 0000000..a0daffb --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/manifest.json @@ -0,0 +1,26 @@ +{ + "id": "update-count", + "name": "Update Count", + "version": "1.0.5", + "minNoctaliaVersion": "3.6.0", + "author": "BukoMoon", + "license": "GPLv3", + "repository": "https://github.com/noctalia-dev/noctalia-plugins", + "description": "Checks for system updates and shows the update count. Click to run update command in a terminal.", + "entryPoints": { + "main": "Main.qml", + "barWidget": "BarWidget.qml", + "settings": "Settings.qml" + }, + "dependencies": { + "plugins": [] + }, + "metadata": { + "defaultSettings": { + "updateIntervalMinutes": 30, + "updateTerminalCommand": "foot -e", + "currentIconName": "world-download", + "hideOnZero": false + } + } +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/preview.png b/home/aiden/.config/noctalia/plugins/update-count/preview.png new file mode 100644 index 0000000..d10da16 Binary files /dev/null and b/home/aiden/.config/noctalia/plugins/update-count/preview.png differ diff --git a/home/aiden/.config/noctalia/plugins/update-count/settings.json b/home/aiden/.config/noctalia/plugins/update-count/settings.json new file mode 100644 index 0000000..6ef979a --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/settings.json @@ -0,0 +1,8 @@ +{ + "updateIntervalMinutes": 30, + "updateTerminalCommand": "alacritty -e", + "currentIconName": "world-download", + "hideOnZero": true, + "customCmdGetNumUpdates": "expr $(xbps-install -Mnu 2>&1 | grep -v '^$' | wc -l) + $(flatpak remote-ls --updates | wc -l)", + "customCmdDoSystemUpdate": "~/update.sh" +} diff --git a/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json b/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json new file mode 100644 index 0000000..a943738 --- /dev/null +++ b/home/aiden/.config/noctalia/plugins/update-count/updaterConfigs.json @@ -0,0 +1,32 @@ +[ + { + "name": "yay", + "cmdCheck": "command -v yay >/dev/null 2>&1", + "cmdGetNumUpdates": "yay -Sy >/dev/null 2>&1; yay -Quq 2>/dev/null | wc -l", + "cmdDoSystemUpdate": "yay -Syu" + }, + { + "name": "paru", + "cmdCheck": "command -v paru >/dev/null 2>&1", + "cmdGetNumUpdates": "paru -Sy >/dev/null 2>&1; paru -Quq 2>/dev/null | wc -l", + "cmdDoSystemUpdate": "paru -Syu" + }, + { + "name": "pacman", + "cmdCheck": "command -v pacman >/dev/null 2>&1", + "cmdGetNumUpdates": "pacman -Quq 2>/dev/null | wc -l", + "cmdDoSystemUpdate": "sudo pacman -Syu" + }, + { + "name": "dnf", + "cmdCheck": "command -v dnf >/dev/null 2>&1", + "cmdGetNumUpdates": "dnf check-update -q | grep -c ^[a-z0-9]", + "cmdDoSystemUpdate": "sudo dnf upgrade" + }, + { + "name": "xbps", + "cmdCheck": "command -v xbps-install >/dev/null 2>&1", + "cmdGetNumUpdates": "xbps-install -Mnu 2>&1 | grep -v '^$' | wc -l", + "cmdDoSystemUpdate": "sudo xbps-install -Su" + } +] diff --git a/home/aiden/.config/noctalia/settings.json b/home/aiden/.config/noctalia/settings.json new file mode 100644 index 0000000..9f1fa0b --- /dev/null +++ b/home/aiden/.config/noctalia/settings.json @@ -0,0 +1,558 @@ +{ + "appLauncher": { + "customLaunchPrefix": "", + "customLaunchPrefixEnabled": false, + "enableClipPreview": true, + "enableClipboardHistory": true, + "iconMode": "tabler", + "pinnedExecs": [ + ], + "position": "center", + "showCategories": true, + "sortByMostUsed": true, + "terminalCommand": "alacritty -e", + "useApp2Unit": false, + "viewMode": "list" + }, + "audio": { + "cavaFrameRate": 30, + "externalMixer": "pwvucontrol || pavucontrol", + "mprisBlacklist": [ + ], + "preferredPlayer": "", + "visualizerType": "linear", + "volumeOverdrive": true, + "volumeStep": 5 + }, + "bar": { + "capsuleOpacity": 1, + "density": "comfortable", + "exclusive": true, + "floating": false, + "marginHorizontal": 0.25, + "marginVertical": 0.25, + "monitors": [ + ], + "outerCorners": false, + "position": "top", + "showCapsule": true, + "showOutline": false, + "transparent": false, + "widgets": { + "center": [ + { + "hideMode": "hidden", + "hideWhenIdle": false, + "id": "MediaMini", + "maxWidth": 250, + "scrollingMode": "hover", + "showAlbumArt": true, + "showArtistFirst": true, + "showProgressRing": true, + "showVisualizer": true, + "useFixedWidth": false, + "visualizerType": "linear" + } + ], + "left": [ + { + "hideMode": "alwaysExpanded", + "icon": "rocket", + "id": "CustomButton", + "leftClickExec": "qs -c noctalia-shell ipc call launcher toggle", + "leftClickUpdateText": false, + "maxTextLength": { + "horizontal": 10, + "vertical": 10 + }, + "middleClickExec": "", + "middleClickUpdateText": false, + "parseJson": false, + "rightClickExec": "", + "rightClickUpdateText": false, + "showIcon": true, + "textCollapse": "", + "textCommand": "", + "textIntervalMs": 3000, + "textStream": false, + "wheelDownExec": "", + "wheelDownUpdateText": false, + "wheelExec": "", + "wheelMode": "unified", + "wheelUpExec": "", + "wheelUpUpdateText": false, + "wheelUpdateText": false + }, + { + "characterCount": 10, + "colorizeIcons": false, + "enableScrollWheel": true, + "followFocusedScreen": false, + "hideUnoccupied": true, + "id": "Workspace", + "labelMode": "name", + "showApplications": false, + "showLabelsOnlyWhenOccupied": true + }, + { + "customFont": "", + "formatHorizontal": "HH:mm ddd, MMM dd", + "formatVertical": "HH mm - dd MM", + "id": "Clock", + "useCustomFont": false, + "usePrimaryColor": false + }, + { + "id": "plugin:update-count" + }, + { + "diskPath": "/", + "id": "SystemMonitor", + "showCpuTemp": true, + "showCpuUsage": true, + "showDiskUsage": false, + "showGpuTemp": false, + "showMemoryAsPercent": false, + "showMemoryUsage": true, + "showNetworkStats": false, + "usePrimaryColor": false + }, + { + "colorizeIcons": true, + "hideMode": "hidden", + "iconScale": 1, + "id": "Taskbar", + "maxTaskbarWidth": 40, + "onlyActiveWorkspaces": false, + "onlySameOutput": true, + "showPinnedApps": true, + "showTitle": false, + "smartWidth": true, + "titleWidth": 120 + } + ], + "right": [ + { + "id": "ScreenRecorder" + }, + { + "blacklist": [ + ], + "colorizeIcons": false, + "drawerEnabled": true, + "hidePassive": false, + "id": "Tray", + "pinned": [ + ] + }, + { + "hideWhenZero": true, + "id": "NotificationHistory", + "showUnreadBadge": true + }, + { + "deviceNativePath": "", + "displayMode": "onhover", + "hideIfNotDetected": true, + "id": "Battery", + "showNoctaliaPerformance": false, + "showPowerProfiles": false, + "warningThreshold": 30 + }, + { + "displayMode": "onhover", + "id": "Volume" + }, + { + "displayMode": "onhover", + "id": "Brightness" + }, + { + "id": "plugin:privacy-indicator" + }, + { + "colorizeDistroLogo": false, + "colorizeSystemIcon": "none", + "customIconPath": "/home/aiden/Pictures/Icons/Void_Linux_logo-notext.png", + "enableColorization": false, + "icon": "noctalia", + "id": "ControlCenter", + "useDistroLogo": false + } + ] + } + }, + "brightness": { + "brightnessStep": 5, + "enableDdcSupport": false, + "enforceMinimum": true + }, + "calendar": { + "cards": [ + { + "enabled": true, + "id": "calendar-header-card" + }, + { + "enabled": true, + "id": "calendar-month-card" + }, + { + "enabled": true, + "id": "timer-card" + }, + { + "enabled": true, + "id": "weather-card" + } + ] + }, + "colorSchemes": { + "darkMode": true, + "generateTemplatesForPredefined": true, + "manualSunrise": "06:30", + "manualSunset": "18:30", + "matugenSchemeType": "scheme-fruit-salad", + "predefinedScheme": "Catppuccin", + "schedulingMode": "off", + "useWallpaperColors": false + }, + "controlCenter": { + "cards": [ + { + "enabled": true, + "id": "profile-card" + }, + { + "enabled": true, + "id": "shortcuts-card" + }, + { + "enabled": true, + "id": "audio-card" + }, + { + "enabled": true, + "id": "weather-card" + }, + { + "enabled": true, + "id": "media-sysmon-card" + }, + { + "enabled": false, + "id": "brightness-card" + } + ], + "position": "close_to_bar_button", + "shortcuts": { + "left": [ + { + "id": "WiFi" + }, + { + "id": "Bluetooth" + }, + { + "id": "ScreenRecorder" + }, + { + "id": "WallpaperSelector" + } + ], + "right": [ + { + "id": "Notifications" + }, + { + "id": "PowerProfile" + }, + { + "id": "KeepAwake" + }, + { + "id": "NightLight" + } + ] + } + }, + "desktopWidgets": { + "enabled": false, + "gridSnap": true, + "monitorWidgets": [ + { + "name": "DP-3", + "widgets": [ + ] + }, + { + "name": "DP-5", + "widgets": [ + ] + } + ] + }, + "dock": { + "animationSpeed": 1, + "backgroundOpacity": 1, + "colorizeIcons": true, + "deadOpacity": 0.6, + "displayMode": "auto_hide", + "enabled": false, + "floatingRatio": 1, + "inactiveIndicators": false, + "monitors": [ + ], + "onlySameOutput": true, + "pinnedApps": [ + ], + "pinnedStatic": false, + "size": 1 + }, + "general": { + "allowPanelsOnScreenWithoutBar": true, + "animationDisabled": false, + "animationSpeed": 1, + "avatarImage": "/home/aiden/.face", + "boxRadiusRatio": 1, + "compactLockScreen": false, + "dimmerOpacity": 0, + "enableShadows": true, + "forceBlackScreenCorners": false, + "iRadiusRatio": 1, + "language": "", + "lockOnSuspend": true, + "radiusRatio": 1, + "scaleRatio": 1, + "screenRadiusRatio": 1, + "shadowDirection": "bottom_right", + "shadowOffsetX": 2, + "shadowOffsetY": 3, + "showHibernateOnLockScreen": false, + "showScreenCorners": false, + "showSessionButtonsOnLockScreen": true + }, + "hooks": { + "darkModeChange": "", + "enabled": false, + "performanceModeDisabled": "", + "performanceModeEnabled": "", + "screenLock": "", + "screenUnlock": "", + "wallpaperChange": "" + }, + "location": { + "analogClockInCalendar": false, + "firstDayOfWeek": -1, + "name": "Winnipeg, MB", + "showCalendarEvents": true, + "showCalendarWeather": true, + "showWeekNumberInCalendar": false, + "use12hourFormat": false, + "useFahrenheit": false, + "weatherEnabled": true, + "weatherShowEffects": true + }, + "network": { + "wifiEnabled": true + }, + "nightLight": { + "autoSchedule": false, + "dayTemp": "6500", + "enabled": true, + "forced": false, + "manualSunrise": "07:30", + "manualSunset": "21:00", + "nightTemp": "4140" + }, + "notifications": { + "backgroundOpacity": 1, + "criticalUrgencyDuration": 15, + "enableKeyboardLayoutToast": true, + "enabled": true, + "location": "top_right", + "lowUrgencyDuration": 3, + "monitors": [ + "DP-3" + ], + "normalUrgencyDuration": 8, + "overlayLayer": true, + "respectExpireTimeout": false, + "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, + 2 + ], + "location": "top_right", + "monitors": [ + ], + "overlayLayer": true + }, + "screenRecorder": { + "audioCodec": "opus", + "audioSource": "default_output", + "colorRange": "limited", + "directory": "/home/aiden/Videos", + "frameRate": 60, + "quality": "very_high", + "showCursor": true, + "videoCodec": "h264", + "videoSource": "portal" + }, + "sessionMenu": { + "countdownDuration": 10000, + "enableCountdown": true, + "largeButtonsStyle": false, + "position": "center", + "powerOptions": [ + { + "action": "lock", + "command": "", + "countdownEnabled": false, + "enabled": true + }, + { + "action": "suspend", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "hibernate", + "command": "", + "countdownEnabled": true, + "enabled": false + }, + { + "action": "reboot", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "logout", + "command": "", + "countdownEnabled": true, + "enabled": true + }, + { + "action": "shutdown", + "command": "", + "countdownEnabled": true, + "enabled": true + } + ], + "showHeader": true + }, + "settingsVersion": 32, + "systemMonitor": { + "cpuCriticalThreshold": 90, + "cpuPollingInterval": 3000, + "cpuWarningThreshold": 80, + "criticalColor": "", + "diskCriticalThreshold": 90, + "diskPollingInterval": 3000, + "diskWarningThreshold": 80, + "enableDgpuMonitoring": false, + "gpuCriticalThreshold": 90, + "gpuPollingInterval": 3000, + "gpuWarningThreshold": 80, + "memCriticalThreshold": 90, + "memPollingInterval": 3000, + "memWarningThreshold": 80, + "networkPollingInterval": 3000, + "tempCriticalThreshold": 90, + "tempPollingInterval": 3000, + "tempWarningThreshold": 80, + "useCustomColors": false, + "warningColor": "" + }, + "templates": { + "alacritty": false, + "cava": false, + "code": false, + "discord": false, + "emacs": false, + "enableUserTemplates": false, + "foot": false, + "fuzzel": false, + "ghostty": false, + "gtk": true, + "helix": false, + "hyprland": false, + "kcolorscheme": true, + "kitty": false, + "mango": false, + "niri": true, + "pywalfox": false, + "qt": true, + "spicetify": false, + "telegram": false, + "vicinae": false, + "walker": false, + "wezterm": false, + "yazi": false, + "zed": false + }, + "ui": { + "bluetoothDetailsViewMode": "grid", + "bluetoothHideUnnamedDevices": false, + "fontDefault": "Sans Serif", + "fontDefaultScale": 1, + "fontFixed": "monospace", + "fontFixedScale": 1, + "panelBackgroundOpacity": 0.5, + "panelsAttachedToBar": true, + "settingsPanelMode": "centered", + "tooltipsEnabled": true, + "wifiDetailsViewMode": "grid" + }, + "wallpaper": { + "directory": "/home/aiden/Pictures/Wallpapers", + "enableMultiMonitorDirectories": true, + "enabled": true, + "fillColor": "#000000", + "fillMode": "crop", + "hideWallpaperFilenames": false, + "monitorDirectories": [ + { + "directory": "/home/aiden/Pictures/Wallpapers", + "name": "DP-5", + "wallpaper": "" + } + ], + "overviewEnabled": false, + "panelPosition": "follow_bar", + "randomEnabled": true, + "randomIntervalSec": 600, + "recursiveSearch": false, + "setWallpaperOnAllMonitors": false, + "transitionDuration": 1500, + "transitionEdgeSmoothness": 0.05, + "transitionType": "random", + "useWallhaven": false, + "wallhavenCategories": "111", + "wallhavenOrder": "desc", + "wallhavenPurity": "100", + "wallhavenQuery": "", + "wallhavenRatios": "", + "wallhavenResolutionHeight": "", + "wallhavenResolutionMode": "atleast", + "wallhavenResolutionWidth": "", + "wallhavenSorting": "relevance" + } +} diff --git a/home/aiden/.config/noctalia/user-templates.toml b/home/aiden/.config/noctalia/user-templates.toml new file mode 100644 index 0000000..56aef95 --- /dev/null +++ b/home/aiden/.config/noctalia/user-templates.toml @@ -0,0 +1,17 @@ +[config] + +[templates] + +# User-defined templates +# Add your custom templates below +# Example: +# [templates.myapp] +# input_path = "~/.config/noctalia/templates/myapp.css" +# output_path = "~/.config/myapp/theme.css" +# post_hook = "myapp --reload-theme" + +# Remove this section and add your own templates +#[templates.placeholder] +#input_path = "/home/aiden/.config/quickshell/noctalia-shell/Assets/MatugenTemplates/noctalia.json" +#output_path = "/home/aiden/.cache/noctalia/placeholder.json" + diff --git a/home/aiden/.config/nvim/LICENSE b/home/aiden/.config/nvim/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/home/aiden/.config/nvim/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/home/aiden/.config/nvim/README.md b/home/aiden/.config/nvim/README.md new file mode 100644 index 0000000..185280b --- /dev/null +++ b/home/aiden/.config/nvim/README.md @@ -0,0 +1,4 @@ +# 💤 LazyVim + +A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). +Refer to the [documentation](https://lazyvim.github.io/installation) to get started. diff --git a/home/aiden/.config/nvim/init.lua b/home/aiden/.config/nvim/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/home/aiden/.config/nvim/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/home/aiden/.config/nvim/lazy-lock.json b/home/aiden/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..806a454 --- /dev/null +++ b/home/aiden/.config/nvim/lazy-lock.json @@ -0,0 +1,40 @@ +{ + "LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" }, + "SchemaStore.nvim": { "branch": "main", "commit": "a025c78b147affef1aabb8aa360c92be2e0377a0" }, + "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "193e123cdbc4dd3e86db883d55349e9587f0ded6" }, + "cmake-tools.nvim": { "branch": "master", "commit": "87944a5d79b4da7458145d7476d5336557e11911" }, + "conform.nvim": { "branch": "master", "commit": "ffe26e8df8115c9665d24231f8a49fadb2d611ce" }, + "crates.nvim": { "branch": "main", "commit": "ac9fa498a9edb96dc3056724ff69d5f40b898453" }, + "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, + "gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" }, + "grug-far.nvim": { "branch": "main", "commit": "b58b2d65863f4ebad88b10a1ddd519e5380466e0" }, + "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" }, + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, + "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, + "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "c55bd8a8fb191e24176c206a7af1dd51ce7276a5" }, + "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" }, + "mini.ai": { "branch": "main", "commit": "bfb26d9072670c3aaefab0f53024b2f3729c8083" }, + "mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" }, + "mini.pairs": { "branch": "main", "commit": "472ec50092a3314ec285d2db2baa48602d71fe93" }, + "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-lint": { "branch": "master", "commit": "897f7771c1ca4b11659dfe372d9376acd9fe3097" }, + "nvim-lspconfig": { "branch": "master", "commit": "0044d0987ef7e624d04141d0f90d0481fd3c3663" }, + "nvim-treesitter": { "branch": "main", "commit": "2979e048b356cfd32dc419d5803dc356b9832adf" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "76deedf0f1cec4496ef8d49b6d1f020f6d0c6ec9" }, + "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, + "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "rustaceanvim": { "branch": "master", "commit": "0e8f01d55888f499a48af0752dae7de92ef12269" }, + "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, + "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, + "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, + "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, + "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, + "venv-selector.nvim": { "branch": "main", "commit": "58bae72c84b9f7f864c879ec1896e384296f9ffb" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } +} diff --git a/home/aiden/.config/nvim/lazyvim.json b/home/aiden/.config/nvim/lazyvim.json new file mode 100644 index 0000000..075dc08 --- /dev/null +++ b/home/aiden/.config/nvim/lazyvim.json @@ -0,0 +1,14 @@ +{ + "extras": [ + "lazyvim.plugins.extras.lang.cmake", + "lazyvim.plugins.extras.lang.git", + "lazyvim.plugins.extras.lang.python", + "lazyvim.plugins.extras.lang.rust", + "lazyvim.plugins.extras.lang.yaml" + ], + "install_version": 8, + "news": { + "NEWS.md": "11866" + }, + "version": 8 +} \ No newline at end of file diff --git a/home/aiden/.config/nvim/lua/config/autocmds.lua b/home/aiden/.config/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..4221e75 --- /dev/null +++ b/home/aiden/.config/nvim/lua/config/autocmds.lua @@ -0,0 +1,8 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- +-- Add any additional autocmds here +-- with `vim.api.nvim_create_autocmd` +-- +-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) +-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell") diff --git a/home/aiden/.config/nvim/lua/config/keymaps.lua b/home/aiden/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..2c134f7 --- /dev/null +++ b/home/aiden/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,3 @@ +-- Keymaps are automatically loaded on the VeryLazy event +-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua +-- Add any additional keymaps here diff --git a/home/aiden/.config/nvim/lua/config/lazy.lua b/home/aiden/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..d73bfa1 --- /dev/null +++ b/home/aiden/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,53 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import/override with your plugins + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { + enabled = true, -- check for plugin updates periodically + notify = false, -- notify on update + }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/home/aiden/.config/nvim/lua/config/options.lua b/home/aiden/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..76284ff --- /dev/null +++ b/home/aiden/.config/nvim/lua/config/options.lua @@ -0,0 +1,4 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here +vim.g.autoformat = false diff --git a/home/aiden/.config/nvim/lua/plugins/colorscheme.lua b/home/aiden/.config/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..b08c206 --- /dev/null +++ b/home/aiden/.config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,12 @@ +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "catppuccin", + }, + } +} diff --git a/home/aiden/.config/nvim/lua/plugins/example.lua b/home/aiden/.config/nvim/lua/plugins/example.lua new file mode 100644 index 0000000..17f53d6 --- /dev/null +++ b/home/aiden/.config/nvim/lua/plugins/example.lua @@ -0,0 +1,197 @@ +-- since this is just an example spec, don't actually load anything here and return an empty spec +-- stylua: ignore +if true then return {} end + +-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim +-- +-- In your plugin files, you can: +-- * add extra plugins +-- * disable/enabled LazyVim plugins +-- * override the configuration of LazyVim plugins +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "gruvbox", + }, + }, + + -- change trouble config + { + "folke/trouble.nvim", + -- opts will be merged with the parent spec + opts = { use_diagnostic_signs = true }, + }, + + -- disable trouble + { "folke/trouble.nvim", enabled = false }, + + -- override nvim-cmp and add cmp-emoji + { + "hrsh7th/nvim-cmp", + dependencies = { "hrsh7th/cmp-emoji" }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + table.insert(opts.sources, { name = "emoji" }) + end, + }, + + -- change some telescope options and a keymap to browse plugin files + { + "nvim-telescope/telescope.nvim", + keys = { + -- add a keymap to browse plugin files + -- stylua: ignore + { + "fp", + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, + desc = "Find Plugin File", + }, + }, + -- change some options + opts = { + defaults = { + layout_strategy = "horizontal", + layout_config = { prompt_position = "top" }, + sorting_strategy = "ascending", + winblend = 0, + }, + }, + }, + + -- add pyright to lspconfig + { + "neovim/nvim-lspconfig", + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- pyright will be automatically installed with mason and loaded with lspconfig + pyright = {}, + }, + }, + }, + + -- add tsserver and setup with typescript.nvim instead of lspconfig + { + "neovim/nvim-lspconfig", + dependencies = { + "jose-elias-alvarez/typescript.nvim", + init = function() + require("lazyvim.util").lsp.on_attach(function(_, buffer) + -- stylua: ignore + vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) + end) + end, + }, + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- tsserver will be automatically installed with mason and loaded with lspconfig + tsserver = {}, + }, + -- you can do any additional lsp server setup here + -- return true if you don't want this server to be setup with lspconfig + ---@type table + setup = { + -- example to setup with typescript.nvim + tsserver = function(_, opts) + require("typescript").setup({ server = opts }) + return true + end, + -- Specify * to use this function as a fallback for any server + -- ["*"] = function(server, opts) end, + }, + }, + }, + + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: + { import = "lazyvim.plugins.extras.lang.typescript" }, + + -- add more treesitter parsers + { + "nvim-treesitter/nvim-treesitter", + opts = { + ensure_installed = { + "bash", + "html", + "javascript", + "json", + "lua", + "markdown", + "markdown_inline", + "python", + "query", + "regex", + "tsx", + "typescript", + "vim", + "yaml", + }, + }, + }, + + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above + -- would overwrite `ensure_installed` with the new value. + -- If you'd rather extend the default config, use the code below instead: + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + -- add tsx and treesitter + vim.list_extend(opts.ensure_installed, { + "tsx", + "typescript", + }) + end, + }, + + -- the opts function can also be used to change the default opts: + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function(_, opts) + table.insert(opts.sections.lualine_x, { + function() + return "😄" + end, + }) + end, + }, + + -- or you can return new options to override all the defaults + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function() + return { + --[[add your custom lualine config here]] + } + end, + }, + + -- use mini.starter instead of alpha + { import = "lazyvim.plugins.extras.ui.mini-starter" }, + + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc + { import = "lazyvim.plugins.extras.lang.json" }, + + -- add any tools you want to have installed below + { + "williamboman/mason.nvim", + opts = { + ensure_installed = { + "stylua", + "shellcheck", + "shfmt", + "flake8", + }, + }, + }, +} diff --git a/home/aiden/.config/nvim/stylua.toml b/home/aiden/.config/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/home/aiden/.config/nvim/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file diff --git a/home/aiden/.config/swayidle/config b/home/aiden/.config/swayidle/config new file mode 100644 index 0000000..8b4d8ba --- /dev/null +++ b/home/aiden/.config/swayidle/config @@ -0,0 +1,5 @@ +timeout 60 '[ "$(cat /sys/class/power_supply/AC/online)" = "0" ] && brightnessctl -s && brightnessctl set 5% && notify-send "Sleeping in 1 minute"' resume 'brightnessctl -r' +timeout 110 '[ "$(cat /sys/class/power_supply/AC/online)" = "0" ] && notify-send "Going to Sleep"' +timeout 120 '[ "$(cat /sys/class/power_supply/AC/online)" = "0" ] && qs -c noctalia-shell ipc call sessionMenu lockAndSuspend' +timeout 290 '[ "$(cat /sys/class/power_supply/AC/online)" = "1" ] && notify-send "Locking Screem"' +timeout 300 '[ "$(cat /sys/class/power_supply/AC/online)" = "1" ] && qs -c noctalia-shell ipc call lockScreen lock' diff --git a/home/aiden/sddm-random-background.sh b/home/aiden/sddm-random-background.sh new file mode 100755 index 0000000..98559ca --- /dev/null +++ b/home/aiden/sddm-random-background.sh @@ -0,0 +1,3 @@ +#! /bin/sh +file=$(ls /home/aiden/Pictures/Wallpapers/ |sort -R |tail -n 1) +cp /home/aiden/Pictures/Wallpapers/$file /usr/share/sddm/themes/sddm-astronaut-theme/Backgrounds/custom-background.png diff --git a/home/aiden/sync-config.sh b/home/aiden/sync-config.sh new file mode 100755 index 0000000..6b4f5c6 --- /dev/null +++ b/home/aiden/sync-config.sh @@ -0,0 +1,22 @@ +rsync -a /home/aiden/.config/niri/* /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/niri +rsync -a /home/aiden/.config/noctalia/* /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/noctalia +rsync -a /home/aiden/.config/swayidle/* /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/swayidle +rsync -a /home/aiden/.config/alacritty/* /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/alacritty +rsync -a /home/aiden/.config/nvim/* /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/nvim + +rsync -a /home/aiden/sync-config.sh /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/sync-config.sh +rsync -a /home/aiden/update-git-dot.sh /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/update-git-dot.sh +rsync -a /home/aiden/update.sh /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/update.sh +rsync -a /home/aiden/sddm-random-background.sh /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/sddm-random-background.sh +rsync -a /home/aiden/.bashrc /home/aiden/Nextcloud/Backups/Laptop/void/bashrc + +rsync -a /usr/share/xdg-desktop-portal/niri-portals.conf /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/xdg-desktop-portal/niri-portals.conf +rsync -a /usr/share/wayland-sessions/niri.desktop /home/aiden/Nextcloud/Backups/Laptop/Noctalia-niri/wayland-sessions/niri.desktop + +rsync -a /etc/cron.d/* /home/aiden/Nextcloud/Backups/Laptop/void/cron.d +rsync -a /etc/cron.hourly/* /home/aiden/Nextcloud/Backups/Laptop/void/cron.hourly +rsync -a /etc/cron.daily/* /home/aiden/Nextcloud/Backups/Laptop/void/cron.daily +rsync -a /etc/cron.weekly/* /home/aiden/Nextcloud/Backups/Laptop/void/cron.weekly +rsync -a /etc/cron.monthly/* /home/aiden/Nextcloud/Backups/Laptop/void/cron.monthly + +chown -R aiden:aiden /home/aiden/Nextcloud/Backups/Laptop/* diff --git a/home/aiden/update-git-dot.sh b/home/aiden/update-git-dot.sh new file mode 100755 index 0000000..a74a985 --- /dev/null +++ b/home/aiden/update-git-dot.sh @@ -0,0 +1,23 @@ +gitdir=/home/aiden/git-entropic-pro/aiden-niri-noctalia/ +backupdir=/home/aiden/Nextcloud/Backups/Laptop/ + +rsync -a $backupdir/Noctalia-niri/alacritty $gitdir/home/aiden/.config/ +rsync -a $backupdir/Noctalia-niri/niri $gitdir/home/aiden/.config/ +rsync -a $backupdir/Noctalia-niri/noctalia $gitdir/home/aiden/.config/ +rsync -a $backupdir/Noctalia-niri/nvim $gitdir/home/aiden/.config/ +rsync -a $backupdir/Noctalia-niri/swayidle $gitdir/home/aiden/.config/ + +rsync -a $backupdir/Noctalia-niri/sddm-random-background.sh $gitdir/home/aiden/ +rsync -a $backupdir/Noctalia-niri/sync-config.sh $gitdir/home/aiden/ +rsync -a $backupdir/Noctalia-niri/update.sh $gitdir/home/aiden/ +rsync -a $backupdir/Noctalia-niri/update-git-dot.sh $gitdir/home/aiden/ +rsync -a $backupdir/void/bashrc $gitdir/home/aiden/.bashrc + +rsync -a $backupdir/Noctalia-niri/wayland-sessions $gitdir/usr/share/ +rsync -a $backupdir/Noctalia-niri/xdg-desktop-portal $gitdir/usr/share/ + +rsync -a $backupdir/void/cron.d $gitdir/etc/ +rsync -a $backupdir/void/cron.daily $gitdir/etc/ +rsync -a $backupdir/void/cron.hourly $gitdir/etc/ +rsync -a $backupdir/void/cron.monthly $gitdir/etc/ +rsync -a $backupdir/void/cron.weekly $gitdir/etc/ diff --git a/home/aiden/update.sh b/home/aiden/update.sh new file mode 100755 index 0000000..bc90cba --- /dev/null +++ b/home/aiden/update.sh @@ -0,0 +1,5 @@ +flatpak --user update +sudo xbps-install -Su +git -C ~/void-packages/ pull +~/void-packages/xbps-src update-local +read -p "Press enter to continue" diff --git a/usr/share/wayland-sessions/niri.desktop b/usr/share/wayland-sessions/niri.desktop new file mode 100644 index 0000000..7e7e4a0 --- /dev/null +++ b/usr/share/wayland-sessions/niri.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Niri +Comment=A scrollable-tiling Wayland compositor +Exec=/usr/bin/dbus-run-session /usr/bin/niri --session +Type=Application +DesktopNames=niri diff --git a/usr/share/xdg-desktop-portal/niri-portals.conf b/usr/share/xdg-desktop-portal/niri-portals.conf new file mode 100644 index 0000000..36f9ece --- /dev/null +++ b/usr/share/xdg-desktop-portal/niri-portals.conf @@ -0,0 +1,6 @@ +[preferred] +default=gnome;gtk; +org.freedesktop.impl.portal.Access=gtk; +org.freedesktop.impl.portal.Notification=gtk; +org.freedesktop.impl.portal.Secret=gnome-keyring; +org.freedesktop.impl.portal.FileChooser=gtk;