diff --git a/.config/fastfetch/Base.jsonc b/.config/fastfetch/Base.jsonc
new file mode 100644
index 0000000..7b4749d
--- /dev/null
+++ b/.config/fastfetch/Base.jsonc
@@ -0,0 +1,113 @@
+// Thanks to Bina
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "source": "/home/inorishio/Pictures/Gifs/Ai-Hoshino-Dancing.gif",
+ "type": "iterm",
+ "padding": {
+ "top": 5,
+ "left": 4
+ }
+ },
+ "display": {
+ "separator": " ➜ "
+ },
+ "modules": [
+ "break",
+ "break",
+ "break",
+ {
+ "type": "os",
+ "key": "OS ",
+ "keyColor": "31", // = color1
+ },
+ {
+ "type": "kernel",
+ "key": " ├ ",
+ "keyColor": "31",
+ },
+ {
+ "type": "packages",
+ "format": "{} (pacman)",
+ "key": " ├ ",
+ "keyColor": "31",
+ },
+ {
+ "type": "shell",
+ "key": " └ ",
+ "keyColor": "31",
+ },
+ "break",
+ {
+ "type": "wm",
+ "key": "WM ",
+ "keyColor": "32",
+ },
+ {
+ "type": "wmtheme",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "icons",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "cursor",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "terminal",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "terminalfont",
+ "key": " └ ",
+ "keyColor": "32",
+ },
+ "break",
+ {
+ "type": "host",
+ "format": "{5} {1} Type {2}",
+ "key": "PC ",
+ "keyColor": "33",
+ },
+ {
+ "type": "cpu",
+ "format": "{1} ({3}) @ {7} GHz",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "gpu",
+ "format": "{1} {2} @ {12} GHz",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "memory",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "swap",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "disk",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "monitor",
+ "key": " └ ",
+ "keyColor": "33",
+ },
+ "break",
+ "break",
+ ]
+}
diff --git a/.config/fastfetch/Better.jsonc b/.config/fastfetch/Better.jsonc
new file mode 100644
index 0000000..b819a4a
--- /dev/null
+++ b/.config/fastfetch/Better.jsonc
@@ -0,0 +1,155 @@
+// By jan-rex
+// Modified from: https://github.com/fastfetch-cli/fastfetch/discussions/1269
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "source": "/home/inorishio/Pictures/Gifs/Ai-Hoshino-Dancing.gif",
+ "type": "iterm",
+ "padding": {
+ "top": 1.5,
+ "left": 4
+ }
+ },
+ "display": {
+ "separator": "",
+ "constants": [
+ // CONSTANT {$1} - COLOR BACKGROUND FOR KEY
+ "\u001b[48;2;43;43;69m",
+ // CONSTANT {$2} - COLOR BACKGROUND FOR OUTPUT
+ "\u001b[48;2;56;59;78m",
+ // CONSTANT {$3} - VERTICAL BARS AT START AND 75th CHARACTERS FORWARD AND BACKWARD
+ "\u001b[90m│ │\u001b[60D\u001b[39m",
+ ]
+ },
+ "modules": [
+ // CUSTOM - Top UI bar
+ {
+ "type": "custom",
+ "key": "{#90}{$1}╭─────────────╮",
+ "format": "{#90}{$2}╭────────────────────────────────────────────────────────────╮",
+ },
+ {
+ "type": "title",
+ "key": "{#90}{$1}│ {#92}User {#90}│",
+ "format": "{$2}{$3}{user-name} {#2}[{home-dir}]"
+ },
+ {
+ "type": "users",
+ "key": "{#90}{$1}│ {#92}Users {#90}│",
+ "myselfOnly": false,
+ "format": "{$2}{$3}{1}@{host-name}{/host-name}localhost{/}{?client-ip} {#2}[IP:{client-ip}]{?} {#2}[Login time: {login-time}]",
+ },
+ {
+ "type": "datetime",
+ "key": "{#90}{$1}│ {#92}Datetime {#90}│",
+ "format": "{$2}{$3}{year}-{month-pretty}-{day-in-month} {hour-pretty}:{minute-pretty}:{second-pretty} {#2}{weekday} {#2}[W{week}] {#2}[UTC{offset-from-utc}]"
+ },
+ {
+ "type": "title",
+ "key": "{#90}{$1}│ {#93}Host: {#90}│",
+ "format": "{$2}{$3}{#1}{#36}{host-name}"
+ },
+ {
+ "type": "host",
+ "key": "{#90}{$1}│ {#93}Machine {#90}│",
+ "format": "{$2}{$3}{name} {#2}{version}"
+ },
+ {
+ "type": "os",
+ "key": "{#90}{$1}│ {#93}OS {#90}│",
+ "format": "{$2}{$3}{pretty-name} {codename} {#2}[v{version}] {#2}[{arch}]"
+ },
+ {
+ "type": "kernel",
+ "key": "{#90}{$1}│ {#93}Kernel {#90}│",
+ "format": "{$2}{$3}{sysname} {#2}[v{release}]"
+ },
+ {
+ "type": "uptime",
+ "key": "{#90}{$1}│ {#93}Uptime {#90}│",
+ "format": "{$2}{$3}{?days}{days} Days + {?}{hours}:{minutes}:{seconds}"
+ },
+ {
+ "type": "cpu",
+ "key": "{#90}{$1}│ {#91}CPU {#90}│",
+ "showPeCoreCount": true,
+ "temp": true,
+ "format": "{$2}{$3}{name} {#2}[C:{core-types}] {#2}[{freq-max}]"
+ },
+ {
+ "type": "gpu",
+ "key": "{#90}{$1}│ {#91}GPU {#90}│",
+ "detectionMethod": "auto",
+ "driverSpecific": true,
+ "format": "{$2}{$3}{name} {#2}[C:{core-count}] {#2}[{type}]"
+ },
+ {
+ "type": "memory",
+ "key": "{#90}{$1}│ {#91}Memory {#90}│",
+ "format": "{$2}{$3}{used} / {total} ({percentage}{$2})"
+ },
+ {
+ "type": "disk",
+ "key": "{#90}{$1}│ {#91}Disk {#90}│",
+ "format": "{$2}{$3}{size-used} / {size-total} ({size-percentage}{$2})"
+ },
+ {
+ "type": "poweradapter",
+ "key": "{#90}{$1}│ {#91}Power {#90}│",
+ "format": "{$2}{$3}{name}"
+ },
+ {
+ "type": "terminal",
+ "key": "{#90}{$1}│ {#95}Terminal {#90}│",
+ "format": "{$2}{$3}{pretty-name} {#2}[{version}] [PID:{pid}]"
+ },
+ {
+ "type": "terminalfont",
+ "key": "{#90}{$1}│ {#95}Font {#90}│",
+ "format": "{$2}{$3}{name} {#2}[{size}]"
+ },
+ {
+ "type": "shell",
+ "key": "{#90}{$1}│ {#95}Shell {#90}│",
+ "format": "{$2}{$3}{pretty-name} {#2}[v{version}] [PID:{pid}]"
+ },
+ {
+ // localip IPv4
+ "type": "localip",
+ "key": "{#90}{$1}│ {#94}Local IPv4 {#90}│",
+ "showPrefixLen": true,
+ "showIpv4": true,
+ "showIpv6": false,
+ "showMtu": true,
+ "format": "{$2}{$3}{ifname}: {ipv4} {#2}[MTU:{mtu}]"
+ },
+ {
+ // localip IPv6
+ "type": "localip",
+ "key": "{#90}{$1}│ {#94}Local IPv6 {#90}│",
+ "showPrefixLen": true,
+ "showIpv4": false,
+ "showIpv6": true,
+ "showMtu": true,
+ "format": "{$2}{$3}{ifname}: {ipv6} {#2}[MTU:{mtu}]"
+ },
+ {
+ "type": "publicip",
+ "key": "{#90}{$1}│ {#94}Public IPv4 {#90}│",
+ "ipv6": false,
+ "format": "{$2}{$3}{ip} {#2}[{location}]"
+ },
+ {
+ "type": "publicip",
+ "key": "{#90}{$1}│ {#94}Public IPv6 {#90}│",
+ "ipv6": true,
+ "format": "{$2}{$3}{ip} {#2}[{location}]"
+ },
+ // CUSTOM - Button UI bar
+ {
+ "type": "custom",
+ "key": "{#90}{$1}╰─────────────╯",
+ "format": "{#90}{$2}╰────────────────────────────────────────────────────────────╯",
+ }
+ ]
+ }
diff --git a/.config/fastfetch/Default.jsonc b/.config/fastfetch/Default.jsonc
new file mode 100644
index 0000000..cf54e8d
--- /dev/null
+++ b/.config/fastfetch/Default.jsonc
@@ -0,0 +1,105 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "source": "/home/inorishio/Pictures/Profile-Pictures/Koito-Minase.jpg",
+ "type": "auto",
+ },
+ "display": {
+ "separator": " ➜ "
+ },
+ "modules": [
+ "break",
+ {
+ "type": "os",
+ "key": "OS ",
+ "keyColor": "31" // = color1
+ },
+ {
+ "type": "kernel",
+ "key": " ├ ",
+ "keyColor": "31"
+ },
+ {
+ "type": "packages",
+ "format": "{} (pacman)",
+ "key": " ├ ",
+ "keyColor": "31"
+ },
+ {
+ "type": "shell",
+ "key": " └ ",
+ "keyColor": "31"
+ },
+ "break",
+ {
+ "type": "wm",
+ "key": "WM ",
+ "keyColor": "32"
+ },
+ {
+ "type": "wmtheme",
+ "key": " ├ ",
+ "keyColor": "32"
+ },
+ {
+ "type": "icons",
+ "key": " ├ ",
+ "keyColor": "32"
+ },
+ {
+ "type": "cursor",
+ "key": " ├ ",
+ "keyColor": "32"
+ },
+ {
+ "type": "terminal",
+ "key": " ├ ",
+ "keyColor": "32"
+ },
+ {
+ "type": "terminalfont",
+ "key": " └ ",
+ "keyColor": "32"
+ },
+ "break",
+ {
+ "type": "host",
+ "format": "{5} {1} Type {2}",
+ "key": "PC ",
+ "keyColor": "33"
+ },
+ {
+ "type": "cpu",
+ "format": "{1} ({3}) @ {7} GHz",
+ "key": " ├ ",
+ "keyColor": "33"
+ },
+ {
+ "type": "gpu",
+ "format": "{1} {2} @ {12} GHz",
+ "key": " ├ ",
+ "keyColor": "33"
+ },
+ {
+ "type": "memory",
+ "key": " ├ ",
+ "keyColor": "33"
+ },
+ {
+ "type": "swap",
+ "key": " ├ ",
+ "keyColor": "33"
+ },
+ {
+ "type": "disk",
+ "key": " ├ ",
+ "keyColor": "33"
+ },
+ {
+ "type": "monitor",
+ "key": " └ ",
+ "keyColor": "33"
+ },
+ "break"
+ ]
+}
diff --git a/.config/fastfetch/Gif.jsonc b/.config/fastfetch/Gif.jsonc
new file mode 100644
index 0000000..6ab01e6
--- /dev/null
+++ b/.config/fastfetch/Gif.jsonc
@@ -0,0 +1,112 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "source": "/home/inorishio/Pictures/Gifs/Ai-Hoshino-Dancing.gif",
+ "type": "kitty-icat",
+ "padding": {
+ "top": 5,
+ "right": 2,
+ }
+ },
+ "display": {
+ "separator": " ➜ "
+ },
+ "modules": [
+ "break",
+ "break",
+ "break",
+ {
+ "type": "os",
+ "key": "OS ",
+ "keyColor": "31", // = color1
+ },
+ {
+ "type": "kernel",
+ "key": " ├ ",
+ "keyColor": "31",
+ },
+ {
+ "type": "packages",
+ "format": "{} (pacman)",
+ "key": " ├ ",
+ "keyColor": "31",
+ },
+ {
+ "type": "shell",
+ "key": " └ ",
+ "keyColor": "31",
+ },
+ "break",
+ {
+ "type": "wm",
+ "key": "WM ",
+ "keyColor": "32",
+ },
+ {
+ "type": "wmtheme",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "icons",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "cursor",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "terminal",
+ "key": " ├ ",
+ "keyColor": "32",
+ },
+ {
+ "type": "terminalfont",
+ "key": " └ ",
+ "keyColor": "32",
+ },
+ "break",
+ {
+ "type": "host",
+ "format": "{5} {1} Type {2}",
+ "key": "PC ",
+ "keyColor": "33",
+ },
+ {
+ "type": "cpu",
+ "format": "{1} ({3}) @ {7} GHz",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "gpu",
+ "format": "{1} {2} @ {12} GHz",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "memory",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "swap",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "disk",
+ "key": " ├ ",
+ "keyColor": "33",
+ },
+ {
+ "type": "monitor",
+ "key": " └ ",
+ "keyColor": "33",
+ },
+ "break",
+ "break",
+ ]
+}
diff --git a/.config/ohmyposh/EMD115.omp.json b/.config/ohmyposh/EMD115.omp.json
new file mode 100644
index 0000000..d02c970
--- /dev/null
+++ b/.config/ohmyposh/EMD115.omp.json
@@ -0,0 +1,228 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "async": true,
+ "blocks": [
+ {
+ "alignment": "left",
+ "segments": [
+ {
+ "foreground": "#f8f8f2",
+ "style": "plain",
+ "template": "\u256d\u2500",
+ "type": "text"
+ },
+ {
+ "background": "#282a36",
+ "foreground": "#f8f8f2",
+ "leading_diamond": "\ue0b6",
+ "style": "diamond",
+ "template": "{{ .UserName }}",
+ "type": "session"
+ },
+ {
+ "background": "#282a36",
+ "foreground": "#ff5555",
+ "powerline_symbol": "\ue0b0",
+ "style": "powerline",
+ "template": "\udb85\udc0b",
+ "type": "root"
+ },
+ {
+ "background": "#282a36",
+ "foreground": "#f8f8f2",
+ "powerline_symbol": "\ue0b0",
+ "style": "powerline",
+ "template": "{{ .Icon }} ",
+ "type": "os"
+ },
+ {
+ "background": "#bd93f9",
+ "foreground": "#282a36",
+ "properties": {
+ "display_root": true,
+ "style": "full"
+ },
+ "style": "diamond",
+ "template": " \udb80\ude56 {{ path .Path .Location }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "path"
+ }
+ ],
+ "type": "prompt"
+ },
+ {
+ "alignment": "right",
+ "segments": [
+ {
+ "background": "#f1fa8c",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "time_format": "15:04:05"
+ },
+ "style": "diamond",
+ "template": "\udb80\udd09 {{ .CurrentDate | date .Format }} \u2022",
+ "type": "time"
+ },
+ {
+ "background": "#f1fa8c",
+ "foreground": "#282a36",
+ "properties": {
+ "always_enabled": true,
+ "style": "austin",
+ "threshold": 500
+ },
+ "style": "diamond",
+ "template": " \ueba2 {{ .FormattedMs }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "executiontime"
+ },
+ {
+ "background": "#ffb86c",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "branch_icon": "",
+ "fetch_status": true,
+ "fetch_upstream_icon": true
+ },
+ "style": "diamond",
+ "template": "\ue725 ({{ url .UpstreamIcon .UpstreamURL }} {{ url .HEAD .UpstreamURL }}){{ if gt .Ahead 0 }}<#50fa7b> +{{ .Ahead }}>{{ end }}{{ if gt .Behind 0 }}<#ff5555> -{{ .Behind }}>{{ end }}{{ if .Working.Changed }}<#f8f8f2> \uf044 {{ .Working.String }}>{{ end }}{{ if .Staging.Changed }}<#f8f8f2> \uf046 {{ .Staging.String }}>{{ end }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "git"
+ },
+ {
+ "background": "#50fa7b",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h"
+ },
+ "style": "diamond",
+ "template": "\ue718 {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "node"
+ },
+ {
+ "background": "#ff5555",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h",
+ "display_mode": "files",
+ "extensions": [
+ "package-lock.json"
+ ]
+ },
+ "style": "diamond",
+ "template": "\ue71e {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "npm"
+ },
+ {
+ "background": "#ffb86c",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h",
+ "display_mode": "files",
+ "extensions": [
+ "pnpm-lock.yaml"
+ ]
+ },
+ "style": "diamond",
+ "template": "\udb80\udec1 {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "pnpm"
+ },
+ {
+ "background": "#50fa7b",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h",
+ "display_mode": "files"
+ },
+ "style": "diamond",
+ "template": "\ue73c {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "python"
+ },
+ {
+ "background": "#ff79c6",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h"
+ },
+ "style": "diamond",
+ "template": "\ue738 {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "java"
+ },
+ {
+ "background": "#8be9fd",
+ "foreground": "#282a36",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "display_mode": "files"
+ },
+ "style": "diamond",
+ "template": "\uf308 {{ .Context }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "docker"
+ },
+ {
+ "background": "#6272a4",
+ "foreground": "#f8f8f2",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "cache_duration": "2h"
+ },
+ "style": "diamond",
+ "template": "\ue73d {{ .Full }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "php"
+ }
+ ],
+ "type": "prompt"
+ },
+ {
+ "alignment": "left",
+ "newline": true,
+ "segments": [
+ {
+ "foreground": "#f8f8f2",
+ "properties": {
+ "always_enabled": true
+ },
+ "style": "diamond",
+ "template": "\u2570\u2500 \u276f\u276f",
+ "type": "text"
+ }
+ ],
+ "type": "prompt"
+ }
+ ],
+ "enable_cursor_positioning": true,
+ "final_space": true,
+ "patch_pwsh_bleed": true,
+ "secondary_prompt": {
+ "background": "transparent",
+ "foreground": "#f8f8f2",
+ "template": " \u276f "
+ },
+ "transient_prompt": {
+ "background": "transparent",
+ "foreground": "#f8f8f2",
+ "newline": true,
+ "template": " \u276f\u276f {{ .AbsolutePWD }}\n \u276f "
+ },
+ "upgrade": {
+ "auto": false,
+ "interval": "168h",
+ "notice": false,
+ "source": "cdn"
+ },
+ "version": 3
+}
diff --git a/.config/ohmyposh/Zachjittery.omp.json b/.config/ohmyposh/Zachjittery.omp.json
new file mode 100644
index 0000000..354e8bd
--- /dev/null
+++ b/.config/ohmyposh/Zachjittery.omp.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "upgrade": {
+ "source": "cdn",
+ "interval": "168h",
+ "auto": false,
+ "notice": false
+ },
+ "blocks": [
+ {
+ "type": "prompt",
+ "alignment": "left",
+ "segments": [
+ {
+ "template": "➜ ",
+ "foreground": "#f1184c",
+ "type": "text",
+ "style": "plain"
+ }
+ ],
+ "newline": true
+ }
+ ],
+ "version": 4
+}
diff --git a/.config/ohmyposh/Zachjittery.omp.json.bak b/.config/ohmyposh/Zachjittery.omp.json.bak
new file mode 100644
index 0000000..119d499
--- /dev/null
+++ b/.config/ohmyposh/Zachjittery.omp.json.bak
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "upgrade": {
+ "source": "cdn",
+ "interval": "168h",
+ "auto": false,
+ "notice": false
+ },
+ "blocks": [
+ {
+ "type": "prompt",
+ "alignment": "left",
+ "segments": [
+ {
+ "template": "➜ ",
+ "foreground": "#f1184c",
+ "type": "text",
+ "style": "plain"
+ }
+ ],
+ "newline": true
+ }
+ ],
+ "version": 3
+}
diff --git a/.config/ohmyposh/catppuccin-pwsh.omp.json b/.config/ohmyposh/catppuccin-pwsh.omp.json
new file mode 100644
index 0000000..6285b95
--- /dev/null
+++ b/.config/ohmyposh/catppuccin-pwsh.omp.json
@@ -0,0 +1,71 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "palette": {
+ "os": "#ACB0BE",
+ "pink": "#F5BDE6",
+ "lavender": "#B7BDF8",
+ "blue": "#8AADF4",
+ "wight": "#FFFFFF",
+ "text": "#494D64"
+ },
+ "blocks": [
+ {
+ "alignment": "left",
+ "segments": [
+ {
+ "background": "p:blue",
+ "foreground": "p:wight",
+ "powerline_symbol": "\ue0b4",
+ "leading_diamond": "\ue0b6",
+ "style": "diamond",
+ "template": "{{.Icon}} ",
+ "type": "os"
+ },
+ {
+ "background": "p:blue",
+ "foreground": "p:text",
+ "powerline_symbol": "\ue0b4",
+ "style": "diamond",
+ "template": "pwsh",
+ "type": "session"
+ },
+ {
+ "background": "p:pink",
+ "foreground": "p:text",
+ "properties": {
+ "folder_icon": "..\ue5fe..",
+ "home_icon": "~",
+ "style": "agnoster_short"
+ },
+ "powerline_symbol": "\ue0b4",
+ "style": "powerline",
+ "template": " {{ .Path }}",
+ "type": "path"
+ },
+ {
+ "background": "p:lavender",
+ "foreground": "p:text",
+ "style": "powerline",
+ "properties": {
+ "branch_icon": "\ue725 ",
+ "cherry_pick_icon": "\ue29b ",
+ "commit_icon": "\uf417 ",
+ "fetch_status": false,
+ "fetch_upstream_icon": false,
+ "merge_icon": "\ue727 ",
+ "no_commits_icon": "\uf0c3 ",
+ "rebase_icon": "\ue728 ",
+ "revert_icon": "\uf0e2 ",
+ "tag_icon": "\uf412 "
+ },
+ "powerline_symbol": "\ue0b4",
+ "template": " {{ .HEAD }}",
+ "type": "git"
+ }
+ ],
+ "type": "prompt"
+ }
+ ],
+ "final_space": true,
+ "version": 3
+}
diff --git a/.config/ohmyposh/catppuccin.omp.json b/.config/ohmyposh/catppuccin.omp.json
new file mode 100644
index 0000000..72972aa
--- /dev/null
+++ b/.config/ohmyposh/catppuccin.omp.json
@@ -0,0 +1,71 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "palette": {
+ "os": "#ACB0BE",
+ "pink": "#F5BDE6",
+ "lavender": "#B7BDF8",
+ "blue": "#8AADF4",
+ "wight": "#FFFFFF",
+ "text": "#494D64"
+ },
+ "blocks": [
+ {
+ "alignment": "left",
+ "segments": [
+ {
+ "background": "p:blue",
+ "foreground": "p:wight",
+ "powerline_symbol": "\ue0b4",
+ "leading_diamond": "\ue0b6",
+ "style": "diamond",
+ "template": "{{.Icon}} ",
+ "type": "os"
+ },
+ {
+ "background": "p:blue",
+ "foreground": "p:text",
+ "powerline_symbol": "\ue0b4",
+ "style": "diamond",
+ "template": "{{ .UserName }}",
+ "type": "session"
+ },
+ {
+ "background": "p:pink",
+ "foreground": "p:text",
+ "properties": {
+ "folder_icon": "..\ue5fe..",
+ "home_icon": "~",
+ "style": "agnoster_short"
+ },
+ "powerline_symbol": "\ue0b4",
+ "style": "powerline",
+ "template": " {{ .Path }}",
+ "type": "path"
+ },
+ {
+ "background": "p:lavender",
+ "foreground": "p:text",
+ "style": "powerline",
+ "properties": {
+ "branch_icon": "\ue725 ",
+ "cherry_pick_icon": "\ue29b ",
+ "commit_icon": "\uf417 ",
+ "fetch_status": false,
+ "fetch_upstream_icon": false,
+ "merge_icon": "\ue727 ",
+ "no_commits_icon": "\uf0c3 ",
+ "rebase_icon": "\ue728 ",
+ "revert_icon": "\uf0e2 ",
+ "tag_icon": "\uf412 "
+ },
+ "powerline_symbol": "\ue0b4",
+ "template": " {{ .HEAD }}",
+ "type": "git"
+ }
+ ],
+ "type": "prompt"
+ }
+ ],
+ "final_space": true,
+ "version": 3
+}
diff --git a/.config/ohmyposh/inorishio-old.omp.json b/.config/ohmyposh/inorishio-old.omp.json
new file mode 100644
index 0000000..75f46fd
--- /dev/null
+++ b/.config/ohmyposh/inorishio-old.omp.json
@@ -0,0 +1,71 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "palette": {
+ "os": "#ACB0BE",
+ "pink": "#F5BDE6",
+ "lavender": "#B7BDF8",
+ "blue": "#8AADF4",
+ "wight": "#FFFFFF",
+ "text": "#494D64"
+ },
+ "blocks": [
+ {
+ "alignment": "left",
+ "segments": [
+ {
+ "background": "p:blue",
+ "foreground": "p:wight",
+ "powerline_symbol": "\ue0b4",
+ "leading_diamond": "\ue0b6",
+ "style": "diamond",
+ "template": "{{.Icon}} ",
+ "type": "os"
+ },
+ {
+ "background": "p:blue",
+ "foreground": "p:text",
+ "powerline_symbol": "\ue0b4",
+ "style": "diamond",
+ "template": "{{ .UserName }}",
+ "type": "session"
+ },
+ {
+ "background": "p:pink",
+ "foreground": "p:text",
+ "properties": {
+ "folder_icon": "..\ue5fe..",
+ "home_icon": "~",
+ "style": "agnoster_short"
+ },
+ "powerline_symbol": "\ue0b4",
+ "style": "powerline",
+ "template": " {{ .Path }}",
+ "type": "path"
+ },
+ {
+ "background": "p:lavender",
+ "foreground": "p:text",
+ "style": "powerline",
+ "properties": {
+ "branch_icon": "\ue725 ",
+ "cherry_pick_icon": "\ue29b ",
+ "commit_icon": "\uf417 ",
+ "fetch_status": false,
+ "fetch_upstream_icon": false,
+ "merge_icon": "\ue727 ",
+ "no_commits_icon": "\uf0c3 ",
+ "rebase_icon": "\ue728 ",
+ "revert_icon": "\uf0e2 ",
+ "tag_icon": "\uf412 "
+ },
+ "powerline_symbol": "\ue0b4",
+ "template": " {{ .HEAD }}",
+ "type": "git"
+ }
+ ],
+ "type": "prompt"
+ }
+ ],
+ "final_space": true,
+ "version": 3
+}
diff --git a/.config/ohmyposh/inorishio.omp.json b/.config/ohmyposh/inorishio.omp.json
new file mode 100644
index 0000000..f86aa85
--- /dev/null
+++ b/.config/ohmyposh/inorishio.omp.json
@@ -0,0 +1,125 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "async": true,
+ "blocks": [
+ {
+ "type": "prompt",
+ "alignment": "left",
+ "segments": [
+ {
+ "properties": {
+ "style": "mixed"
+ },
+ "leading_diamond": "\u256d\u2500\ue0b6",
+ "trailing_diamond": "\ue0b4",
+ "template": "\ue5ff {{ .Path }}",
+ "foreground": "#ffffff",
+ "background": "#29315A",
+ "type": "path",
+ "style": "diamond"
+ },
+ {
+ "properties": {
+ "branch_max_length": 25,
+ "fetch_stash_count": true,
+ "fetch_status": true,
+ "fetch_upstream_icon": true
+ },
+ "leading_diamond": " \ue0b6",
+ "trailing_diamond": "\ue0b4",
+ "template": " {{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \uf692 {{ .StashCount }}{{ end }} ",
+ "foreground": "#43CCEA",
+ "background": "#29315A",
+ "type": "git",
+ "style": "diamond",
+ "foreground_templates": [
+ "{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
+ "{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
+ "{{ if gt .Ahead 0 }}#B388FF{{ end }}",
+ "{{ if gt .Behind 0 }}#B388FF{{ end }}"
+ ]
+ },
+ {
+ "properties": {
+ "always_enabled": true
+ },
+ "template": " {{ if gt .Code 0 }}\uf525{{ else }}\uf469{{ end }}",
+ "foreground": "#2e9599",
+ "powerline_symbol": "\ue0b0",
+ "type": "exit",
+ "style": "diamond",
+ "foreground_templates": [
+ "{{ if gt .Code 0 }}red{{ end }}"
+ ]
+ }
+ ]
+ },
+ {
+ "type": "prompt",
+ "alignment": "right",
+ "segments": [
+ {
+ "properties": {
+ "always_enabled": true
+ },
+ "template": "\ufbab {{ .FormattedMs }} ",
+ "foreground": "#ffffff",
+ "type": "executiontime",
+ "style": "powerline"
+ },
+ {
+ "properties": {
+ "display_mode": "files",
+ "fetch_package_manager": true,
+ "fetch_version": true,
+ "npm_icon": "<#FE4A49>\ue71e npm> ",
+ "yarn_icon": "<#44FFD2>\ue6a7 yarn> "
+ },
+ "template": "{{ if .PackageManagerIcon }}{{ .PackageManagerIcon }}{{ end }} \ue718 {{ .Full }} ",
+ "foreground": "#5fb157",
+ "type": "node",
+ "style": "plain"
+ },
+ {
+ "properties": {
+ "display_mode": "context",
+ "fetch_virtual_env": false
+ },
+ "template": " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}",
+ "foreground": "#FED142",
+ "type": "python",
+ "style": "plain"
+ },
+ {
+ "properties": {
+ "time_format": "3:04:05 PM"
+ },
+ "template": "{{ .CurrentDate | date .Format }}",
+ "foreground": "#43CCEA",
+ "type": "time",
+ "style": "plain"
+ }
+ ]
+ },
+ {
+ "type": "prompt",
+ "alignment": "left",
+ "segments": [
+ {
+ "template": "\u2570\u2500",
+ "foreground": "#29315A",
+ "type": "text",
+ "style": "plain"
+ },
+ {
+ "template": " <#45F1C2>{{ .UserName }} <#45F1C2>❯ >",
+ "foreground": "#CD4277",
+ "type": "text",
+ "style": "plain"
+ }
+ ],
+ "newline": true
+ }
+ ],
+ "version": 3
+}
diff --git a/.config/ohmyposh/inorishio.omp.json.bak b/.config/ohmyposh/inorishio.omp.json.bak
new file mode 100644
index 0000000..c51a2a5
--- /dev/null
+++ b/.config/ohmyposh/inorishio.omp.json.bak
@@ -0,0 +1,140 @@
+{
+ "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
+ "blocks": [
+ {
+ "alignment": "left",
+ "segments": [
+ {
+ "background": "#29315A",
+ "foreground": "#ffffff",
+ "leading_diamond": "\u256d\u2500\ue0b6",
+ "style": "diamond",
+ "template": "\uf120 {{ .Name }} ",
+ "type": "shell"
+ },
+ {
+ "background": "#29315A",
+ "foreground": "#ffffff",
+ "style": "diamond",
+ "trailing_diamond": "\ue0b4 ",
+ "template": "{{ .Icon }} ",
+ "type": "os"
+ },
+ {
+ "background": "#29315A",
+ "foreground": "#3EC669",
+ "leading_diamond": "\ue0b6",
+ "properties": {
+ "style": "mixed"
+ },
+ "style": "diamond",
+ "template": "\ue5ff {{ .Path }}",
+ "trailing_diamond": "\ue0b4",
+ "type": "path"
+ },
+ {
+ "background": "#29315A",
+ "foreground": "#43CCEA",
+ "foreground_templates": [
+ "{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
+ "{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
+ "{{ if gt .Ahead 0 }}#B388FF{{ end }}",
+ "{{ if gt .Behind 0 }}#B388FF{{ end }}"
+ ],
+ "leading_diamond": " \ue0b6",
+ "properties": {
+ "branch_max_length": 25,
+ "fetch_stash_count": true,
+ "fetch_status": true,
+ "fetch_upstream_icon": true
+ },
+ "style": "diamond",
+ "template": " {{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} \uf044 {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} \uf046 {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} \uf692 {{ .StashCount }}{{ end }} ",
+ "trailing_diamond": "\ue0b4",
+ "type": "git"
+ },
+ {
+ "foreground": "#2e9599",
+ "foreground_templates": [
+ "{{ if gt .Code 0 }}red{{ end }}"
+ ],
+ "powerline_symbol": "\ue0b0",
+ "properties": {
+ "always_enabled": true
+ },
+ "style": "diamond",
+ "template": " {{ if gt .Code 0 }}\uf525{{ else }}\uf469{{ end }}",
+ "type": "exit"
+ }
+ ],
+ "type": "prompt"
+ },
+ {
+ "alignment": "right",
+ "segments": [
+ {
+ "foreground": "#ffffff",
+ "properties": {
+ "always_enabled": true
+ },
+ "style": "powerline",
+ "template": "\ufbab {{ .FormattedMs }} ",
+ "type": "executiontime"
+ },
+ {
+ "foreground": "#5fb157",
+ "properties": {
+ "display_mode": "files",
+ "fetch_package_manager": true,
+ "fetch_version": true,
+ "npm_icon": "<#FE4A49>\ue71e npm> ",
+ "yarn_icon": "<#44FFD2>\ue6a7 yarn> "
+ },
+ "style": "plain",
+ "template": "{{ if .PackageManagerIcon }}{{ .PackageManagerIcon }}{{ end }} \ue718 {{ .Full }} ",
+ "type": "node"
+ },
+ {
+ "foreground": "#FED142",
+ "properties": {
+ "display_mode": "context",
+ "fetch_virtual_env": false
+ },
+ "style": "plain",
+ "template": " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}",
+ "type": "python"
+ },
+ {
+ "foreground": "#43CCEA",
+ "properties": {
+ "time_format": "3:04:05 PM"
+ },
+ "style": "plain",
+ "template": "{{ .CurrentDate | date .Format }}",
+ "type": "time"
+ }
+ ],
+ "type": "prompt"
+ },
+ {
+ "alignment": "left",
+ "newline": true,
+ "segments": [
+ {
+ "foreground": "#29315A",
+ "style": "plain",
+ "template": "\u2570\u2500",
+ "type": "text"
+ },
+ {
+ "foreground": "#CD4277",
+ "style": "plain",
+ "template": " <#45F1C2>\u26a1>{{ .UserName }} <#45F1C2>\u276f >",
+ "type": "text"
+ }
+ ],
+ "type": "prompt"
+ }
+ ],
+ "version": 1
+}
diff --git a/.config/ohmyposh/zen.toml b/.config/ohmyposh/zen.toml
new file mode 100644
index 0000000..0e7f4d4
--- /dev/null
+++ b/.config/ohmyposh/zen.toml
@@ -0,0 +1,66 @@
+console_title_template = '{{ .Shell }} in {{ .Folder }}'
+version = 3
+final_space = true
+
+[secondary_prompt]
+ template = '❯❯ '
+ foreground = 'magenta'
+ background = 'transparent'
+
+[transient_prompt]
+ template = '❯ '
+ background = 'transparent'
+ foreground_templates = ['{{if gt .Code 0}}red{{end}}', '{{if eq .Code 0}}magenta{{end}}']
+
+[[blocks]]
+ type = 'prompt'
+ alignment = 'left'
+ newline = true
+
+ [[blocks.segments]]
+ style = 'plain'
+ template = '{{ .Path }}'
+ foreground = 'blue'
+ background = 'transparent'
+ type = 'path'
+
+ [blocks.segments.properties]
+ style = 'full'
+
+ [[blocks.segments]]
+ style = 'plain'
+ template = ' {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} {{ if gt .Behind 0 }}⇣{{ end }}{{ if gt .Ahead 0 }}⇡{{ end }}>'
+ foreground = 'p:grey'
+ background = 'transparent'
+ type = 'git'
+
+ [blocks.segments.properties]
+ branch_icon = ''
+ commit_icon = '@'
+ fetch_status = true
+
+[[blocks]]
+ type = 'rprompt'
+ overflow = 'hidden'
+
+ [[blocks.segments]]
+ style = 'plain'
+ template = '{{ .FormattedMs }}'
+ foreground = 'yellow'
+ background = 'transparent'
+ type = 'executiontime'
+
+ [blocks.segments.properties]
+ threshold = 5000
+
+[[blocks]]
+ type = 'prompt'
+ alignment = 'left'
+ newline = true
+
+ [[blocks.segments]]
+ style = 'plain'
+ template = '❯'
+ background = 'transparent'
+ type = 'text'
+ foreground_templates = ['{{if gt .Code 0}}red{{end}}', '{{if eq .Code 0}}magenta{{end}}']
diff --git a/.config/ohmyposh/zen.toml.bak b/.config/ohmyposh/zen.toml.bak
new file mode 100644
index 0000000..832848d
--- /dev/null
+++ b/.config/ohmyposh/zen.toml.bak
@@ -0,0 +1,74 @@
+#:schema https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json
+
+version = 2
+final_space = true
+console_title_template = '{{ .Shell }} in {{ .Folder }}'
+
+[[blocks]]
+ type = 'prompt'
+ alignment = 'left'
+ newline = true
+
+ [[blocks.segments]]
+ type = 'path'
+ style = 'plain'
+ background = 'transparent'
+ foreground = 'blue'
+ template = '{{ .Path }}'
+
+ [blocks.segments.properties]
+ style = 'full'
+
+ [[blocks.segments]]
+ type = 'git'
+ style = 'plain'
+ foreground = 'p:grey'
+ background = 'transparent'
+ template = ' {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} {{ if gt .Behind 0 }}⇣{{ end }}{{ if gt .Ahead 0 }}⇡{{ end }}>'
+
+ [blocks.segments.properties]
+ branch_icon = ''
+ commit_icon = '@'
+ fetch_status = true
+
+[[blocks]]
+ type = 'rprompt'
+ overflow = 'hidden'
+
+ [[blocks.segments]]
+ type = 'executiontime'
+ style = 'plain'
+ foreground = 'yellow'
+ background = 'transparent'
+ template = '{{ .FormattedMs }}'
+
+ [blocks.segments.properties]
+ threshold = 5000
+
+[[blocks]]
+ type = 'prompt'
+ alignment = 'left'
+ newline = true
+
+ [[blocks.segments]]
+ type = 'text'
+ style = 'plain'
+ foreground_templates = [
+ "{{if gt .Code 0}}red{{end}}",
+ "{{if eq .Code 0}}magenta{{end}}",
+ ]
+ background = 'transparent'
+ template = '❯'
+
+[transient_prompt]
+ foreground_templates = [
+ "{{if gt .Code 0}}red{{end}}",
+ "{{if eq .Code 0}}magenta{{end}}",
+ ]
+ background = 'transparent'
+ template = '❯ '
+
+[secondary_prompt]
+ foreground = 'magenta'
+ background = 'transparent'
+ template = '❯❯ '
\ No newline at end of file
diff --git a/.config/quickshell/I-DesktopPet b/.config/quickshell/I-DesktopPet
new file mode 160000
index 0000000..16642e7
--- /dev/null
+++ b/.config/quickshell/I-DesktopPet
@@ -0,0 +1 @@
+Subproject commit 16642e7d02f4afedf42f26a5c6d2bc1a652b51ff
diff --git a/.config/quickshell/InoriShio/Widgets/Bar.qml b/.config/quickshell/InoriShio/Widgets/Bar.qml
new file mode 100644
index 0000000..e7c5c2c
--- /dev/null
+++ b/.config/quickshell/InoriShio/Widgets/Bar.qml
@@ -0,0 +1,30 @@
+// Bar.qml
+import Quickshell
+import qs.Widgets
+
+Scope {
+ // no more time object
+
+ Variants {
+ model: Quickshell.screens
+
+ PanelWindow {
+ required property var modelData
+ screen: modelData
+
+ anchors {
+ top: true
+ left: true
+ right: true
+ }
+
+ implicitHeight: 30
+
+ Clock {
+ anchors.centerIn: parent
+
+ // no more time binding
+ }
+ }
+ }
+}
diff --git a/.config/quickshell/InoriShio/Widgets/Clock.qml b/.config/quickshell/InoriShio/Widgets/Clock.qml
new file mode 100644
index 0000000..ac1a0cc
--- /dev/null
+++ b/.config/quickshell/InoriShio/Widgets/Clock.qml
@@ -0,0 +1,9 @@
+// ClockWidget.qml
+import QtQuick
+
+Text {
+ // we no longer need time as an input
+
+ // directly access the time property from the Time singleton
+ text: Time.time
+}
diff --git a/.config/quickshell/InoriShio/Widgets/Time.qml b/.config/quickshell/InoriShio/Widgets/Time.qml
new file mode 100644
index 0000000..e662fcd
--- /dev/null
+++ b/.config/quickshell/InoriShio/Widgets/Time.qml
@@ -0,0 +1,20 @@
+// Time.qml
+pragma Singleton
+
+import Quickshell
+import QtQuick
+
+Singleton {
+ id: root
+ // an expression can be broken across multiple lines using {}
+ readonly property string time: {
+ // The passed format string matches the default output of
+ // the `date` command.
+ Qt.formatDateTime(clock.date, "ddd MMM d hh:mm:ss AP t yyyy")
+ }
+
+ SystemClock {
+ id: clock
+ precision: SystemClock.Seconds
+ }
+}
diff --git a/.config/quickshell/InoriShio/shell.qml b/.config/quickshell/InoriShio/shell.qml
new file mode 100644
index 0000000..19be722
--- /dev/null
+++ b/.config/quickshell/InoriShio/shell.qml
@@ -0,0 +1,7 @@
+// shell.qml
+import Quickshell
+import qs.Widgets
+
+Scope {
+ Bar {}
+}
diff --git a/.config/quickshell/QtLock/Backgrounds/Bocchi.mp4 b/.config/quickshell/QtLock/Backgrounds/Bocchi.mp4
new file mode 100644
index 0000000..c6bff11
Binary files /dev/null and b/.config/quickshell/QtLock/Backgrounds/Bocchi.mp4 differ
diff --git a/.config/quickshell/QtLock/LockSurface.qml b/.config/quickshell/QtLock/LockSurface.qml
new file mode 100644
index 0000000..0978ab0
--- /dev/null
+++ b/.config/quickshell/QtLock/LockSurface.qml
@@ -0,0 +1,41 @@
+import QtQuick
+import Quickshell
+import Quickshell.Wayland
+
+WlSessionLockSurface {
+ id: lockSurface
+
+ // match monitor resolution
+ anchors.fill: screen
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#000000bb"
+
+ Column {
+ anchors.centerIn: parent
+ spacing: 12
+
+ Text {
+ text: "Locked"
+ color: "white"
+ font.pointSize: 24
+ }
+
+ TextField {
+ id: password
+ width: 240
+ placeholderText: "Password"
+ echoMode: TextInput.Password
+
+ Keys.onReturnPressed: {
+ if (password.text === "hello") {
+ locker.unlock()
+ } else {
+ password.text = ""
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/.config/quickshell/QtLock/Modules/Clock.qml b/.config/quickshell/QtLock/Modules/Clock.qml
new file mode 100644
index 0000000..18507f0
--- /dev/null
+++ b/.config/quickshell/QtLock/Modules/Clock.qml
@@ -0,0 +1,70 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+Column {
+ id: clock
+
+ width: parent.width / 2
+ spacing: 0
+
+ Label {
+ id:headerTextLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ font.pointSize: root.font.pointSize * 4
+ color: config.HeaderTextColor
+ renderType: Text.QtRendering
+ text: config.HeaderText
+ }
+
+ Label {
+ id: timeLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ font.pointSize: root.font.pointSize * 9
+ font.bold: true
+ color: config.TimeTextColor
+ renderType: Text.QtRendering
+
+ function updateTime() {
+ text = new Date().toLocaleTimeString(Qt.locale(config.Locale), config.HourFormat == "long" ? Locale.LongFormat : config.HourFormat !== "" ? config.HourFormat : Locale.ShortFormat)
+ }
+ }
+
+ Label {
+ id: dateLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ color: config.DateTextColor
+ font.pointSize: root.font.pointSize * 3
+ font.bold: true
+ renderType: Text.QtRendering
+
+ function updateTime() {
+ text = new Date().toLocaleDateString(Qt.locale(config.Locale), config.DateFormat == "short" ? Locale.ShortFormat : config.DateFormat !== "" ? config.DateFormat : Locale.LongFormat)
+ }
+ }
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: {
+ dateLabel.updateTime()
+ timeLabel.updateTime()
+ }
+ }
+
+ Component.onCompleted: {
+ dateLabel.updateTime()
+ timeLabel.updateTime()
+ }
+}
diff --git a/.config/quickshell/QtLock/Modules/Input.qml b/.config/quickshell/QtLock/Modules/Input.qml
new file mode 100644
index 0000000..e489603
--- /dev/null
+++ b/.config/quickshell/QtLock/Modules/Input.qml
@@ -0,0 +1,526 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+
+Column {
+ id: inputContainer
+
+ Layout.fillWidth: true
+
+ property ComboBox exposeSession: sessionSelect.exposeSession
+ property bool failed
+
+ Item {
+ id: errorMessageField
+
+ // change also in selectSession
+ height: root.font.pointSize * 2
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Label {
+ id: errorMessage
+
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+
+ text: failed ? config.TranslateLoginFailedWarning || textConstants.loginFailed + "!" : keyboard.capsLock ? config.TranslateCapslockWarning || textConstants.capslockWarning : null
+ font.pointSize: root.font.pointSize * 0.8
+ font.italic: true
+ color: config.WarningColor
+ opacity: 0
+
+ states: [
+ State {
+ name: "fail"
+ when: failed
+ PropertyChanges {
+ target: errorMessage
+ opacity: 1
+ }
+ },
+ State {
+ name: "capslock"
+ when: keyboard.capsLock
+ PropertyChanges {
+ target: errorMessage
+ opacity: 1
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "opacity"
+ duration: 100
+ }
+ }
+ ]
+ }
+ }
+
+ Item {
+ id: usernameField
+
+ height: root.font.pointSize * 4.5
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ ComboBox {
+ id: selectUser
+
+ width: parent.height
+ height: parent.height
+ anchors.left: parent.left
+ z: 2
+
+ model: userModel
+ currentIndex: model.lastIndex
+ textRole: "name"
+ hoverEnabled: true
+ onActivated: {
+ username.text = currentText
+ }
+
+ property var popkey: config.RightToLeftLayout == "true" ? Qt.Key_Right : Qt.Key_Left
+ Keys.onPressed: function(event) {
+ if (event.key == Qt.Key_Down && !popup.opened)
+ username.forceActiveFocus();
+ if ((event.key == Qt.Key_Up || event.key == popkey) && !popup.opened)
+ popup.open();
+ }
+ KeyNavigation.down: username
+ KeyNavigation.right: username
+
+ delegate: ItemDelegate {
+ // minus padding
+ width: popupHandler.width - 20
+ anchors.horizontalCenter: popupHandler.horizontalCenter
+
+ contentItem: Text {
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+
+ text: model.name
+ font.pointSize: root.font.pointSize * 0.8
+ font.capitalization: Font.AllLowercase
+ font.family: root.font.family
+ color: config.DropdownTextColor
+ }
+
+ background: Rectangle {
+ color: selectUser.highlightedIndex === index ? config.DropdownSelectedBackgroundColor : "transparent"
+ }
+ }
+
+ indicator: Button {
+ id: usernameIcon
+
+ width: selectUser.height * 1
+ height: parent.height
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: selectUser.height * 0
+
+ icon.height: parent.height * 0.25
+ icon.width: parent.height * 0.25
+ enabled: false
+ icon.color: config.UserIconColor
+ icon.source: Qt.resolvedUrl("../Assets/User.svg")
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+ }
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+
+ popup: Popup {
+ id: popupHandler
+
+ implicitHeight: contentItem.implicitHeight
+ width: usernameField.width
+ y: parent.height - username.height / 3
+ x: config.RightToLeftLayout == "true" ? -loginButton.width + selectUser.width : 0
+ rightMargin: config.RightToLeftLayout == "true" ? root.padding + usernameField.width / 2 : undefined
+ padding: 10
+
+ contentItem: ListView {
+ implicitHeight: contentHeight + 20
+
+ clip: true
+ model: selectUser.popup.visible ? selectUser.delegateModel : null
+ currentIndex: selectUser.highlightedIndex
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ radius: config.RoundCorners / 2
+ color: config.DropdownBackgroundColor
+ layer.enabled: true
+ }
+
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1 }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: selectUser.down
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: Qt.lighter(config.HoverUserIconColor, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: selectUser.hovered
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: Qt.lighter(config.HoverUserIconColor, 1.2)
+ }
+ },
+ State {
+ name: "focused"
+ when: selectUser.activeFocus
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: config.HoverUserIconColor
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color, border.color, icon.color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+ TextField {
+ id: username
+
+ anchors.centerIn: parent
+ height: root.font.pointSize * 3
+ width: parent.width
+ horizontalAlignment: TextInput.AlignHCenter
+ z: 1
+
+ text: config.ForceLastUser == "true" ? selectUser.currentText : null
+ color: config.LoginFieldTextColor
+ font.bold: true
+ font.capitalization: config.AllowUppercaseLettersInUsernames == "false" ? Font.AllLowercase : Font.MixedCase
+ placeholderText: config.TranslatePlaceholderUsername || textConstants.userName
+ placeholderTextColor: config.PlaceholderTextColor
+ selectByMouse: true
+ renderType: Text.QtRendering
+
+ onFocusChanged:{
+ if(focus)
+ selectAll()
+ }
+
+ background: Rectangle {
+ color: config.LoginFieldBackgroundColor
+ opacity: 0.6
+ border.color: "transparent"
+ border.width: parent.activeFocus ? 2 : 1
+ radius: config.RoundCorners || 0
+ }
+
+ onAccepted: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ KeyNavigation.down: passwordIcon
+
+ states: [
+ State {
+ name: "focused"
+ when: username.activeFocus
+ PropertyChanges {
+ target: username.background
+ border.color: config.HighlightBorderColor
+ }
+ PropertyChanges {
+ target: username
+ color: Qt.lighter(config.LoginFieldTextColor, 1.15)
+ }
+ }
+ ]
+ }
+ }
+
+ Item {
+ id: passwordField
+
+ height: root.font.pointSize * 4.5
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Button {
+ id: passwordIcon
+
+ height: parent.height
+ width: selectUser.height * 1
+ anchors.left: parent.left
+ anchors.leftMargin: selectUser.height * 0
+ anchors.verticalCenter: parent.verticalCenter
+ z: 2
+
+ icon.height: parent.height * 0.25
+ icon.width: parent.height * 0.25
+ icon.color: config.PasswordIconColor
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+
+ states: [
+ State {
+ name: "visiblePasswordFocused"
+ when: passwordIcon.checked && passwordIcon.activeFocus
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "visiblePasswordHovered"
+ when: passwordIcon.checked && passwordIcon.hovered
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "visiblePassword"
+ when: passwordIcon.checked
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ }
+ },
+ State {
+ name: "hiddenPasswordFocused"
+ when: passwordIcon.enabled && passwordIcon.activeFocus
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "hiddenPasswordHovered"
+ when: passwordIcon.hovered
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ }
+ ]
+
+ onClicked: toggle()
+ Keys.onReturnPressed: toggle()
+ Keys.onEnterPressed: toggle()
+ KeyNavigation.down: password
+
+ }
+
+ TextField {
+ id: password
+
+ height: root.font.pointSize * 3
+ width: parent.width
+ anchors.centerIn: parent
+ horizontalAlignment: TextInput.AlignHCenter
+
+ font.bold: true
+ color: config.PasswordFieldTextColor
+ focus: config.PasswordFocus == "true" ? true : false
+ echoMode: passwordIcon.checked ? TextInput.Normal : TextInput.Password
+ placeholderText: config.TranslatePlaceholderPassword || textConstants.password
+ placeholderTextColor: config.PlaceholderTextColor
+ passwordCharacter: "•"
+ passwordMaskDelay: config.HideCompletePassword == "true" ? undefined : 1000
+ renderType: Text.QtRendering
+ selectByMouse: true
+
+ background: Rectangle {
+ color: config.PasswordFieldBackgroundColor
+ opacity: 0.6
+ border.color: "transparent"
+ border.width: parent.activeFocus ? 2 : 1
+ radius: config.RoundCorners || 0
+ }
+ onAccepted: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ KeyNavigation.down: loginButton
+ }
+
+ states: [
+ State {
+ name: "focused"
+ when: password.activeFocus
+ PropertyChanges {
+ target: password.background
+ border.color: config.HighlightBorderColor
+ }
+ PropertyChanges {
+ target: password
+ color: Qt.lighter(config.LoginFieldTextColor, 1.15)
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color, border.color"
+ duration: 150
+ }
+ }
+ ]
+ }
+
+ Item {
+ id: login
+
+ // important
+ // try 4 or 9 ...
+ height: root.font.pointSize * 9
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ visible: config.HideLoginButton == "true" ? false : true
+
+ Button {
+ id: loginButton
+
+ height: root.font.pointSize * 3
+ implicitWidth: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+
+ text: config.TranslateLogin || textConstants.login
+ enabled: config.AllowEmptyPassword == "true" || username.text != "" && password.text != "" ? true : false
+ hoverEnabled: true
+
+ contentItem: Text {
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ font.bold: true
+ font.pointSize: root.font.pointSize
+ font.family: root.font.family
+ color: config.LoginButtonTextColor
+ text: parent.text
+ opacity: 0.0
+ }
+
+ background: Rectangle {
+ id: buttonBackground
+
+ color: config.LoginButtonBackgroundColor
+ opacity: 0.0
+ radius: config.RoundCorners || 0
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: loginButton.down
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.darker(config.LoginButtonBackgroundColor, 1.1)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ }
+ },
+ State {
+ name: "hovered"
+ when: loginButton.hovered
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.lighter(config.LoginButtonBackgroundColor, 1.15)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ opacity: 0.0
+ }
+ },
+ State {
+ name: "focused"
+ when: loginButton.activeFocus
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.lighter(config.LoginButtonBackgroundColor, 1.2)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ opacity: 0.0
+ }
+ },
+ State {
+ name: "enabled"
+ when: loginButton.enabled
+ PropertyChanges {
+ target: buttonBackground;
+ color: config.LoginButtonBackgroundColor;
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem;
+ opacity: 0.0
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "opacity, color";
+ duration: 300
+ }
+ }
+ ]
+
+ onClicked: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ Keys.onReturnPressed: clicked()
+ Keys.onEnterPressed: clicked()
+ }
+ }
+
+ Connections {
+ target: sddm
+ function onLoginSucceeded() {}
+ function onLoginFailed() {
+ failed = true
+ resetError.running ? resetError.stop() && resetError.start() : resetError.start()
+ }
+ }
+
+ Timer {
+ id: resetError
+ interval: 2000
+ onTriggered: failed = false
+ running: false
+ }
+}
diff --git a/.config/quickshell/QtLock/Modules/LoginForm.qml b/.config/quickshell/QtLock/Modules/LoginForm.qml
new file mode 100644
index 0000000..ffa462b
--- /dev/null
+++ b/.config/quickshell/QtLock/Modules/LoginForm.qml
@@ -0,0 +1,54 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import SddmComponents 2.0 as SDDM
+
+ColumnLayout {
+ id: formContainer
+ SDDM.TextConstants { id: textConstants }
+
+ property int p: config.ScreenPadding == "" ? 0 : config.ScreenPadding
+ property string a: config.FormPosition
+
+ Clock {
+ id: clock
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ // important
+ Layout.preferredHeight: root.height / 2
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ }
+
+ Input {
+ id: input
+
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredHeight: root.height / 20
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ Layout.topMargin: 0
+ }
+
+ SystemButtons {
+ id: systemButtons
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ Layout.preferredHeight: root.height / 5
+ Layout.maximumHeight: root.height / 5
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+
+ exposedSession: input.exposeSession
+ }
+
+ SessionButton {
+ id: sessionSelect
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ Layout.preferredHeight: root.height / 54
+ Layout.maximumHeight: root.height / 54
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ }
+}
diff --git a/.config/quickshell/QtLock/Modules/SessionButton.qml b/.config/quickshell/QtLock/Modules/SessionButton.qml
new file mode 100644
index 0000000..8c5a1d6
--- /dev/null
+++ b/.config/quickshell/QtLock/Modules/SessionButton.qml
@@ -0,0 +1,149 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+Item {
+ id: sessionButton
+
+ height: root.font.pointSize
+ width: parent.width / 2
+
+ property var selectedSession: selectSession.currentIndex
+ property string textConstantSession
+ property int loginButtonWidth
+ property ComboBox exposeSession: selectSession
+
+ ComboBox {
+ id: selectSession
+
+ // important
+ // change also in errorMessage
+ height: root.font.pointSize * 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ hoverEnabled: true
+ model: sessionModel
+ currentIndex: model.lastIndex
+ textRole: "name"
+
+ Keys.onPressed: function(event) {
+ if ((event.key == Qt.Key_Left || event.key == Qt.Key_Right) && !popup.opened) {
+ popup.open();
+ }
+ }
+
+ delegate: ItemDelegate {
+ // minus padding
+ width: popupHandler.width - 20
+ anchors.horizontalCenter: popupHandler.horizontalCenter
+
+ contentItem: Text {
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+
+ text: model.name
+ font.pointSize: root.font.pointSize * 0.8
+ font.family: root.font.family
+ color: config.DropdownTextColor
+ }
+
+ background: Rectangle {
+ color: selectSession.highlightedIndex === index ? config.DropdownSelectedBackgroundColor : "transparent"
+ }
+ }
+
+ indicator {
+ visible: false
+ }
+
+ contentItem: Text {
+ id: displayedItem
+
+ verticalAlignment: Text.AlignVCenter
+
+ text: (config.TranslateSessionSelection || "Session") + " (" + selectSession.currentText + ")"
+ color: config.SessionButtonTextColor
+ font.pointSize: root.font.pointSize * 0.8
+ font.family: root.font.family
+
+ Keys.onReleased: parent.popup.open()
+ }
+
+ background: Rectangle {
+ height: parent.visualFocus ? 2 : 0
+ width: displayedItem.implicitWidth
+
+ color: "transparent"
+ }
+
+ popup: Popup {
+ id: popupHandler
+
+ implicitHeight: contentItem.implicitHeight
+ width: sessionButton.width
+ y: parent.height - 1
+ x: -popupHandler.width/2 + displayedItem.width/2
+ padding: 10
+
+ contentItem: ListView {
+ implicitHeight: contentHeight + 20
+
+ clip: true
+ model: selectSession.popup.visible ? selectSession.delegateModel : null
+ currentIndex: selectSession.highlightedIndex
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ radius: config.RoundCorners / 2
+ color: config.DropdownBackgroundColor
+ layer.enabled: true
+ }
+
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1 }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: selectSession.down
+ PropertyChanges {
+ target: displayedItem
+ color: Qt.darker(config.HoverSessionButtonTextColor, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: selectSession.hovered
+ PropertyChanges {
+ target: displayedItem
+ color: Qt.lighter(config.HoverSessionButtonTextColor, 1.1)
+ }
+ },
+ State {
+ name: "focused"
+ when: selectSession.visualFocus
+ PropertyChanges {
+ target: displayedItem
+ color: config.HoverSessionButtonTextColor
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+}
diff --git a/.config/quickshell/QtLock/Modules/SystemButtons.qml b/.config/quickshell/QtLock/Modules/SystemButtons.qml
new file mode 100644
index 0000000..e280946
--- /dev/null
+++ b/.config/quickshell/QtLock/Modules/SystemButtons.qml
@@ -0,0 +1,97 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+
+RowLayout {
+
+ spacing: root.font.pointSize
+
+ property var shutdown: ["Shutdown", config.TranslateShutdown || textConstants.shutdown, sddm.canPowerOff]
+ property var reboot: ["Reboot", config.TranslateReboot || textConstants.reboot, sddm.canReboot]
+ property var suspend: ["Suspend", config.TranslateSuspend || textConstants.suspend, sddm.canSuspend]
+ property var hibernate: ["Hibernate", config.TranslateHibernate || textConstants.hibernate, sddm.canHibernate]
+
+ property ComboBox exposedSession
+
+ Repeater {
+ id: systemButtons
+
+ model: [shutdown, reboot, suspend, hibernate]
+
+ RoundButton {
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
+ Layout.topMargin: root.font.pointSize * 6.5
+
+ text: modelData[1]
+ font.pointSize: root.font.pointSize * 0.8
+ icon.source: modelData ? Qt.resolvedUrl("../Assets/" + modelData[0] + ".svg") : ""
+ icon.height: 2 * Math.round((root.font.pointSize * 3) / 2)
+ icon.width: 2 * Math.round((root.font.pointSize * 3) / 2)
+ icon.color: config.SystemButtonsIconsColor
+ palette.buttonText: config.SystemButtonsIconsColor
+ display: AbstractButton.TextUnderIcon
+ visible: config.HideSystemButtons != "true" && (config.BypassSystemButtonsChecks == "true" ? 1 : modelData[2])
+ hoverEnabled: true
+
+ background: Rectangle {
+ height: 2
+ width: parent.width
+
+ color: "transparent"
+ }
+
+ Keys.onReturnPressed: clicked()
+ onClicked: {
+ parent.forceActiveFocus()
+ index == 0 ? sddm.powerOff() : index == 1 ? sddm.reboot() : index == 2 ? sddm.suspend() : sddm.hibernate()
+ }
+ KeyNavigation.left: index > 0 ? parent.children[index-1] : null
+
+ states: [
+ State {
+ name: "pressed"
+ when: parent.children[index].down
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: Qt.darker(root.palette.buttonText, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: parent.children[index].hovered
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: Qt.lighter(root.palette.buttonText, 1.1)
+ }
+ },
+ State {
+ name: "focused"
+ when: parent.children[index].activeFocus
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: root.palette.buttonText
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "palette.buttonText, border.color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+ }
+
+}
diff --git a/.config/quickshell/QtLock/SessionLocker.qml b/.config/quickshell/QtLock/SessionLocker.qml
new file mode 100644
index 0000000..516b178
--- /dev/null
+++ b/.config/quickshell/QtLock/SessionLocker.qml
@@ -0,0 +1,28 @@
+import QtQuick
+import Quickshell
+import Quickshell.Wayland
+
+QtObject {
+ id: sessionLocker
+
+ // store the lock object properly
+ property WlSessionLock lock: WlSessionLock {
+ id: theLock
+
+ onLocked: {
+ console.log("Session LOCKED")
+ }
+
+ onFinished: {
+ console.log("Session UNLOCKED")
+ }
+ }
+
+ function startLock() {
+ lock.requestLock()
+ }
+
+ function unlock() {
+ lock.unlockAndDestroy()
+ }
+}
diff --git a/.config/quickshell/QtLock/Shell.qml b/.config/quickshell/QtLock/Shell.qml
new file mode 100644
index 0000000..8bdc719
--- /dev/null
+++ b/.config/quickshell/QtLock/Shell.qml
@@ -0,0 +1,25 @@
+import Quickshell
+import Quickshell.Wayland
+import Quickshell.Hyprland
+import QtQuick
+
+PanelWindow {
+ id: root
+
+ SessionLocker {
+ id: locker
+ }
+
+ // create a lock surface per monitor
+ Component.onCompleted: {
+ locker.startLock()
+ for (let screen of Screens) {
+ lockSurfaceComponent.createObject(root, { "screen": screen })
+ }
+ }
+
+ Component {
+ id: lockSurfaceComponent
+ LockSurface { }
+ }
+}
diff --git a/.config/quickshell/QtVideo/Shell.qml b/.config/quickshell/QtVideo/Shell.qml
new file mode 100644
index 0000000..08eb47e
--- /dev/null
+++ b/.config/quickshell/QtVideo/Shell.qml
@@ -0,0 +1,27 @@
+import QtQuick
+import Quickshell
+import QtMultimedia
+import Quickshell.Wayland
+
+PanelWindow {
+ WlrLayershell.layer: WlrLayer.Background
+ WlrLayershell.exclusiveZone: 1
+ implicitHeight: Screen.height
+ implicitWidth: Screen.width
+ anchors {
+ top: true
+ bottom: true
+ right: true
+ left: true
+ }
+
+ Video {
+ visible: true
+ anchors.fill: parent
+ source: "file:///home/inorishio/Videos/clips/IHateWomen.mp4"
+ loops: MediaPlayer.Infinite
+ autoPlay: true
+ muted: true
+ fillMode: VideoOutput.PreserveAspectCrop
+ }
+}
diff --git a/.config/quickshell/QtWallpaperPicker b/.config/quickshell/QtWallpaperPicker
new file mode 160000
index 0000000..5925be8
--- /dev/null
+++ b/.config/quickshell/QtWallpaperPicker
@@ -0,0 +1 @@
+Subproject commit 5925be8aa06622ac846846ddfd06fbb0e96c019d
diff --git a/.config/quickshell/inorishio-theme/Assets/Hibernate.svg b/.config/quickshell/inorishio-theme/Assets/Hibernate.svg
new file mode 100644
index 0000000..b877ee6
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Hibernate.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/Password.svg b/.config/quickshell/inorishio-theme/Assets/Password.svg
new file mode 100644
index 0000000..e7b0e6a
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Password.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/Password2.svg b/.config/quickshell/inorishio-theme/Assets/Password2.svg
new file mode 100644
index 0000000..c538c22
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Password2.svg
@@ -0,0 +1,22 @@
+
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/Reboot.svg b/.config/quickshell/inorishio-theme/Assets/Reboot.svg
new file mode 100644
index 0000000..7b21d73
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Reboot.svg
@@ -0,0 +1,36 @@
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/Shutdown.svg b/.config/quickshell/inorishio-theme/Assets/Shutdown.svg
new file mode 100644
index 0000000..a19a695
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Shutdown.svg
@@ -0,0 +1,31 @@
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/Suspend.svg b/.config/quickshell/inorishio-theme/Assets/Suspend.svg
new file mode 100644
index 0000000..ecd2961
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/Suspend.svg
@@ -0,0 +1,31 @@
+
+
diff --git a/.config/quickshell/inorishio-theme/Assets/User.svg b/.config/quickshell/inorishio-theme/Assets/User.svg
new file mode 100644
index 0000000..f0ccc59
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Assets/User.svg
@@ -0,0 +1,52 @@
+
+
\ No newline at end of file
diff --git a/.config/quickshell/inorishio-theme/Backgrounds/Bocchi.mp4 b/.config/quickshell/inorishio-theme/Backgrounds/Bocchi.mp4
new file mode 100644
index 0000000..c6bff11
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Backgrounds/Bocchi.mp4 differ
diff --git a/.config/quickshell/inorishio-theme/Components/Clock.qml b/.config/quickshell/inorishio-theme/Components/Clock.qml
new file mode 100644
index 0000000..b73168f
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Components/Clock.qml
@@ -0,0 +1,70 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+Column {
+ id: clock
+
+ width: parent.width / 2
+ spacing: 0
+
+ Label {
+ id:headerTextLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ font.pointSize: root.font.pointSize * 4
+ color: config.HeaderTextColor
+ renderType: Text.NativeRendering
+ text: config.HeaderText
+ }
+
+ Label {
+ id: timeLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ font.pointSize: root.font.pointSize * 9
+ font.bold: true
+ color: config.TimeTextColor
+ renderType: Text.QtRendering
+
+ function updateTime() {
+ text = new Date().toLocaleTimeString(Qt.locale(config.Locale), config.HourFormat == "long" ? Locale.LongFormat : config.HourFormat !== "" ? config.HourFormat : Locale.ShortFormat)
+ }
+ }
+
+ Label {
+ id: dateLabel
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ color: config.DateTextColor
+ font.pointSize: root.font.pointSize * 3
+ font.bold: true
+ renderType: Text.QtRendering
+
+ function updateTime() {
+ text = new Date().toLocaleDateString(Qt.locale(config.Locale), config.DateFormat == "short" ? Locale.ShortFormat : config.DateFormat !== "" ? config.DateFormat : Locale.LongFormat)
+ }
+ }
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: {
+ dateLabel.updateTime()
+ timeLabel.updateTime()
+ }
+ }
+
+ Component.onCompleted: {
+ dateLabel.updateTime()
+ timeLabel.updateTime()
+ }
+}
diff --git a/.config/quickshell/inorishio-theme/Components/Input.qml b/.config/quickshell/inorishio-theme/Components/Input.qml
new file mode 100644
index 0000000..e489603
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Components/Input.qml
@@ -0,0 +1,526 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+
+Column {
+ id: inputContainer
+
+ Layout.fillWidth: true
+
+ property ComboBox exposeSession: sessionSelect.exposeSession
+ property bool failed
+
+ Item {
+ id: errorMessageField
+
+ // change also in selectSession
+ height: root.font.pointSize * 2
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Label {
+ id: errorMessage
+
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+
+ text: failed ? config.TranslateLoginFailedWarning || textConstants.loginFailed + "!" : keyboard.capsLock ? config.TranslateCapslockWarning || textConstants.capslockWarning : null
+ font.pointSize: root.font.pointSize * 0.8
+ font.italic: true
+ color: config.WarningColor
+ opacity: 0
+
+ states: [
+ State {
+ name: "fail"
+ when: failed
+ PropertyChanges {
+ target: errorMessage
+ opacity: 1
+ }
+ },
+ State {
+ name: "capslock"
+ when: keyboard.capsLock
+ PropertyChanges {
+ target: errorMessage
+ opacity: 1
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "opacity"
+ duration: 100
+ }
+ }
+ ]
+ }
+ }
+
+ Item {
+ id: usernameField
+
+ height: root.font.pointSize * 4.5
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ ComboBox {
+ id: selectUser
+
+ width: parent.height
+ height: parent.height
+ anchors.left: parent.left
+ z: 2
+
+ model: userModel
+ currentIndex: model.lastIndex
+ textRole: "name"
+ hoverEnabled: true
+ onActivated: {
+ username.text = currentText
+ }
+
+ property var popkey: config.RightToLeftLayout == "true" ? Qt.Key_Right : Qt.Key_Left
+ Keys.onPressed: function(event) {
+ if (event.key == Qt.Key_Down && !popup.opened)
+ username.forceActiveFocus();
+ if ((event.key == Qt.Key_Up || event.key == popkey) && !popup.opened)
+ popup.open();
+ }
+ KeyNavigation.down: username
+ KeyNavigation.right: username
+
+ delegate: ItemDelegate {
+ // minus padding
+ width: popupHandler.width - 20
+ anchors.horizontalCenter: popupHandler.horizontalCenter
+
+ contentItem: Text {
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+
+ text: model.name
+ font.pointSize: root.font.pointSize * 0.8
+ font.capitalization: Font.AllLowercase
+ font.family: root.font.family
+ color: config.DropdownTextColor
+ }
+
+ background: Rectangle {
+ color: selectUser.highlightedIndex === index ? config.DropdownSelectedBackgroundColor : "transparent"
+ }
+ }
+
+ indicator: Button {
+ id: usernameIcon
+
+ width: selectUser.height * 1
+ height: parent.height
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: selectUser.height * 0
+
+ icon.height: parent.height * 0.25
+ icon.width: parent.height * 0.25
+ enabled: false
+ icon.color: config.UserIconColor
+ icon.source: Qt.resolvedUrl("../Assets/User.svg")
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+ }
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+
+ popup: Popup {
+ id: popupHandler
+
+ implicitHeight: contentItem.implicitHeight
+ width: usernameField.width
+ y: parent.height - username.height / 3
+ x: config.RightToLeftLayout == "true" ? -loginButton.width + selectUser.width : 0
+ rightMargin: config.RightToLeftLayout == "true" ? root.padding + usernameField.width / 2 : undefined
+ padding: 10
+
+ contentItem: ListView {
+ implicitHeight: contentHeight + 20
+
+ clip: true
+ model: selectUser.popup.visible ? selectUser.delegateModel : null
+ currentIndex: selectUser.highlightedIndex
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ radius: config.RoundCorners / 2
+ color: config.DropdownBackgroundColor
+ layer.enabled: true
+ }
+
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1 }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: selectUser.down
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: Qt.lighter(config.HoverUserIconColor, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: selectUser.hovered
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: Qt.lighter(config.HoverUserIconColor, 1.2)
+ }
+ },
+ State {
+ name: "focused"
+ when: selectUser.activeFocus
+ PropertyChanges {
+ target: usernameIcon
+ icon.color: config.HoverUserIconColor
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color, border.color, icon.color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+ TextField {
+ id: username
+
+ anchors.centerIn: parent
+ height: root.font.pointSize * 3
+ width: parent.width
+ horizontalAlignment: TextInput.AlignHCenter
+ z: 1
+
+ text: config.ForceLastUser == "true" ? selectUser.currentText : null
+ color: config.LoginFieldTextColor
+ font.bold: true
+ font.capitalization: config.AllowUppercaseLettersInUsernames == "false" ? Font.AllLowercase : Font.MixedCase
+ placeholderText: config.TranslatePlaceholderUsername || textConstants.userName
+ placeholderTextColor: config.PlaceholderTextColor
+ selectByMouse: true
+ renderType: Text.QtRendering
+
+ onFocusChanged:{
+ if(focus)
+ selectAll()
+ }
+
+ background: Rectangle {
+ color: config.LoginFieldBackgroundColor
+ opacity: 0.6
+ border.color: "transparent"
+ border.width: parent.activeFocus ? 2 : 1
+ radius: config.RoundCorners || 0
+ }
+
+ onAccepted: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ KeyNavigation.down: passwordIcon
+
+ states: [
+ State {
+ name: "focused"
+ when: username.activeFocus
+ PropertyChanges {
+ target: username.background
+ border.color: config.HighlightBorderColor
+ }
+ PropertyChanges {
+ target: username
+ color: Qt.lighter(config.LoginFieldTextColor, 1.15)
+ }
+ }
+ ]
+ }
+ }
+
+ Item {
+ id: passwordField
+
+ height: root.font.pointSize * 4.5
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Button {
+ id: passwordIcon
+
+ height: parent.height
+ width: selectUser.height * 1
+ anchors.left: parent.left
+ anchors.leftMargin: selectUser.height * 0
+ anchors.verticalCenter: parent.verticalCenter
+ z: 2
+
+ icon.height: parent.height * 0.25
+ icon.width: parent.height * 0.25
+ icon.color: config.PasswordIconColor
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: "transparent"
+ }
+
+ states: [
+ State {
+ name: "visiblePasswordFocused"
+ when: passwordIcon.checked && passwordIcon.activeFocus
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "visiblePasswordHovered"
+ when: passwordIcon.checked && passwordIcon.hovered
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "visiblePassword"
+ when: passwordIcon.checked
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password.svg")
+ }
+ },
+ State {
+ name: "hiddenPasswordFocused"
+ when: passwordIcon.enabled && passwordIcon.activeFocus
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ },
+ State {
+ name: "hiddenPasswordHovered"
+ when: passwordIcon.hovered
+ PropertyChanges {
+ target: passwordIcon
+ icon.source: Qt.resolvedUrl("../Assets/Password2.svg")
+ icon.color: config.HoverPasswordIconColor
+ }
+ }
+ ]
+
+ onClicked: toggle()
+ Keys.onReturnPressed: toggle()
+ Keys.onEnterPressed: toggle()
+ KeyNavigation.down: password
+
+ }
+
+ TextField {
+ id: password
+
+ height: root.font.pointSize * 3
+ width: parent.width
+ anchors.centerIn: parent
+ horizontalAlignment: TextInput.AlignHCenter
+
+ font.bold: true
+ color: config.PasswordFieldTextColor
+ focus: config.PasswordFocus == "true" ? true : false
+ echoMode: passwordIcon.checked ? TextInput.Normal : TextInput.Password
+ placeholderText: config.TranslatePlaceholderPassword || textConstants.password
+ placeholderTextColor: config.PlaceholderTextColor
+ passwordCharacter: "•"
+ passwordMaskDelay: config.HideCompletePassword == "true" ? undefined : 1000
+ renderType: Text.QtRendering
+ selectByMouse: true
+
+ background: Rectangle {
+ color: config.PasswordFieldBackgroundColor
+ opacity: 0.6
+ border.color: "transparent"
+ border.width: parent.activeFocus ? 2 : 1
+ radius: config.RoundCorners || 0
+ }
+ onAccepted: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ KeyNavigation.down: loginButton
+ }
+
+ states: [
+ State {
+ name: "focused"
+ when: password.activeFocus
+ PropertyChanges {
+ target: password.background
+ border.color: config.HighlightBorderColor
+ }
+ PropertyChanges {
+ target: password
+ color: Qt.lighter(config.LoginFieldTextColor, 1.15)
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color, border.color"
+ duration: 150
+ }
+ }
+ ]
+ }
+
+ Item {
+ id: login
+
+ // important
+ // try 4 or 9 ...
+ height: root.font.pointSize * 9
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ visible: config.HideLoginButton == "true" ? false : true
+
+ Button {
+ id: loginButton
+
+ height: root.font.pointSize * 3
+ implicitWidth: parent.width
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+
+ text: config.TranslateLogin || textConstants.login
+ enabled: config.AllowEmptyPassword == "true" || username.text != "" && password.text != "" ? true : false
+ hoverEnabled: true
+
+ contentItem: Text {
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ font.bold: true
+ font.pointSize: root.font.pointSize
+ font.family: root.font.family
+ color: config.LoginButtonTextColor
+ text: parent.text
+ opacity: 0.0
+ }
+
+ background: Rectangle {
+ id: buttonBackground
+
+ color: config.LoginButtonBackgroundColor
+ opacity: 0.0
+ radius: config.RoundCorners || 0
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: loginButton.down
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.darker(config.LoginButtonBackgroundColor, 1.1)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ }
+ },
+ State {
+ name: "hovered"
+ when: loginButton.hovered
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.lighter(config.LoginButtonBackgroundColor, 1.15)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ opacity: 0.0
+ }
+ },
+ State {
+ name: "focused"
+ when: loginButton.activeFocus
+ PropertyChanges {
+ target: buttonBackground
+ color: Qt.lighter(config.LoginButtonBackgroundColor, 1.2)
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem
+ opacity: 0.0
+ }
+ },
+ State {
+ name: "enabled"
+ when: loginButton.enabled
+ PropertyChanges {
+ target: buttonBackground;
+ color: config.LoginButtonBackgroundColor;
+ opacity: 0.0
+ }
+ PropertyChanges {
+ target: loginButton.contentItem;
+ opacity: 0.0
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "opacity, color";
+ duration: 300
+ }
+ }
+ ]
+
+ onClicked: config.AllowUppercaseLettersInUsernames == "false" ? sddm.login(username.text.toLowerCase(), password.text, sessionSelect.selectedSession) : sddm.login(username.text, password.text, sessionSelect.selectedSession)
+ Keys.onReturnPressed: clicked()
+ Keys.onEnterPressed: clicked()
+ }
+ }
+
+ Connections {
+ target: sddm
+ function onLoginSucceeded() {}
+ function onLoginFailed() {
+ failed = true
+ resetError.running ? resetError.stop() && resetError.start() : resetError.start()
+ }
+ }
+
+ Timer {
+ id: resetError
+ interval: 2000
+ onTriggered: failed = false
+ running: false
+ }
+}
diff --git a/.config/quickshell/inorishio-theme/Components/LoginForm.qml b/.config/quickshell/inorishio-theme/Components/LoginForm.qml
new file mode 100644
index 0000000..ffa462b
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Components/LoginForm.qml
@@ -0,0 +1,54 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import SddmComponents 2.0 as SDDM
+
+ColumnLayout {
+ id: formContainer
+ SDDM.TextConstants { id: textConstants }
+
+ property int p: config.ScreenPadding == "" ? 0 : config.ScreenPadding
+ property string a: config.FormPosition
+
+ Clock {
+ id: clock
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ // important
+ Layout.preferredHeight: root.height / 2
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ }
+
+ Input {
+ id: input
+
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredHeight: root.height / 20
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ Layout.topMargin: 0
+ }
+
+ SystemButtons {
+ id: systemButtons
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ Layout.preferredHeight: root.height / 5
+ Layout.maximumHeight: root.height / 5
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+
+ exposedSession: input.exposeSession
+ }
+
+ SessionButton {
+ id: sessionSelect
+
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
+ Layout.preferredHeight: root.height / 54
+ Layout.maximumHeight: root.height / 54
+ Layout.leftMargin: p != "0" ? a == "left" ? -p : a == "right" ? p : 0 : 0
+ }
+}
diff --git a/.config/quickshell/inorishio-theme/Components/SessionButton.qml b/.config/quickshell/inorishio-theme/Components/SessionButton.qml
new file mode 100644
index 0000000..8c5a1d6
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Components/SessionButton.qml
@@ -0,0 +1,149 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+
+Item {
+ id: sessionButton
+
+ height: root.font.pointSize
+ width: parent.width / 2
+
+ property var selectedSession: selectSession.currentIndex
+ property string textConstantSession
+ property int loginButtonWidth
+ property ComboBox exposeSession: selectSession
+
+ ComboBox {
+ id: selectSession
+
+ // important
+ // change also in errorMessage
+ height: root.font.pointSize * 2
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ hoverEnabled: true
+ model: sessionModel
+ currentIndex: model.lastIndex
+ textRole: "name"
+
+ Keys.onPressed: function(event) {
+ if ((event.key == Qt.Key_Left || event.key == Qt.Key_Right) && !popup.opened) {
+ popup.open();
+ }
+ }
+
+ delegate: ItemDelegate {
+ // minus padding
+ width: popupHandler.width - 20
+ anchors.horizontalCenter: popupHandler.horizontalCenter
+
+ contentItem: Text {
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+
+ text: model.name
+ font.pointSize: root.font.pointSize * 0.8
+ font.family: root.font.family
+ color: config.DropdownTextColor
+ }
+
+ background: Rectangle {
+ color: selectSession.highlightedIndex === index ? config.DropdownSelectedBackgroundColor : "transparent"
+ }
+ }
+
+ indicator {
+ visible: false
+ }
+
+ contentItem: Text {
+ id: displayedItem
+
+ verticalAlignment: Text.AlignVCenter
+
+ text: (config.TranslateSessionSelection || "Session") + " (" + selectSession.currentText + ")"
+ color: config.SessionButtonTextColor
+ font.pointSize: root.font.pointSize * 0.8
+ font.family: root.font.family
+
+ Keys.onReleased: parent.popup.open()
+ }
+
+ background: Rectangle {
+ height: parent.visualFocus ? 2 : 0
+ width: displayedItem.implicitWidth
+
+ color: "transparent"
+ }
+
+ popup: Popup {
+ id: popupHandler
+
+ implicitHeight: contentItem.implicitHeight
+ width: sessionButton.width
+ y: parent.height - 1
+ x: -popupHandler.width/2 + displayedItem.width/2
+ padding: 10
+
+ contentItem: ListView {
+ implicitHeight: contentHeight + 20
+
+ clip: true
+ model: selectSession.popup.visible ? selectSession.delegateModel : null
+ currentIndex: selectSession.highlightedIndex
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ radius: config.RoundCorners / 2
+ color: config.DropdownBackgroundColor
+ layer.enabled: true
+ }
+
+ enter: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1 }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ when: selectSession.down
+ PropertyChanges {
+ target: displayedItem
+ color: Qt.darker(config.HoverSessionButtonTextColor, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: selectSession.hovered
+ PropertyChanges {
+ target: displayedItem
+ color: Qt.lighter(config.HoverSessionButtonTextColor, 1.1)
+ }
+ },
+ State {
+ name: "focused"
+ when: selectSession.visualFocus
+ PropertyChanges {
+ target: displayedItem
+ color: config.HoverSessionButtonTextColor
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+}
diff --git a/.config/quickshell/inorishio-theme/Components/SystemButtons.qml b/.config/quickshell/inorishio-theme/Components/SystemButtons.qml
new file mode 100644
index 0000000..e280946
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Components/SystemButtons.qml
@@ -0,0 +1,97 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+
+RowLayout {
+
+ spacing: root.font.pointSize
+
+ property var shutdown: ["Shutdown", config.TranslateShutdown || textConstants.shutdown, sddm.canPowerOff]
+ property var reboot: ["Reboot", config.TranslateReboot || textConstants.reboot, sddm.canReboot]
+ property var suspend: ["Suspend", config.TranslateSuspend || textConstants.suspend, sddm.canSuspend]
+ property var hibernate: ["Hibernate", config.TranslateHibernate || textConstants.hibernate, sddm.canHibernate]
+
+ property ComboBox exposedSession
+
+ Repeater {
+ id: systemButtons
+
+ model: [shutdown, reboot, suspend, hibernate]
+
+ RoundButton {
+ Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
+ Layout.topMargin: root.font.pointSize * 6.5
+
+ text: modelData[1]
+ font.pointSize: root.font.pointSize * 0.8
+ icon.source: modelData ? Qt.resolvedUrl("../Assets/" + modelData[0] + ".svg") : ""
+ icon.height: 2 * Math.round((root.font.pointSize * 3) / 2)
+ icon.width: 2 * Math.round((root.font.pointSize * 3) / 2)
+ icon.color: config.SystemButtonsIconsColor
+ palette.buttonText: config.SystemButtonsIconsColor
+ display: AbstractButton.TextUnderIcon
+ visible: config.HideSystemButtons != "true" && (config.BypassSystemButtonsChecks == "true" ? 1 : modelData[2])
+ hoverEnabled: true
+
+ background: Rectangle {
+ height: 2
+ width: parent.width
+
+ color: "transparent"
+ }
+
+ Keys.onReturnPressed: clicked()
+ onClicked: {
+ parent.forceActiveFocus()
+ index == 0 ? sddm.powerOff() : index == 1 ? sddm.reboot() : index == 2 ? sddm.suspend() : sddm.hibernate()
+ }
+ KeyNavigation.left: index > 0 ? parent.children[index-1] : null
+
+ states: [
+ State {
+ name: "pressed"
+ when: parent.children[index].down
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: Qt.darker(root.palette.buttonText, 1.1)
+ }
+ },
+ State {
+ name: "hovered"
+ when: parent.children[index].hovered
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: Qt.lighter(root.palette.buttonText, 1.1)
+ }
+ },
+ State {
+ name: "focused"
+ when: parent.children[index].activeFocus
+ PropertyChanges {
+ target: parent.children[index]
+ icon.color: root.palette.buttonText
+ palette.buttonText: root.palette.buttonText
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ PropertyAnimation {
+ properties: "palette.buttonText, border.color"
+ duration: 150
+ }
+ }
+ ]
+
+ }
+
+ }
+
+}
diff --git a/.config/quickshell/inorishio-theme/Fonts/ARCADECLASSIC.TTF b/.config/quickshell/inorishio-theme/Fonts/ARCADECLASSIC.TTF
new file mode 100644
index 0000000..394a9f7
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/ARCADECLASSIC.TTF differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Bold.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Bold.ttf
new file mode 100644
index 0000000..4d8f3e5
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Bold.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-BoldItalic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-BoldItalic.ttf
new file mode 100644
index 0000000..eba75d7
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-BoldItalic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBold.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBold.ttf
new file mode 100644
index 0000000..db66f6a
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBold.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..b7611bb
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-ExtraBoldItalic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Italic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Italic.ttf
new file mode 100644
index 0000000..b088474
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Italic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Light.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Light.ttf
new file mode 100644
index 0000000..d01b20c
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Light.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-LightItalic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-LightItalic.ttf
new file mode 100644
index 0000000..0441a59
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-LightItalic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Medium.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Medium.ttf
new file mode 100644
index 0000000..6b41918
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Medium.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-MediumItalic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-MediumItalic.ttf
new file mode 100644
index 0000000..c84fe4f
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-MediumItalic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Regular.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Regular.ttf
new file mode 100644
index 0000000..3a29f26
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-Regular.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBold.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBold.ttf
new file mode 100644
index 0000000..219f6e8
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBold.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBoldItalic.ttf b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBoldItalic.ttf
new file mode 100644
index 0000000..259ac50
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/OpenSans/OpenSans-SemiBoldItalic.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Fonts/pixelon.regular.ttf b/.config/quickshell/inorishio-theme/Fonts/pixelon.regular.ttf
new file mode 100644
index 0000000..acb3c81
Binary files /dev/null and b/.config/quickshell/inorishio-theme/Fonts/pixelon.regular.ttf differ
diff --git a/.config/quickshell/inorishio-theme/Main.qml b/.config/quickshell/inorishio-theme/Main.qml
new file mode 100644
index 0000000..983ad24
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Main.qml
@@ -0,0 +1,200 @@
+// Config created by Keyitdev https://github.com/Keyitdev/sddm-astronaut-theme
+// Copyright (C) 2022-2025 Keyitdev
+// Based on https://github.com/MarianArlt/sddm-sugar-dark
+// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
+
+import QtQuick 2.15
+import QtQuick.Layouts 1.15
+import QtQuick.Controls 2.15
+import QtQuick.Effects
+import QtMultimedia
+
+import "Components"
+
+Pane {
+ id: root
+
+ height: config.ScreenHeight || Screen.height
+ width: config.ScreenWidth || Screen.ScreenWidth
+ padding: config.ScreenPadding
+
+ LayoutMirroring.enabled: config.RightToLeftLayout == "true" ? true : Qt.application.layoutDirection === Qt.RightToLeft
+ LayoutMirroring.childrenInherit: true
+
+ palette.window: config.BackgroundColor
+ palette.highlight: config.HighlightBackgroundColor
+ palette.highlightedText: config.HighlightTextColor
+ palette.buttonText: config.HoverSystemButtonsIconsColor
+
+ font.family: config.Font
+ font.pointSize: config.FontSize !== "" ? config.FontSize : parseInt(height / 80) || 13
+
+ focus: true
+
+ property bool leftleft: config.HaveFormBackground == "true" &&
+ config.PartialBlur == "false" &&
+ config.FormPosition == "left" &&
+ config.BackgroundHorizontalAlignment == "left"
+
+ property bool leftcenter: config.HaveFormBackground == "true" &&
+ config.PartialBlur == "false" &&
+ config.FormPosition == "left" &&
+ config.BackgroundHorizontalAlignment == "center"
+
+ property bool rightright: config.HaveFormBackground == "true" &&
+ config.PartialBlur == "false" &&
+ config.FormPosition == "right" &&
+ config.BackgroundHorizontalAlignment == "right"
+
+ property bool rightcenter: config.HaveFormBackground == "true" &&
+ config.PartialBlur == "false" &&
+ config.FormPosition == "right" &&
+ config.BackgroundHorizontalAlignment == "center"
+
+ Item {
+ id: sizeHelper
+
+ height: parent.height
+ width: parent.width
+ anchors.fill: parent
+
+ Rectangle {
+ id: tintLayer
+
+ height: parent.height
+ width: parent.width
+ anchors.fill: parent
+ z: 1
+ color: config.DimBackgroundColor
+ opacity: config.DimBackground
+ }
+
+ Rectangle {
+ id: formBackground
+
+ anchors.fill: form
+ anchors.centerIn: form
+ z: 1
+
+ color: config.FormBackgroundColor
+ visible: config.HaveFormBackground == "true" ? true : false
+ opacity: config.PartialBlur == "true" ? 0.3 : 1
+ }
+
+ LoginForm {
+ id: form
+
+ height: parent.height
+ width: parent.width / 2.5
+ anchors.left: config.FormPosition == "left" ? parent.left : undefined
+ anchors.horizontalCenter: config.FormPosition == "center" ? parent.horizontalCenter : undefined
+ anchors.right: config.FormPosition == "right" ? parent.right : undefined
+ z: 1
+ }
+
+ Image {
+ id: backgroundPlaceholderImage
+
+ z: 10
+ source: config.BackgroundPlaceholder
+ visible: false
+ }
+
+ AnimatedImage {
+ id: backgroundImage
+
+ MediaPlayer {
+ id: player
+
+ videoOutput: videoOutput
+ autoPlay: true
+ playbackRate: config.BackgroundSpeed == "" ? 1.0 : config.BackgroundSpeed
+ loops: -1
+ onPlayingChanged: {
+ console.log("Video started.")
+ backgroundPlaceholderImage.visible = false;
+ }
+ }
+
+ VideoOutput {
+ id: videoOutput
+
+ fillMode: config.CropBackground == "true" ? VideoOutput.PreserveAspectCrop : VideoOutput.PreserveAspectFit
+ anchors.fill: parent
+ }
+
+ height: parent.height
+ width: config.HaveFormBackground == "true" && config.FormPosition != "center" && config.PartialBlur != "true" ? parent.width - formBackground.width : parent.width
+ anchors.left: leftleft || leftcenter ? formBackground.right : undefined
+ anchors.right: rightright || rightcenter ? formBackground.left : undefined
+
+ horizontalAlignment: config.BackgroundHorizontalAlignment == "left" ?
+ Image.AlignLeft :
+ config.BackgroundHorizontalAlignment == "right" ?
+ Image.AlignRight : Image.AlignHCenter
+
+ verticalAlignment: config.BackgroundVerticalAlignment == "top" ?
+ Image.AlignTop :
+ config.BackgroundVerticalAlignment == "bottom" ?
+ Image.AlignBottom : Image.AlignVCenter
+
+ speed: config.BackgroundSpeed == "" ? 1.0 : config.BackgroundSpeed
+ paused: config.PauseBackground == "true" ? 1 : 0
+ fillMode: config.CropBackground == "true" ? Image.PreserveAspectCrop : Image.PreserveAspectFit
+ asynchronous: true
+ cache: true
+ clip: true
+ mipmap: true
+
+ Component.onCompleted:{
+ var fileType = config.Background.substring(config.Background.lastIndexOf(".") + 1)
+ const videoFileTypes = ["avi", "mp4", "mov", "mkv", "m4v", "webm"];
+ if (videoFileTypes.includes(fileType)) {
+ backgroundPlaceholderImage.visible = true;
+ player.source = Qt.resolvedUrl(config.Background)
+ player.play();
+ }
+ else{
+ backgroundImage.source = config.background || config.Background
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: backgroundImage
+ onClicked: parent.forceActiveFocus()
+ }
+
+ ShaderEffectSource {
+ id: blurMask
+
+ height: parent.height
+ width: form.width
+ anchors.centerIn: form
+
+ sourceItem: backgroundImage
+ sourceRect: Qt.rect(x,y,width,height)
+ visible: config.FullBlur == "true" || config.PartialBlur == "true" ? true : false
+ }
+
+ MultiEffect {
+ id: blur
+
+ height: parent.height
+
+ // width: config.FullBlur == "true" ? parent.width : form.width
+ // anchors.centerIn: config.FullBlur == "true" ? parent : form
+
+ // This solves problem when FullBlur and HaveFormBackground is set to true but PartialBlur is false and FormPosition isn't center.
+ width: (config.FullBlur == "true" && config.PartialBlur == "false" && config.FormPosition != "center" ) ? parent.width - formBackground.width : config.FullBlur == "true" ? parent.width : form.width
+ anchors.centerIn: config.FullBlur == "true" ? backgroundImage : form
+
+ source: config.FullBlur == "true" ? backgroundImage : blurMask
+ blurEnabled: true
+ autoPaddingEnabled: false
+ blur: config.Blur == "" ? 2.0 : config.Blur
+ blurMax: config.BlurMax == "" ? 48 : config.BlurMax
+ visible: config.FullBlur == "true" || config.PartialBlur == "true" ? true : false
+ }
+ }
+}
diff --git a/.config/quickshell/inorishio-theme/README.md b/.config/quickshell/inorishio-theme/README.md
new file mode 100644
index 0000000..bf2cd85
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/README.md
@@ -0,0 +1,136 @@
+# sddm-astronaut-theme
+
+
+
+[](https://ko-fi.com/keyitdev)
+
+[sddm-astronaut-theme](https://github.com/Keyitdev/sddm-astronaut-theme) is a series of themes for the [SDDM](https://github.com/sddm/sddm/) display manager made by **[Keyitdev](https://github.com/Keyitdev)**.
+
+It's written using the latest version of Qt, which is **Qt6**. Its key features include **virtual keyboard support** and an **installation script**. This theme also support **animated wallpapers**. You can easily change its appearance by choosing another of the ten pre-made themes or creating your own. Each of these themes was created by modifying just one file - **[config](./Themes/astronaut.conf)**.
+
+All themes were created for 1080p. However, they should work well in other resolutions.
+
+## Preview of all themes
+
+
+
+## Preview of animated themes
+
+https://github.com/user-attachments/assets/2cfc947e-4621-4e98-b5f3-07d5e224b80c
+
+
+
+Detailed previews
+
+**Astronaut**|**Black hole**
+|:--:|:--:|
+|
+**Japanese aesthetic**|**Pixel sakura static**
+|
+**Purple leaves**|**Cyberpunk**
+|
+**Post-apocalyptic hacker**|**xxx**
+|
+
+**Hyprland Kath**
+
+https://github.com/user-attachments/assets/1d926e76-44f7-4d99-ac6d-d1abcd7ed688
+
+**Pixel sakura**
+
+https://github.com/user-attachments/assets/ea004765-7e84-4a0d-90cd-aaac97679f62
+
+**Jake the dog**
+
+https://github.com/user-attachments/assets/181d48c2-f152-45f5-b568-21145be180f6
+
+
+
+## Installation
+
+### Automatic Installation
+
+```sh
+sh -c "$(curl -fsSL https://raw.githubusercontent.com/keyitdev/sddm-astronaut-theme/master/setup.sh)"
+```
+> Works on distributions using pacman, xbps-install, dnf, zypper.
+> Remember to always read the scripts you run from the internet.
+
+### Manual Installation
+
+1. Install **dependencies**
+
+[`sddm >= 0.21.0`](https://github.com/sddm/sddm), [`qt6 >= 6.8`](https://doc.qt.io/qt-6/index.html), [`qt6-svg >= 6.8`](https://doc.qt.io/qt-6/qtsvg-index.html), [`qt6-virtualkeyboard >= 6.8`](https://doc.qt.io/qt-6/qtvirtualkeyboard-index.html), [`qt6-multimedia >= 6.8`](https://doc.qt.io/qt-6/qtmultimedia-index.html)
+
+You may also want to install additional video codecs like h.264.
+
+```sh
+sddm qt6-svg qt6-virtualkeyboard qt6-multimedia-ffmpeg # Arch
+sddm qt6-svg qt6-virtualkeyboard qt6-multimedia # Void
+sddm qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia # Fedora
+sddm-qt6 libQt6Svg6 qt6-virtualkeyboard qt6-virtualkeyboard-imports qt6-multimedia qt6-multimedia-imports # OpenSUSE
+```
+
+2. Clone this repository
+```sh
+sudo git clone -b master --depth 1 https://github.com/keyitdev/sddm-astronaut-theme.git /usr/share/sddm/themes/sddm-astronaut-theme
+```
+3. Copy fonts to `/usr/share/fonts/`
+```sh
+sudo cp -r /usr/share/sddm/themes/sddm-astronaut-theme/Fonts/* /usr/share/fonts/
+```
+4. Edit `/etc/sddm.conf`
+```sh
+echo "[Theme]
+Current=sddm-astronaut-theme" | sudo tee /etc/sddm.conf
+```
+5. Edit `/etc/sddm.conf.d/virtualkbd.conf`
+```sh
+echo "[General]
+InputMethod=qtvirtualkeyboard" | sudo tee /etc/sddm.conf.d/virtualkbd.conf
+```
+
+## Selecting a theme
+
+You can select theme by editing [metadata](./metadata.desktop) (`/usr/share/sddm/themes/sddm-astronaut-theme/metadata.desktop`).
+
+Just edit this line:
+```
+ConfigFile=Themes/astronaut.conf
+```
+All available configs are in [Themes](./Themes/) directory.
+
+## Previewing a theme
+
+You can preview the set theme without logging out by runnning:
+```sh
+sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/sddm-astronaut-theme/
+```
+> Note that depending on the system configuration, the preview may differ slightly from the actual login screen.
+
+## Sources
+
+Initially the theme was independed fork of [MarianArlt's theme](https://github.com/MarianArlt/sddm-sugar-dark) but now the project has come a long way and started to significantly deviate from the original.
+Many of the wallpapers and fonts used in this project are very popular and copied from one user to another, so I don't know who the original creator is.
+I also redesigned many of them, but here are links to some of the orginal artists who created these wonderful wallpapers:
+
+- Astronaut: [wallpaper](https://wallhaven.cc/w/e76pew), [font](https://fonts.google.com/specimen/Open+Sans/about)
+- Black hole: [wallpaper](https://images2.alphacoders.com/114/1141632.jpg), [font](https://www.1001fonts.com/espacion-font.html)
+- Japanese aesthetic: [wallpaper](https://imgur.com/a/pua0dYx) by [gharly](https://www.artstation.com/gharly), [font](https://www.1001fonts.com/electroharmonix-font.html)
+- Purple leaves: [wallpaper](https://wallha.com/wallpaper/artwork-abstract-leaves-purple-texture-pattern-1414432), [font](https://fonts.google.com/specimen/Open+Sans/about)
+- Cyberpunk: [wallpaper](https://images5.alphacoders.com/133/1330479.png) by [patrika](https://alphacoders.com/users/profile/227699/patrika), [font](https://www.1001fonts.com/kognigear-font.html)
+- Post-apocalyptic hacker: [wallpaper](https://images.alphacoders.com/137/thumb-1920-1375178.png) by [patrika](https://alphacoders.com/users/profile/227699/patrika), [font](https://www.1001fonts.com/fragile-bombers-font.html)
+- Hyprland Kath: [wallpaper](https://motionbgs.com/andvari-last-origin), [font](https://www.1001fonts.com/pixelon-font.html)
+- Pixel sakura: [wallpaper](https://imgur.com/gallery/sakura-tree-with-petals-flying-off-t5tg4N8), [font](https://www.1001fonts.com/arcadeclassic-font.html)
+- Jake the dog: [wallpaper](https://motionbgs.com/jake-the-dog), [font](https://fontmeme.com/fonts/thunderman-font/)
+
+## Supporting project
+
+You can support me simply by dropping a **star** on **[github](https://github.com/Keyitdev/sddm-astronaut-theme)** or giving a **subscription** on **[YouTube](http://www.youtube.com/channel/UCVoGVyAP2sHPQyegwBMJKyQ?sub_confirmation=1)**.
+
+If you enjoyed it and would like to show your appreciation, you can make a **[donation](https://ko-fi.com/keyitdev)** using **[kofi](https://ko-fi.com/keyitdev)**.
+
+[](https://ko-fi.com/keyitdev)
+
+Distributed under the **[GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html) License**.
+Copyright (C) 2022-2025 Keyitdev.
diff --git a/.config/quickshell/inorishio-theme/Themes/inorishio_aesthetic.conf b/.config/quickshell/inorishio-theme/Themes/inorishio_aesthetic.conf
new file mode 100644
index 0000000..db6e86c
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/Themes/inorishio_aesthetic.conf
@@ -0,0 +1,152 @@
+[General]
+#################### General ####################
+
+ScreenWidth="2560"
+ScreenHeight="1440"
+ScreenPadding=""
+# Default 0, Options: from 0 to min(screen width/2,screen height/2).
+
+Font="Pixelon"
+FontSize="24"
+# Default is screen height divided by 80 (1080/80=13.5), Options: 0-inf.
+
+KeyboardSize="0.4"
+# Default 0.4, Options 0.1-1.0
+
+RoundCorners="20"
+
+Locale=""
+# Locale for data and time format. I suggest leaving it blank.
+HourFormat="HH:mm"
+# Default Locale.ShortFormat.
+DateFormat="dddd d"
+# Default Locale.LongFormat.
+
+HeaderText="InoriShio"
+# You can put somehting fun.
+
+#################### Background ####################
+
+BackgroundPlaceholder=""
+# Must be a relative path.
+# Background displayed before the actual background is loaded.
+# Use only if the background is a video, otherwise leave blank.
+# Connected with: Background.
+Background="Backgrounds/Bocchi.mp4"
+# Must be a relative path.
+# Supports: png, jpg, jpeg, webp, gif, avi, mp4, mov, mkv, m4v, webm.
+BackgroundSpeed=""
+# Default 1.0. Options: 0.0-10.0 (can go higher).
+# Speed of animated wallpaper.
+# Connected with: Background.
+PauseBackground=""
+# Default false.
+# If set to true, stops playback of gifs. Works only with gifs.
+# Connected with: Background.
+DimBackground="0.0"
+# Options: 0.0-1.0.
+# Connected with: DimBackgroundColor
+CropBackground="true"
+# Default false.
+# Crop or fit background.
+# Connected with: BackgroundHorizontalAlignment and BackgroundVerticalAlignment dosn't work when set to true.
+BackgroundHorizontalAlignment="center"
+# Default: center, Options: left, center, right.
+# Horizontal position of the background picture.
+# Connected with: CropBackground must be set to false.
+BackgroundVerticalAlignment="center"
+# Horizontal position of the background picture.
+# Default: center, Options: bottom, center, top.
+# Connected with: CropBackground must be set to false.
+
+#################### Colors ####################
+
+HeaderTextColor="#21222c"
+DateTextColor="#21222c"
+TimeTextColor="#21222c"
+
+FormBackgroundColor="#21222c"
+BackgroundColor="#21222c"
+DimBackgroundColor="#21222c"
+
+LoginFieldBackgroundColor="#21222c"
+PasswordFieldBackgroundColor="#21222c"
+LoginFieldTextColor="#ffffff"
+PasswordFieldTextColor="#ffffff"
+UserIconColor="#ffffff"
+PasswordIconColor="#ffffff"
+
+PlaceholderTextColor="#7c6f64"
+WarningColor="#32302f"
+
+LoginButtonTextColor="#32302f"
+LoginButtonBackgroundColor="#ffffff"
+SystemButtonsIconsColor="#32302f"
+SessionButtonTextColor="#32302f"
+
+DropdownTextColor="#ffffff"
+DropdownSelectedBackgroundColor="#7c6f64"
+DropdownBackgroundColor="#32302f"
+
+HighlightTextColor="#877bb0"
+HighlightBackgroundColor="#ffffff"
+HighlightBorderColor="transparent"
+
+HoverUserIconColor="#877bb0"
+HoverPasswordIconColor="#877bb0"
+HoverSystemButtonsIconsColor="#7c6f64"
+HoverSessionButtonTextColor="#7c6f64"
+
+#################### Form ####################
+
+PartialBlur=""
+# Default false.
+FullBlur=""
+# Default false.
+# If you use FullBlur I recommend setting BlurMax to 64 and Blur to 1.0.
+BlurMax=""
+# Default 48, Options: 2-64 (can go higher because depends on Blur).
+# Connected with: Blur.
+Blur=""
+# Default 2.0, Options: 0.0-3.0 (without 3.0).
+# Connected with: BlurMax.
+
+HaveFormBackground="false"
+# Form background is transparent if set to false.
+# Connected with: PartialBlur and BackgroundColor.
+FormPosition="left"
+# Default: left, Options: left, center, right.
+
+#################### Interface Behavior ####################
+
+HideSystemButtons="true"
+HideLoginButton="false"
+
+ForceLastUser="true"
+# If set to true last successfully logged in user appeares automatically in the username field.
+PasswordFocus="true"
+# Automaticaly focuses password field.
+HideCompletePassword="true"
+# Hides the password while typing.
+AllowEmptyPassword="false"
+# Enable login for users without a password.
+AllowUppercaseLettersInUsernames="false"
+# Do not change this! Uppercase letters are generally not allowed in usernames. This option is only for systems that differ from this standard!
+BypassSystemButtonsChecks="false"
+# Skips checking if sddm can perform shutdown, restart, suspend or hibernate, always displays all system buttons.
+RightToLeftLayout="false"
+# Revert the layout either because you would like the login to be on the right hand side or SDDM won't respect your language locale for some reason. This will reverse the current position of FormPosition if it is either left or right and in addition position some smaller elements on the right hand side of the form itself (also when FormPosition is set to center).
+
+#################### Translation ####################
+
+# These don't necessarily need to translate anything. You can enter whatever you want here.
+TranslatePlaceholderUsername=""
+TranslatePlaceholderPassword=""
+TranslateLogin=""
+TranslateLoginFailedWarning=""
+TranslateCapslockWarning=""
+TranslateSuspend=""
+TranslateHibernate=""
+TranslateReboot=""
+TranslateShutdown=""
+TranslateSessionSelection=""
diff --git a/.config/quickshell/inorishio-theme/metadata.desktop b/.config/quickshell/inorishio-theme/metadata.desktop
new file mode 100644
index 0000000..bc0a764
--- /dev/null
+++ b/.config/quickshell/inorishio-theme/metadata.desktop
@@ -0,0 +1,14 @@
+[SddmGreeterTheme]
+Name=inorishio-theme
+Description=cream-da-la-cream
+Author=inorishio
+Website=https://github.com/inorishio
+License=GPL-3.0-or-later
+Type=sddm-theme
+Version=1.3
+ConfigFile=Themes/inorishio_aesthetic.conf
+MainScript=Main.qml
+TranslationsDirectory=translations
+Theme-Id=sddm-astronaut-theme
+Theme-API=2.0
+QtVersion=6
diff --git a/.config/quickshell/z-bar-qt b/.config/quickshell/z-bar-qt
new file mode 160000
index 0000000..7ddb103
--- /dev/null
+++ b/.config/quickshell/z-bar-qt
@@ -0,0 +1 @@
+Subproject commit 7ddb10376793d312727471edcf9cabb9dd995ba6
diff --git a/.config/quickshell/zachjittery/QtDesktopPet b/.config/quickshell/zachjittery/QtDesktopPet
new file mode 160000
index 0000000..5318d38
--- /dev/null
+++ b/.config/quickshell/zachjittery/QtDesktopPet
@@ -0,0 +1 @@
+Subproject commit 5318d3897b459cf157c5e57d5deab4fbd4c1ed91
diff --git a/.config/swayimg/config b/.config/swayimg/config
new file mode 100644
index 0000000..b698a83
--- /dev/null
+++ b/.config/swayimg/config
@@ -0,0 +1,219 @@
+# Swayimg configuration file.
+# vim: filetype=dosini
+
+# This file contains the default configuration.
+# The viewer searches for the config file in the following locations:
+# 1. $XDG_CONFIG_HOME/swayimg/config
+# 2. $HOME/.config/swayimg/config
+# 3. $XDG_CONFIG_DIRS/swayimg/config
+# 4. /etc/xdg/swayimg/config
+
+# Any of these options can be overridden using the --config argument
+# on the command line, for instance:
+# $ swayimg --config="general.mode=gallery"
+
+################################################################################
+# General configuration
+################################################################################
+[general]
+# Mode at startup (viewer/gallery)
+mode = viewer
+# Window position (parent or absolute coordinates, e.g. 100,200)
+position = parent
+# Window size (fullscreen/parent/image, or absolute size, e.g. 800,600)
+size = parent
+# Action performed by SIGUSR1 signal (same format as for key bindings)
+sigusr1 = reload
+# Action performed by SIGUSR2 signal (same format as for key bindings)
+sigusr2 = next_file
+# Application ID and window class name
+app_id = swayimg
+
+################################################################################
+# Viewer mode configuration
+################################################################################
+[viewer]
+# Window background color (RGBA)
+window = #000000ff
+# Background for transparent images (grid/RGBA)
+transparency = grid
+# Default image scale (optimal/fit/width/height/fill/real)
+scale = optimal
+# Initial image position
+position = center
+# Fix position of the image on the window surface (yes/no)
+fixed = yes
+# Anti-aliasing (yes/no)
+antialiasing = yes
+# Run slideshow at startup (yes/no)
+slideshow = no
+# Slideshow image display time (seconds)
+slideshow_time = 0
+# Number of previously viewed images to store in cache
+history = 1
+# Number of preloaded images (read ahead)
+preload = 1
+
+################################################################################
+# Gallery mode configuration
+################################################################################
+[gallery]
+# Max size of the thumbnail (pixels)
+size = 200
+# Max number of thumbnails in cache, 0 to unlimit
+cache = 100
+# Fill the entire tile with thumbnail (yes/no)
+fill = yes
+# Use anti-aliasing for thumbnails (yes/no)
+antialiasing = no
+# Background color of the window (RGBA)
+window = #000000ff
+# Background color of the tile (RGBA)
+background = #202020ff
+# Background color of the selected tile (RGBA)
+select = #404040ff
+# Border color of the selected tile (RGBA)
+border = #000000ff
+# Shadow color of the selected tile (RGBA)
+shadow = #000000ff
+
+################################################################################
+# Image list configuration
+################################################################################
+[list]
+# Default order (none/alpha/reverse/random)
+order = none
+# Looping list of images (yes/no)
+loop = yes
+# Read directories recursively (yes/no)
+recursive = no
+# Open all files in the start directory (yes/no)
+all = yes
+
+################################################################################
+# Font configuration
+################################################################################
+[font]
+# Font name
+name = monospace
+# Font size (pt)
+size = 14
+# Font color (RGBA)
+color = #ccccccff
+# Shadow color (RGBA)
+shadow = #000000d0
+# Background color (RGBA)
+background = #00000000
+
+################################################################################
+# Image meta info scheme (format, size, EXIF, etc)
+################################################################################
+[info]
+# Show on startup (yes/no)
+show = no
+# Timeout to hide info (seconds, 0 to always show)
+info_timeout = 5
+# Timeout to hide status message (seconds)
+status_timeout = 3
+
+# Display scheme for viewer mode (position = content)
+[info.viewer]
+top_left = +name,+format,+filesize,+imagesize,+exif
+top_right = index
+bottom_left = scale,frame
+bottom_right = status
+
+# Display scheme for gallery mode (position = content)
+[info.gallery]
+top_left = none
+top_right = none
+bottom_left = none
+bottom_right = name,status
+
+################################################################################
+# Viewer mode key binding configuration: key = action [parameters]
+################################################################################
+[keys.viewer]
+F1 = help
+h = first_file
+l = last_file
+j = prev_file
+k = next_file
+Home = first_file
+End = last_file
+Left = prev_file
+Right = next_file
+Space = next_file
+Shift+r = rand_file
+Shift+d = prev_dir
+d = next_dir
+Shift+o = prev_frame
+o = next_frame
+c = skip_file
+Shift+s = slideshow
+s = animation
+f = fullscreen
+Return = mode
+#Left = step_left 10
+#Right = step_right 10
+#Up = step_up 10
+#Down = step_down 10
+Equal = zoom +10
+Plus = zoom +10
+Minus = zoom -10
+w = zoom width
+Shift+w = zoom height
+z = zoom fit
+Shift+z = zoom fill
+0 = zoom real
+BackSpace = zoom optimal
+Alt+s = scale
+bracketleft = rotate_left
+bracketright = rotate_right
+m = flip_vertical
+Shift+m = flip_horizontal
+a = antialiasing
+r = reload
+i = info
+Shift+Delete = exec rm "%"; skip_file
+Escape = exit
+q = exit
+# Mouse related
+ScrollLeft = step_right 5
+ScrollRight = step_left 5
+ScrollUp = step_up 5
+ScrollDown = step_down 5
+Ctrl+ScrollUp = zoom +10
+Ctrl+ScrollDown = zoom -10
+Shift+ScrollUp = prev_file
+Shift+ScrollDown = next_file
+Alt+ScrollUp = prev_frame
+Alt+ScrollDown = next_frame
+
+################################################################################
+# Gallery mode key binding configuration: key = action [parameters]
+################################################################################
+[keys.gallery]
+F1 = help
+Home = first_file
+End = last_file
+Left = step_left
+Right = step_right
+Up = step_up
+Down = step_down
+Prior = page_up
+Next = page_down
+c = skip_file
+f = fullscreen
+Return = mode
+a = antialiasing
+r = reload
+i = info
+Shift+Delete = exec rm "%"; skip_file
+Escape = exit
+q = exit
+# Mouse related
+ScrollLeft = step_right
+ScrollRight = step_left
+ScrollUp = step_up
+ScrollDown = step_down
diff --git a/.config/uwsm/env b/.config/uwsm/env
new file mode 100644
index 0000000..ba4019e
--- /dev/null
+++ b/.config/uwsm/env
@@ -0,0 +1,37 @@
+# Nvidia
+export SDL_VIDEODRIVER="wayland"
+export MOZ_ENABLE_WAYLAND=1
+export MOZ_DISABLE_RDD_SANDBOX=1
+export GBM_BACKEND=nvidia-drm
+export NVD_BACKEND=direct # Hardware acceleration egl or direct
+export LIBVA_DRIVER_NAME=nvidia
+export WLR_NO_HARDWARE_CURSORS=0 # Hardware acceleration cursor
+export __GLX_VENDOR_LIBRARY_NAME=nvidia
+export __GL_GSYNC_ALLOWED=1
+export __GL_VRR_ALLOWED=0 # Adaptive sync recommended 0
+
+# GTK Settings
+export GDK_SCALE=2
+
+# Ml4w aids
+export QT_QPA_PLATFORM="wayland;xcb"
+export QT_QPA_PLATFORMTHEME="qt6ct"
+export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
+export QT_AUTO_SCREEN_SCALE_FACTOR=1
+export QT_SCALE_FACTOR=1
+export GDK_SCALE=1
+export GDK_BACKEND="wayland,x11,*"
+export CLUTTER_BACKEND="wayland"
+export MOZ_ENABLE_WAYLAND=1
+export XCURSOR_THEME=BreezeX-RosePine-Linux
+export XCURSOR_SIZE=52
+export APPIMAGELAUNCHER_DISABLE=1
+export OZONE_PLATFORM="wayland"
+export KWIN_FORCE_SW_CURSOR=1
+
+# Hyprland
+export ELECTRON_OZONE_PLATFORM_HINT=auto
+
+# xkb aids
+export XKB_DEFAULT_LAYOUT=us
+export XKB_DEFAULT_OPTIONS=caps:swapescape
diff --git a/.config/uwsm/env-hyprland b/.config/uwsm/env-hyprland
new file mode 100644
index 0000000..6076eae
--- /dev/null
+++ b/.config/uwsm/env-hyprland
@@ -0,0 +1,4 @@
+# Hyprland env
+export HYPRCURSOR_THEME=rose-pine-hyprcursor
+export HYPRCURSOR_SIZE=48
+# /usr/share/icons/
diff --git a/.config/z-bar/config.json b/.config/z-bar/config.json
new file mode 100644
index 0000000..83a387f
--- /dev/null
+++ b/.config/z-bar/config.json
@@ -0,0 +1,42 @@
+{
+ "appCount": 16,
+
+ "accentColor": {
+ "accents": {
+ "primary": "#a388db",
+ "primaryAlt": "#6a4c9c",
+ "warning": "#e46a97"
+ }
+ },
+
+ "transparency": {
+ "enabled": true,
+ "base": 0.6,
+ "layer": 0.4
+ },
+
+ "animScale": 0.8,
+
+ "wallpaperPath": "/home/inorishio/Pictures/Backgrounds/",
+ "useDynamicColors": true,
+ "wallust": true,
+
+ "lock": {
+ "fixLockScreen": false,
+ "useWallpaper": true
+ },
+
+ "idle": {
+ "timeouts": [
+ {
+ "timeout": 240,
+ "idleAction": "lock"
+ },
+ {
+ "timeout": 300,
+ "idleAction": "dpms off",
+ "activeAction": "dpms on"
+ }
+ ]
+ }
+}
diff --git a/.config/zshrc/00-init b/.config/zshrc/00-init
new file mode 100644
index 0000000..21833ae
--- /dev/null
+++ b/.config/zshrc/00-init
@@ -0,0 +1,10 @@
+# -----------------------------------------------------
+# INIT
+# -----------------------------------------------------
+
+# -----------------------------------------------------
+# Exports
+# -----------------------------------------------------
+export EDITOR=nvim
+export PATH="/usr/lib/ccache/bin/:$PATH"
+export ZSH="$HOME/.oh-my-zsh"
diff --git a/.config/zshrc/10-aliases b/.config/zshrc/10-aliases
new file mode 100644
index 0000000..522a5b0
--- /dev/null
+++ b/.config/zshrc/10-aliases
@@ -0,0 +1,18 @@
+# -----------------------------------------------------
+# ALIASES
+# -----------------------------------------------------
+
+alias ff='fastfetch'
+alias v='$EDITOR'
+alias cod='conda deactivate'
+alias grub='sudo grub-mkconfig -o /boot/grub/grub.cfg'
+alias up='yay -Syu --noconfirm'
+alias exit='systemctl poweroff'
+alias reboot="hyprshutdown --post-cmd 'systemctl reboot'"
+alias shutdown="hyprshutdown --post-cmd 'systemctl poweroff'"
+
+alias gcredential="git config credential.helper store"
+alias gitup='python ~/.config/hypr/scripts/Github.py'
+
+alias dot='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
+alias dotfiles='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
diff --git a/.config/zshrc/20-customization b/.config/zshrc/20-customization
new file mode 100644
index 0000000..31b956f
--- /dev/null
+++ b/.config/zshrc/20-customization
@@ -0,0 +1,57 @@
+# -----------------------------------------------------
+# CUSTOMIZATION
+# -----------------------------------------------------
+
+precmd() {
+ echo -ne "\e[6 q"
+}
+
+# -----------------------------------------------------
+# oh-myzsh themes: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
+# -----------------------------------------------------
+# ZSH_THEME=catppuccin-mocha
+
+# -----------------------------------------------------
+# oh-myzsh plugins
+# -----------------------------------------------------
+plugins=(
+ git
+ sudo
+ web-search
+ archlinux
+ zsh-autosuggestions
+ zsh-syntax-highlighting
+ fast-syntax-highlighting
+ copyfile
+ copybuffer
+ dirhistory
+ universalarchive
+ tldr
+ extract
+)
+
+# Set-up oh-my-zsh
+source $ZSH/oh-my-zsh.sh
+
+# -----------------------------------------------------
+# Set-up FZF key bindings (CTRL R for fuzzy history finder)
+# -----------------------------------------------------
+source <(fzf --zsh)
+
+# zsh history
+HISTFILE=~/.zsh_history
+HISTSIZE=10000
+SAVEHIST=10000
+setopt appendhistory
+
+# -----------------------------------------------------
+# Starship promt
+# -----------------------------------------------------
+# eval "$(starship init zsh)"
+
+# -----------------------------------------------------
+# oh-my-posh promt
+# -----------------------------------------------------
+# Custom Theme
+eval "$(oh-my-posh init zsh --config $HOME/.config/ohmyposh/Zachjittery.omp.json)"
+
diff --git a/.config/zshrc/30-autostart b/.config/zshrc/30-autostart
new file mode 100644
index 0000000..dde8424
--- /dev/null
+++ b/.config/zshrc/30-autostart
@@ -0,0 +1,26 @@
+# -----------------------------------------------------
+# AUTOSTART
+# -----------------------------------------------------
+
+# Fastfetch
+if [[ $(tty) == *"pts"* ]]; then
+ fastfetch --config ~/.config/fastfetch/Gif.jsonc
+else
+ echo
+ if [ -f /bin/qtile ]; then
+ echo "Start Qtile X11 with command Qtile"
+ fi
+ if [ -f /bin/hyprctl ]; then
+ echo "Start Hyprland with command Hyprland"
+ fi
+fi
+
+# Tmux
+# if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
+# tmux attach-session -t default || tmux new-session -s default
+# fi
+#
+# Vencord alias
+vencord() {
+ zsh -c "$(curl -sS https://raw.githubusercontent.com/Vendicated/VencordInstaller/main/install.sh)"
+}