Compare commits

...
3 Commits
Author SHA1 Message Date
Inorishio 648de6c18a Delete directory '.config/opencode' 2026-10-27 20:20:05 +01:00
Inorishio 8253f168e6 Delete directory '.config/quickshell' 2026-10-27 20:19:57 +01:00
Inorishio 4c7b7b7e54 Update dotfiles (2026-10-27 20:18:43) 2026-10-27 20:18:43 +01:00
84 changed files with 18842 additions and 21983 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"positionX": 157, "positionX": 153,
"positionY": 1031, "positionY": 1032,
"scaling": 1.749999999999999, "scaling": 1.749999999999999,
"zIndex": 1 "zIndex": 1
} }
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"positionX": 24, "positionX": 4,
"positionY": 951, "positionY": 968,
"scaling": 2.9125000000000036, "scaling": 2.975000000000006,
"zIndex": 2 "zIndex": 2
} }
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"positionX": 198, "positionX": 197,
"positionY": 956, "positionY": 956,
"scaling": 3.050000000000006, "scaling": 3.050000000000006,
"zIndex": 0 "zIndex": 0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -2879,3 +2879,123 @@
"Level": 1, "Level": 1,
"Notification": false "Notification": false
}, },
{
"Time": "2026-10-18T21:05:49.4759354+02:00",
"Group": "HidSharpDeviceRootHub",
"Message": "Changes: 2, Add: 0, Remove: 2",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:05:49.5002288+02:00",
"Group": "RootHub",
"Message": "Invoking DevicesChanged",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:05:49.5634844+02:00",
"Group": "HidSharpDeviceRootHub",
"Message": "Changes: 1, Add: 0, Remove: 1",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:05:49.5837538+02:00",
"Group": "RootHub",
"Message": "Invoking DevicesChanged",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:05:49.6514808+02:00",
"Group": "HidSharpDeviceRootHub",
"Message": "Changes: 2, Add: 0, Remove: 2",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:05:49.6717444+02:00",
"Group": "RootHub",
"Message": "Invoking DevicesChanged",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:20:15.938358+02:00",
"Group": "HidSharpDeviceRootHub",
"Message": "Changes: 5, Add: 5, Remove: 0",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:20:15.9590295+02:00",
"Group": "RootHub",
"Message": "Invoking DevicesChanged",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T21:20:15.9675078+02:00",
"Group": "DriverDaemon",
"Message": "No known tablets added, skipping detect",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.737596+02:00",
"Group": "AssemblyLoadContext.Unloading",
"Message": "Terminating daemon..",
"StackTrace": null,
"Level": 1,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.7379517+02:00",
"Group": "closeDaemon",
"Message": "Waiting for daemon to terminate",
"StackTrace": null,
"Level": 1,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.8593913+02:00",
"Group": "IPC",
"Message": "Connected to a client.",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.9074327+02:00",
"Group": "IPC",
"Message": "Disconnected from a client.",
"StackTrace": null,
"Level": 0,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.9077185+02:00",
"Group": "ProgramMain",
"Message": "Daemon gracefully stopped",
"StackTrace": null,
"Level": 1,
"Notification": false
},
{
"Time": "2026-10-18T22:58:45.9380981+02:00",
"Group": "closeDaemon",
"Message": "Waiting for daemon finished",
"StackTrace": null,
"Level": 1,
"Notification": false
},
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4 -7
View File
@@ -1,8 +1,5 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
systemctl stop bluetooth
controller_mac="F5:17:E7:FC:F4:50" modprobe -r btusb btintel btrtl btbcm btmtk
bluetoothctl scan on modprobe btusb
bluetoothctl remove $controller_mac systemctl start bluetooth
bluetoothctl trust $controller_mac
bluetoothctl pair $controller_mac
bluetoothctl connect $controller_mac
+10 -1
View File
@@ -12,7 +12,6 @@ local titles = {
"Picture in Picture", "Picture in Picture",
"Friends List", "Friends List",
"Save Image - *", "Save Image - *",
"AniShio",
} }
for _, class in ipairs(classes) do for _, class in ipairs(classes) do
@@ -38,6 +37,15 @@ hl.window_rule({
initial_title = "Star Rail", initial_title = "Star Rail",
}, },
fullscreen_state = 3, fullscreen_state = 3,
render_unfocused = true,
content = "game",
})
hl.window_rule({
match = {
title = "Slay the Spire 2",
},
render_unfocused = true,
content = "game", content = "game",
}) })
@@ -45,6 +53,7 @@ hl.window_rule({
match = { match = {
title = "Honkai: Star Rail", title = "Honkai: Star Rail",
}, },
render_unfocused = true,
fullscreen_state = 3, fullscreen_state = 3,
content = "game", content = "game",
}) })
-6
View File
@@ -1,6 +0,0 @@
{
"$schema": "https://opencode.ai/v2/cli.json",
"theme": {
"name": "tokyonight"
}
}
-82
View File
@@ -1,82 +0,0 @@
{
"$schema": "https://opencode.ai/config.json",
"lsp": true,
"provider": {
"llama.cpp": {
"npm": "@ai-sdk/openai-compatible",
"name": "llama-server (local)",
"options": {
"baseURL": "http://127.0.0.1:8080/v1"
},
"models": {
"Qwen3.8-27B-UD-IQ2_XXS": {
"name": "Qwen 3.8 27B",
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
}
// "limit": {
// "context": 8192,
// "output": 4096
// }
},
"gemma-4-12b-it-Q4_K_M": {
"name": "Gemma 4 12B",
"modalities": {
"input": [
"image",
"text"
],
"output": [
"text"
]
},
"limit": {
"context": 100000,
"output": 65536
}
},
"qwen3.8-flash-next-iq2_xs": {
"name": "Strata IQ2XS",
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
},
"limit": {
"context": 262144,
"output": 70000
}
},
"qwen3.8-flash-next-coder-iq1_m": {
"name": "Strata Coder",
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
},
"limit": {
"context": 131072,
"output": 25000
}
}
}
},
"tools": {
"bash": true,
"read": true,
"webfetch": true,
"write": true
}
}
}
-376
View File
@@ -1,376 +0,0 @@
{
"name": "opencode",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"@opencode-ai/plugin": "1.4.9"
}
},
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz",
"integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz",
"integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz",
"integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz",
"integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz",
"integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz",
"integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@opencode-ai/plugin": {
"version": "1.4.9",
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.4.9.tgz",
"integrity": "sha512-tUtPbPs5xP9wonwuz5d/2y8QTrqFR8HOtAVTXvZ6iG26NJfW0dnnw9oTusVOayEIemd5abytCESm7X9ZZOMftQ==",
"license": "MIT",
"dependencies": {
"@opencode-ai/sdk": "1.4.9",
"effect": "4.0.0-beta.48",
"zod": "4.1.8"
},
"peerDependencies": {
"@opentui/core": ">=0.1.100",
"@opentui/solid": ">=0.1.100"
},
"peerDependenciesMeta": {
"@opentui/core": {
"optional": true
},
"@opentui/solid": {
"optional": true
}
}
},
"node_modules/@opencode-ai/sdk": {
"version": "1.4.9",
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.4.9.tgz",
"integrity": "sha512-S8WQLuBFu2WwvSc1wupsV4qskniBA+JN1VaZZs52BPWwiN2zQFTD5/6dMh6oiYOMDtPjKsTFZ6qLFxDvVPNggQ==",
"license": "MIT",
"dependencies": {
"cross-spawn": "7.0.6"
}
},
"node_modules/@standard-schema/spec": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
"integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
"license": "MIT"
},
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/detect-libc": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"license": "Apache-2.0",
"optional": true,
"engines": {
"node": ">=8"
}
},
"node_modules/effect": {
"version": "4.0.0-beta.48",
"resolved": "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.48.tgz",
"integrity": "sha512-MMAM/ZabuNdNmgXiin+BAanQXK7qM8mlt7nfXDoJ/Gn9V8i89JlCq+2N0AiWmqFLXjGLA0u3FjiOjSOYQk5uMw==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.1.0",
"fast-check": "^4.6.0",
"find-my-way-ts": "^0.1.6",
"ini": "^6.0.0",
"kubernetes-types": "^1.30.0",
"msgpackr": "^1.11.9",
"multipasta": "^0.2.7",
"toml": "^4.1.1",
"uuid": "^13.0.0",
"yaml": "^2.8.3"
}
},
"node_modules/fast-check": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.7.0.tgz",
"integrity": "sha512-NsZRtqvSSoCP0HbNjUD+r1JH8zqZalyp6gLY9e7OYs7NK9b6AHOs2baBFeBG7bVNsuoukh89x2Yg3rPsul8ziQ==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/dubzzz"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
],
"license": "MIT",
"dependencies": {
"pure-rand": "^8.0.0"
},
"engines": {
"node": ">=12.17.0"
}
},
"node_modules/find-my-way-ts": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz",
"integrity": "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==",
"license": "MIT"
},
"node_modules/ini": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz",
"integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==",
"license": "ISC",
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
"node_modules/kubernetes-types": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz",
"integrity": "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==",
"license": "Apache-2.0"
},
"node_modules/msgpackr": {
"version": "1.11.9",
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.9.tgz",
"integrity": "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==",
"license": "MIT",
"optionalDependencies": {
"msgpackr-extract": "^3.0.2"
}
},
"node_modules/msgpackr-extract": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz",
"integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==",
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"dependencies": {
"node-gyp-build-optional-packages": "5.2.2"
},
"bin": {
"download-msgpackr-prebuilds": "bin/download-prebuilds.js"
},
"optionalDependencies": {
"@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3",
"@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3",
"@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3",
"@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3",
"@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3",
"@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3"
}
},
"node_modules/multipasta": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.7.tgz",
"integrity": "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==",
"license": "MIT"
},
"node_modules/node-gyp-build-optional-packages": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
"integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
"license": "MIT",
"optional": true,
"dependencies": {
"detect-libc": "^2.0.1"
},
"bin": {
"node-gyp-build-optional-packages": "bin.js",
"node-gyp-build-optional-packages-optional": "optional.js",
"node-gyp-build-optional-packages-test": "build-test.js"
}
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/pure-rand": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.0.tgz",
"integrity": "sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/dubzzz"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
],
"license": "MIT"
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/toml": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/toml/-/toml-4.1.1.tgz",
"integrity": "sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw==",
"license": "MIT",
"engines": {
"node": ">=20"
}
},
"node_modules/uuid": {
"version": "13.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz",
"integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist-node/bin/uuid"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/yaml": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
"integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
"node": ">= 14.6"
},
"funding": {
"url": "https://github.com/sponsors/eemeli"
}
},
"node_modules/zod": {
"version": "4.1.8",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
}
}
}
-3
View File
@@ -1,3 +0,0 @@
{
"password": "Wols7V_Q9_t4mdh5R6uZGB3171eJYZeMygRSNKrJ5QY"
}
@@ -1,30 +0,0 @@
// 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
}
}
}
}
@@ -1,9 +0,0 @@
// 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
}
@@ -1,20 +0,0 @@
// 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
}
}
-7
View File
@@ -1,7 +0,0 @@
// shell.qml
import Quickshell
import qs.Widgets
Scope {
Bar {}
}
Binary file not shown.
-41
View File
@@ -1,41 +0,0 @@
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 = ""
}
}
}
}
}
}
@@ -1,70 +0,0 @@
// 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()
}
}
-526
View File
@@ -1,526 +0,0 @@
// 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
}
}
@@ -1,54 +0,0 @@
// 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
}
}
@@ -1,149 +0,0 @@
// 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
}
}
]
}
}
@@ -1,97 +0,0 @@
// 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
}
}
]
}
}
}
@@ -1,28 +0,0 @@
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()
}
}
-25
View File
@@ -1,25 +0,0 @@
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 { }
}
}
-27
View File
@@ -1,27 +0,0 @@
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
}
}
@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg8"
version="1.1"
viewBox="0 0 34 34"
height="34"
width="34">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill"
d="M 17,1 C 8.163444,1 1,8.163444 1,17 1,25.836556 8.163444,33 17,33 25.836556,33 33,25.836556 33,17 33,8.163444 25.836556,1 17,1 Z m 0,1 C 25.284271,2 32,8.7157288 32,17 32,25.284271 25.284271,32 17,32 8.7157288,32 2,25.284271 2,17 2,8.7157288 8.7157288,2 17,2 Z"
id="path831" />
<path
id="path816"
d="M 17 11 C 13.686292 11 11 13.686292 11 17 C 11 20.313708 13.686292 23 17 23 C 20.313708 23 23 20.313708 23 17 C 23 13.686292 20.313708 11 17 11 z M 17 12 A 5 5 0 0 1 22 17 A 5 5 0 0 1 17 22 A 5 5 0 0 1 12 17 A 5 5 0 0 1 17 12 z "
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.71428573;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="M23.821,11.181v0C22.943,9.261,19.5,3,12,3S1.057,9.261.179,11.181a1.969,1.969,0,0,0,0,1.64C1.057,14.739,4.5,21,12,21s10.943-6.261,11.821-8.181A1.968,1.968,0,0,0,23.821,11.181ZM12,18a6,6,0,1,1,6-6A6.006,6.006,0,0,1,12,18Z"/><circle cx="12" cy="12" r="4"/></svg>

Before

Width:  |  Height:  |  Size: 426 B

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512.19 512.19" style="enable-background:new 0 0 512.19 512.19;" xml:space="preserve" width="512" height="512">
<g>
<path d="M496.543,200.771c-19.259-31.537-43.552-59.707-71.915-83.392l59.733-59.733c8.185-8.475,7.95-21.98-0.525-30.165 c-8.267-7.985-21.374-7.985-29.641,0l-64.96,65.045c-40.269-23.918-86.306-36.385-133.141-36.053 c-132.075,0-207.339,90.411-240.448,144.299c-20.862,33.743-20.862,76.379,0,110.123c19.259,31.537,43.552,59.707,71.915,83.392 l-59.733,59.733c-8.475,8.185-8.71,21.691-0.525,30.165c8.185,8.475,21.691,8.71,30.165,0.525c0.178-0.172,0.353-0.347,0.525-0.525 l65.109-65.109c40.219,23.915,86.201,36.402,132.992,36.117c132.075,0,207.339-90.411,240.448-144.299 C517.405,277.151,517.405,234.515,496.543,200.771z M128.095,255.833c-0.121-70.575,56.992-127.885,127.567-128.006 c26.703-0.046,52.75,8.275,74.481,23.793l-30.976,30.976c-13.004-7.842-27.887-12.022-43.072-12.096 c-47.128,0-85.333,38.205-85.333,85.333c0.074,15.185,4.254,30.068,12.096,43.072l-30.976,30.976 C136.414,308.288,128.096,282.394,128.095,255.833z M256.095,383.833c-26.561-0.001-52.455-8.319-74.048-23.787l30.976-30.976 c13.004,7.842,27.887,12.022,43.072,12.096c47.128,0,85.333-38.205,85.333-85.333c-0.074-15.185-4.254-30.068-12.096-43.072 l30.976-30.976c41.013,57.434,27.702,137.242-29.732,178.255C308.845,375.558,282.798,383.879,256.095,383.833z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="34"
height="34"
viewBox="0 0 34 34"
version="1.1"
id="svg8">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
transform="matrix(1.000593,0,0,1.0006688,0.99050505,-287.73702)">
<path
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.00189281;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill"
d="M 19.001953,1.1308594 V 2 H 19 v 11 h 1 V 2.3359375 A 15,15 45 0 1 32,17 15,15 45 0 1 21.001953,31.455078 v 1.033203 A 16.009488,16.010701 45 0 0 33.009766,17 16.009488,16.010701 45 0 0 19.001953,1.1308594 Z M 12.998047,1.5117188 A 16.009488,16.010701 45 0 0 0.99023438,17 16.009488,16.010701 45 0 0 14.998047,32.869141 V 32 H 15 V 21 H 14 V 31.664062 A 15,15 45 0 1 2,17 15,15 45 0 1 12.998047,2.5449219 Z"
transform="matrix(0.70668771,-0.70663419,0.70668771,0.70663419,-8.0273788,304.53335)"
id="path817" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg8"
version="1.1"
viewBox="0 0 34 34"
height="34"
width="34">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
id="path822"
d="M 14 1 L 14 13 L 15 13 L 15 1 L 14 1 z M 19 1 L 19 13 L 20 13 L 20 1 L 19 1 z M 9 3.1855469 C 4.1702837 5.9748853 1.0026451 11.162345 1 17 C 1 25.836556 8.163444 33 17 33 C 25.836556 33 33 25.836556 33 17 C 32.99593 11.163669 29.828666 5.9780498 25 3.1894531 L 25 4.3496094 C 29.280842 7.0494632 31.988612 11.788234 32 17 C 32 25.284271 25.284271 32 17 32 C 8.7157288 32 2 25.284271 2 17 C 2.0120649 11.788824 4.7195457 7.0510246 9 4.3515625 L 9 3.1855469 z "
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill" />
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg8"
version="1.1"
viewBox="0 0 34 34"
height="34"
width="34">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<path
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill"
d="M 17,1 C 8.163444,1 1,8.163444 1,17 1,25.836556 8.163444,33 17,33 25.836556,33 33,25.836556 33,17 33,8.163444 25.836556,1 17,1 Z m 0,1 C 25.284271,2 32,8.7157288 32,17 32,25.284271 25.284271,32 17,32 8.7157288,32 2,25.284271 2,17 2,8.7157288 8.7157288,2 17,2 Z m -4,9 v 12 h 1 V 11 Z m 7,0 v 12 h 1 V 11 Z"
id="path831" />
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="28"
width="28"
id="svg12"
xml:space="preserve"
viewBox="0 0 28 28"
y="0px"
x="0px"
version="1.1"
sodipodi:docname="user.svgz"
inkscape:version="0.92.2 2405546, 2018-03-11"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1440"
inkscape:window-height="843"
id="namedview8"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="3.2721019"
inkscape:cx="11.317087"
inkscape:cy="22.626613"
inkscape:window-x="0"
inkscape:window-y="22"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" /><metadata
id="metadata18"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs16" /><g
id="g6"
transform="scale(0.06862745)"><g
id="g4"><path
id="path2"
d="M 204,204 C 260.1,204 306,158.1 306,102 306,45.9 260.1,0 204,0 147.9,0 102,45.9 102,102 c 0,56.1 45.9,102 102,102 z m 0,51 C 135.15,255 0,288.15 0,357 v 51 H 408 V 357 C 408,288.15 272.85,255 204,255 Z"
inkscape:connector-curvature="0" /></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

@@ -1,70 +0,0 @@
// 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()
}
}
@@ -1,526 +0,0 @@
// 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
}
}
@@ -1,54 +0,0 @@
// 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
}
}
@@ -1,149 +0,0 @@
// 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
}
}
]
}
}
@@ -1,97 +0,0 @@
// 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
}
}
]
}
}
}
-200
View File
@@ -1,200 +0,0 @@
// 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
}
}
}
@@ -1,136 +0,0 @@
# sddm-astronaut-theme
![Stars](https://img.shields.io/github/stars/keyitdev/sddm-astronaut-theme?color=dd864a&labelColor=1b1b25&style=for-the-badge)
![Forks](https://img.shields.io/github/forks/keyitdev/sddm-astronaut-theme?color=bf616a&labelColor=1b1b25&style=for-the-badge)
[![Ko-fi](https://img.shields.io/badge/support_me_on_ko--fi-F16061?style=for-the-badge&logo=kofi&logoColor=f5f5f5)](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
![all_themes.gif](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/all_themes.gif?raw=true)
## Preview of animated themes
https://github.com/user-attachments/assets/2cfc947e-4621-4e98-b5f3-07d5e224b80c
<h2><a href="https://youtu.be/4tQ56xh7wBc" target="_blank">Watch more on Youtube!</a></h2>
<details>
<summary><h2>Detailed previews</h2></summary>
**Astronaut**|**Black hole**
|:--:|:--:|
![astronaut](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/astronaut.png?raw=true)|![black_hole](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/black_hole.png?raw=true)
**Japanese aesthetic**|**Pixel sakura static**
![japanese_aesthetic](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/japanese_aesthetic.png?raw=true)|![pixel_sakura_static](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/pixel_sakura_static.png?raw=true)
**Purple leaves**|**Cyberpunk**
![purple_leaves](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/purple_leaves.png?raw=true)|![cyberpunk](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/cyberpunk.png?raw=true)
**Post-apocalyptic hacker**|**xxx**
![post-apocalyptic_hacker](https://github.com/Keyitdev/screenshots/blob/master/sddm-astronaut-theme/master/post-apocalyptic_hacker.png?raw=true)|
**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
</details>
## 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)**.
[![Ko-fi](https://img.shields.io/badge/support_me_on_ko--fi-F16061?style=for-the-badge&logo=kofi&logoColor=f5f5f5)](https://ko-fi.com/keyitdev)
Distributed under the **[GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html) License**.
Copyright (C) 2022-2025 Keyitdev.
@@ -1,152 +0,0 @@
[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=""
@@ -1,14 +0,0 @@
[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
Submodule .config/quickshell/z-bar-qt deleted from 7ddb103767
Submodule .config/quickshell/zachjittery/QtDesktopPet deleted from 5318d3897b
-219
View File
@@ -1,219 +0,0 @@
# 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 = alpha
# 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
+212
View File
@@ -0,0 +1,212 @@
swayimg.mode = "viewer"
swayimg.appid = "swayimg"
swayimg.imagelist.order = "mtime"
-- "none": unsorted (whatever order the system returns)
-- "alpha": lexicographic, so 1, 10, 2, 20, a, b, c
-- "numeric": numeric-aware, so 1, 2, 3, 10, 100, a, b, c
-- "mtime": by modification time
-- "size": by file size
-- "random": shuffled
swayimg.imagelist.adjacent = true -- INI list.all = yes (default: false)
-- Text overlay
swayimg.text.visible = false -- INI info.show = no (default: true)
swayimg.text.size = 19 -- INI font.size = 14pt; Lua uses pixels (14pt ~ 19px)
swayimg.text.shadow = 0xd0000000 -- INI font.shadow = #000000d0 (ARGB here)
-- INI info.viewer layout: image size at top left, frame info at bottom left
swayimg.viewer.text = {
topleft = {
"File:\t{name}",
"Format:\t{format}",
"File size:\t{sizehr}",
"File time:\t{time}",
"Size:\t{frame.width}x{frame.height}",
"EXIF date:\t{meta.Exif.Photo.DateTimeOriginal}",
"EXIF camera:\t{meta.Exif.Image.Model}",
},
topright = {
"Image:\t{list.index} of {list.total}",
},
bottomleft = {
"Scale:\t{scale}",
"Frame:\t{frame.index} of {frame.total}",
},
}
-- INI info.gallery layout: only the file name, bottom right
swayimg.gallery.text = {
bottomright = { "{name}" },
}
-- Gallery appearance
swayimg.gallery.border_color = 0xff000000 -- INI gallery.border = #000000ff (default: 0xffaaaaaa)
-- Helpers
local function next_frame()
swayimg.viewer.frame = swayimg.viewer.frame + 1
end
local function prev_frame()
local frame = swayimg.viewer.frame
if frame > 0 then
swayimg.viewer.frame = frame - 1
end
end
-- INI "skip_file": drop the current image from the list
local function skip_image(img)
if img then
swayimg.imagelist.remove(img.path)
end
end
-- INI: exec rm "%"; skip_file (permanently deletes the file from disk!)
local function delete_image(img)
if img then
local path = img.path
os.remove(path)
swayimg.imagelist.remove(path)
swayimg.text.status = "Deleted " .. path
end
end
-- Signals (INI general.sigusr1 = reload, general.sigusr2 = next_file)
swayimg.viewer.on_signal("USR1", function()
swayimg.viewer.reload()
end)
swayimg.viewer.on_signal("USR2", function()
swayimg.viewer.open("next")
end)
swayimg.slideshow.on_signal("USR1", function()
swayimg.slideshow.reload()
end)
swayimg.slideshow.on_signal("USR2", function()
swayimg.slideshow.open("next")
end)
swayimg.gallery.on_signal("USR1", function()
swayimg.gallery.reload()
end)
-- Viewer key bindings
-- file navigation
swayimg.viewer.on_key("h", function()
swayimg.viewer.open("first")
end)
swayimg.viewer.on_key("l", function()
swayimg.viewer.open("last")
end)
swayimg.viewer.on_key("j", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_key("k", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("Home", function()
swayimg.viewer.open("first")
end)
swayimg.viewer.on_key("End", function()
swayimg.viewer.open("last")
end)
-- NOTE: Left/Right switch images, as in the INI. The default (pan image)
-- is overridden; scroll or the vertical arrows still pan.
swayimg.viewer.on_key("left", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_key("right", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("space", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("Shift+r", function()
swayimg.viewer.open("random")
end)
swayimg.viewer.on_key("Shift+d", function()
swayimg.viewer.open("prev_dir")
end)
swayimg.viewer.on_key("d", function()
swayimg.viewer.open("next_dir")
end)
-- frames / animation / slideshow
swayimg.viewer.on_key("Shift+o", prev_frame)
swayimg.viewer.on_key("o", next_frame)
swayimg.viewer.on_key("s", function() -- INI: s = animation (toggle)
swayimg.viewer.animation = not swayimg.viewer.animation
end)
swayimg.viewer.on_key("Shift+s", function() -- INI: Shift+s = slideshow
swayimg.mode = "slideshow"
end)
-- skip / delete
swayimg.viewer.on_key("c", function()
skip_image(swayimg.viewer.get_image())
end)
swayimg.viewer.on_key("Shift+Delete", function()
delete_image(swayimg.viewer.get_image())
end)
-- zoom
swayimg.viewer.on_key("plus", function()
swayimg.viewer.scale = swayimg.viewer.scale + swayimg.viewer.scale / 10
end)
swayimg.viewer.on_key("w", function()
swayimg.viewer.set_fix_scale("width")
end)
swayimg.viewer.on_key("Shift+w", function()
swayimg.viewer.set_fix_scale("height")
end)
swayimg.viewer.on_key("z", function()
swayimg.viewer.set_fix_scale("fit")
end)
swayimg.viewer.on_key("Shift+z", function()
swayimg.viewer.set_fix_scale("fill")
end)
swayimg.viewer.on_key("0", function()
swayimg.viewer.set_fix_scale("real")
end)
swayimg.viewer.on_key("backspace", function()
swayimg.viewer.set_fix_scale("optimal")
end)
-- misc
swayimg.viewer.on_key("r", function()
swayimg.viewer.reload()
end)
swayimg.viewer.on_key("i", function()
swayimg.text.visible = not swayimg.text.visible
end)
swayimg.viewer.on_key("q", function()
swayimg.exit()
end)
-- mouse
swayimg.viewer.on_mouse("Shift+ScrollUp", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_mouse("Shift+ScrollDown", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_mouse("Alt+ScrollUp", prev_frame)
swayimg.viewer.on_mouse("Alt+ScrollDown", next_frame)
--------------------------------------------------------------------------------
-- Gallery key bindings
--------------------------------------------------------------------------------
swayimg.gallery.on_key("c", function()
skip_image(swayimg.gallery.get_image())
end)
swayimg.gallery.on_key("Shift+Delete", function()
delete_image(swayimg.gallery.get_image())
end)
swayimg.gallery.on_key("r", function()
swayimg.gallery.reload()
end)
swayimg.gallery.on_key("i", function()
swayimg.text.visible = not swayimg.text.visible
end)
swayimg.gallery.on_key("q", function()
swayimg.exit()
end)
+19 -49
View File
@@ -23,7 +23,8 @@
}, },
"background": { "background": {
"enabled": true, "enabled": true,
"wallFadeDuration": 300 "wallFadeDuration": 300,
"wallTransition": "Fade"
}, },
"bar": { "bar": {
"autoHide": false, "autoHide": false,
@@ -171,50 +172,16 @@
"showStorage": true, "showStorage": true,
"showVram": true "showVram": true
}, },
"processColumns": [
{
"id": "command",
"width": 298.5
},
{
"id": "cpuUsage",
"width": 298.5
},
{
"id": "memoryUsage",
"width": 298.5
}
],
"resourceUpdateInterval": 1000, "resourceUpdateInterval": 1000,
"showDashboard": true, "showOnHover": false
"showMedia": true,
"showOnHover": false,
"showProcesses": true,
"showWeather": true,
"sizes": {
"dateTimeWidth": 110,
"infoIconSize": 25,
"infoWidth": 200,
"mediaCoverArtSize": 150,
"mediaProgressSweep": 180,
"mediaProgressThickness": 8,
"mediaVisualizerSize": 200,
"mediaWidth": 200,
"resourceProgessThickness": 10,
"resourceSize": 200,
"tabIndicatorHeight": 3,
"tabIndicatorSpacing": 5,
"weatherWidth": 250
}
}, },
"display": { "display": {
"nightlight": { "nightlight": {
"fadeDuration": 240000, "fadeDuration": 600000,
"schedule": true, "schedule": true,
"scheduleEnd": 630, "scheduleEnd": 570,
"scheduleStart": 1200, "scheduleStart": 1200,
"temp": 2600, "temp": 2800
"useNative": true
} }
}, },
"dock": { "dock": {
@@ -428,6 +395,9 @@
}, },
"uwsm": true "uwsm": true
}, },
"llm": {
"model": "qwen3.8-flash-next-coder-iq1_m"
},
"lock": { "lock": {
"blurAmount": 0, "blurAmount": 0,
"enableFprint": false, "enableFprint": false,
@@ -520,29 +490,29 @@
"enabled": true, "enabled": true,
"id": "dnd" "id": "dnd"
}, },
{
"enabled": true,
"id": "wifi"
},
{ {
"enabled": true, "enabled": true,
"id": "settings" "id": "settings"
}, },
{ {
"enabled": true, "enabled": true,
"id": "gameMode"
},
{
"enabled": false,
"id": "wifi"
},
{
"enabled": false,
"id": "bluetooth" "id": "bluetooth"
}, },
{ {
"enabled": true, "enabled": false,
"id": "mic" "id": "mic"
}, },
{ {
"enabled": true, "enabled": false,
"id": "audio" "id": "audio"
},
{
"enabled": true,
"id": "gameMode"
} }
], ],
"sizes": { "sizes": {
+1 -1
View File
@@ -1,4 +1,4 @@
export EDITOR=nvim export EDITOR=nvim
export PATH="/home/inorishio/.cargo/bin:/usr/lib/ccache/bin/:$PATH" export PATH="$HOME/.cargo/bin:/usr/lib/ccache/bin/:$PATH"
export ZSH="$HOME/.oh-my-zsh" export ZSH="$HOME/.oh-my-zsh"
export PSModulePath="/home/inorishio/.local/share/nvim/mason/packages/powershell-editor-services:$PSModulePath" export PSModulePath="/home/inorishio/.local/share/nvim/mason/packages/powershell-editor-services:$PSModulePath"
+3
View File
@@ -7,6 +7,7 @@ alias up='yay -Syu --devel --noconfirm'
alias exit='systemctl poweroff' alias exit='systemctl poweroff'
alias reboot='systemctl reboot' alias reboot='systemctl reboot'
alias p='python3' alias p='python3'
alias cat='bat'
# Github # Github
alias gcredential='git config credential.helper store' alias gcredential='git config credential.helper store'
@@ -17,3 +18,5 @@ alias dot='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
alias dotfiles='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' alias dotfiles='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
alias dotto='python3 /home/inorishio/.dotfiles/sync.py' alias dotto='python3 /home/inorishio/.dotfiles/sync.py'
alias dotedit='v /home/inorishio/.dotfiles/sync.py' alias dotedit='v /home/inorishio/.dotfiles/sync.py'
alias controller='/home/inorishio/.config/hypr/scripts/controller.sh'
@@ -0,0 +1,120 @@
#main-window {
--uc-sidebar-width: 34px;
--uc-sidebar-hover-width: 170px;
--uc-transition: 200ms ease-in-out;
--uc-mouseout-delay: 250ms;
}
#TabsToolbar {
display: none;
}
#sidebar-header {
display: none;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-splitter {
display: none !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box {
position: relative;
z-index: 10;
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
overflow: visible !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:not(:hover) #sidebar-header {
overflow: clip !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) .sidebar-browser-stack {
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
overflow: visible !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) :is(.sidebar-browser-stack, #sidebar, #sidebar-header, #sidebar-header #sidebar-switcher-target) {
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
transition:
min-width var(--uc-transition) var(--uc-mouseout-delay),
max-width var(--uc-transition) var(--uc-mouseout-delay),
width var(--uc-transition) var(--uc-mouseout-delay) !important;
will-change: min-width;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>.sidebar-browser-stack,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>.sidebar-browser-stack>#sidebar,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>#sidebar-header,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>#sidebar-header>#sidebar-switcher-target {
transition:
min-width var(--uc-transition),
max-width var(--uc-transition),
width var(--uc-transition) !important;
min-width: var(--uc-sidebar-hover-width) !important;
width: var(--uc-sidebar-hover-width) !important;
max-width: var(--uc-sidebar-hover-width) !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"] {
direction: rtl;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]>* {
direction: ltr;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]:-moz-locale-dir(rtl) {
direction: ltr;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]:-moz-locale-dir(rtl)>* {
direction: rtl;
}
#main-window[sizemode="fullscreen"] #PersonalToolbar {
overflow: hidden !important;
min-height: 0 !important;
max-height: 0 !important;
padding-top: 0 !important;
padding-bottom: 0 !important;
border-top-width: 0 !important;
transition:
min-height var(--uc-transition) var(--uc-mouseout-delay),
max-height var(--uc-transition) var(--uc-mouseout-delay) !important;
will-change: min-height;
}
#main-window[sizemode="fullscreen"] #navigator-toolbox:hover #PersonalToolbar {
min-height: 28px !important;
max-height: 28px !important;
transition:
min-height var(--uc-transition),
max-height var(--uc-transition) !important;
}
#main-window[sizemode="fullscreen"] #PersonalToolbar {
overflow: hidden !important;
min-height: 0 !important;
max-height: 0 !important;
padding-top: 0 !important;
padding-bottom: 0 !important;
border-top-width: 0 !important;
transition:
min-height var(--uc-transition) var(--uc-mouseout-delay),
max-height var(--uc-transition) var(--uc-mouseout-delay) !important;
will-change: min-height;
}
#main-window[sizemode="fullscreen"] #navigator-toolbox:hover #PersonalToolbar {
min-height: 28px !important;
max-height: 28px !important;
transition:
min-height var(--uc-transition),
max-height var(--uc-transition) !important;
}
@@ -0,0 +1,78 @@
#main-window {
--uc-sidebar-width: 34px;
--uc-sidebar-hover-width: 170px;
--uc-transition: 200ms ease-in-out;
--uc-mouseout-delay: 250ms;
}
#TabsToolbar {
display: none;
}
#sidebar-header {
display: none;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-splitter {
display: none !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box {
position: relative;
z-index: 10;
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
overflow: visible !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:not(:hover) #sidebar-header {
overflow: clip !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) .sidebar-browser-stack {
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
overflow: visible !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) :is(.sidebar-browser-stack, #sidebar, #sidebar-header, #sidebar-header #sidebar-switcher-target) {
min-width: var(--uc-sidebar-width) !important;
width: var(--uc-sidebar-width) !important;
max-width: var(--uc-sidebar-width) !important;
transition:
min-width var(--uc-transition) var(--uc-mouseout-delay),
max-width var(--uc-transition) var(--uc-mouseout-delay),
width var(--uc-transition) var(--uc-mouseout-delay) !important;
will-change: min-width;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>.sidebar-browser-stack,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>.sidebar-browser-stack>#sidebar,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>#sidebar-header,
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box:hover>#sidebar-header>#sidebar-switcher-target {
transition:
min-width var(--uc-transition),
max-width var(--uc-transition),
width var(--uc-transition) !important;
min-width: var(--uc-sidebar-hover-width) !important;
width: var(--uc-sidebar-hover-width) !important;
max-width: var(--uc-sidebar-hover-width) !important;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"] {
direction: rtl;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]>* {
direction: ltr;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]:-moz-locale-dir(rtl) {
direction: ltr;
}
#main-window:not([customizing]):has(#sidebar-box[checked="true"] #sidebar-title[value="Sidebery"]) #sidebar-box[positionend="true"]:-moz-locale-dir(rtl)>* {
direction: rtl;
}
+1 -1
View File
@@ -23,7 +23,7 @@ for f in ~/.config/zshrc/*; do
[[ -f $c ]] && source $c || source $f [[ -f $c ]] && source $c || source $f
fi fi
done done
export PATH=/home/inorishio/.local/bin:/usr/lib/ccache/bin/:/usr/lib/ccache/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl export PATH=/home/inorishio/.local/bin:/usr/lib/ccache/bin/:/usr/lib/ccache/bin/:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/inorishio/.cargo/bin
eval "$(zoxide init --cmd cd zsh)" eval "$(zoxide init --cmd cd zsh)"