├── .gitignore ├── screenshots ├── blue.png ├── grey.png ├── nord.png ├── tree.png ├── classic.png ├── lightgrey.png ├── rose-pine-moon.png ├── catppuccin-mocha.webp └── classic_nocursor.png ├── where_is_my_sddm_theme ├── screenshot.png ├── example_configs │ ├── tree.png │ ├── classic_nocursor.conf │ ├── blue.conf │ ├── grey.conf │ ├── tree.conf │ ├── lightgrey.conf │ ├── rose-pine-moon.conf │ └── nord.conf ├── metadata.desktop ├── UsersChoose.qml ├── SessionsChoose.qml ├── theme.conf └── Main.qml ├── where_is_my_sddm_theme_qt5 ├── screenshot.png ├── example_configs │ ├── tree.png │ ├── classic_nocursor.conf │ ├── tree.conf │ ├── blue.conf │ ├── grey.conf │ ├── lightgrey.conf │ └── nord.conf ├── metadata.desktop ├── theme.conf ├── UsersChoose.qml ├── SessionsChoose.qml └── Main.qml ├── .github └── FUNDING.yml ├── LICENSE ├── CONTRIBUTE.md ├── install.sh └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Archives with themes 2 | *.tar.gz 3 | *.zip 4 | *.tar 5 | -------------------------------------------------------------------------------- /screenshots/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/blue.png -------------------------------------------------------------------------------- /screenshots/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/grey.png -------------------------------------------------------------------------------- /screenshots/nord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/nord.png -------------------------------------------------------------------------------- /screenshots/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/tree.png -------------------------------------------------------------------------------- /screenshots/classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/classic.png -------------------------------------------------------------------------------- /screenshots/lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/lightgrey.png -------------------------------------------------------------------------------- /screenshots/rose-pine-moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/rose-pine-moon.png -------------------------------------------------------------------------------- /screenshots/catppuccin-mocha.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/catppuccin-mocha.webp -------------------------------------------------------------------------------- /screenshots/classic_nocursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/screenshots/classic_nocursor.png -------------------------------------------------------------------------------- /where_is_my_sddm_theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/where_is_my_sddm_theme/screenshot.png -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/where_is_my_sddm_theme_qt5/screenshot.png -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/where_is_my_sddm_theme/example_configs/tree.png -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stepanzubkov/where-is-my-sddm-theme/HEAD/where_is_my_sddm_theme_qt5/example_configs/tree.png -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/metadata.desktop: -------------------------------------------------------------------------------- 1 | [SddmGreeterTheme] 2 | Name=Where is my SDDM theme? 3 | Description=That feeling when your SDDM theme suddenly disappeared 4 | Screenshot=screenshot.png 5 | Website=https://github.com/stepanzubkov/where-is-my-sddm-theme 6 | Author=stepanzubkov 7 | Copyright=(c) 2023, stepanzubkov 8 | License=MIT 9 | Version=1.11.0 10 | MainScript=Main.qml 11 | ConfigFile=theme.conf 12 | TranslationsDirectory=translations 13 | Theme-Id=where-is-my-sddm-theme 14 | Theme-API=2.2 15 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/metadata.desktop: -------------------------------------------------------------------------------- 1 | [SddmGreeterTheme] 2 | Name=Where is my SDDM theme? 3 | Description=That feeling when your SDDM theme suddenly disappeared 4 | Screenshot=screenshot.png 5 | Website=https://github.com/stepanzubkov/where-is-my-sddm-theme 6 | Author=stepanzubkov 7 | Copyright=(c) 2023, stepanzubkov 8 | License=MIT 9 | Version=1.12.0 10 | MainScript=Main.qml 11 | ConfigFile=theme.conf 12 | TranslationsDirectory=translations 13 | Theme-Id=where-is-my-sddm-theme 14 | Theme-API=2.2 15 | QtVersion=6 16 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | custom: https://www.donationalerts.com/r/stepanzubkov 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Степан Зубков 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/classic_nocursor.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.5 8 | # Background color of password input 9 | passwordInputBackground= 10 | # Radius of password input corners 11 | passwordInputRadius= 12 | # "true" for visible cursor, "false" 13 | passwordInputCursorVisible=false 14 | # Font size of password (in points) 15 | passwordFontSize=96 16 | passwordCursorColor=random 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=48 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#000000 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/classic_nocursor.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.5 8 | # Background color of password input 9 | passwordInputBackground= 10 | # Radius of password input corners 11 | passwordInputRadius= 12 | # "true" for visible cursor, "false" 13 | passwordInputCursorVisible=false 14 | # Font size of password (in points) 15 | passwordFontSize=96 16 | passwordCursorColor=random 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=48 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#000000 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/blue.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.25 8 | # Background color of password input 9 | passwordInputBackground=#7b9fe7 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#ffffff 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#8aadf4 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/grey.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.33 8 | # Background color of password input 9 | passwordInputBackground=#a0a0a0 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#ffffff 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#404040 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/tree.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.25 8 | # Background color of password input 9 | passwordInputBackground=#60ffffff 10 | # Radius of password input corners 11 | passwordInputRadius=10 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=false 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor= 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background=tree.png 31 | # Or use just one color 32 | backgroundFill= 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/tree.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.25 8 | # Background color of password input 9 | passwordInputBackground=#60ffffff 10 | # Radius of password input corners 11 | passwordInputRadius=10 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=false 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor= 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background=tree.png 31 | # Or use just one color 32 | backgroundFill= 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/lightgrey.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.33 8 | # Background color of password input 9 | passwordInputBackground=#a0a0a0 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#000000 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#cccccc 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#000000 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/blue.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.25 8 | # Background color of password input 9 | passwordInputBackground=#7b9fe7 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#ffffff 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#8aadf4 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/grey.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.33 8 | # Background color of password input 9 | passwordInputBackground=#a0a0a0 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#ffffff 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#404040 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#ffffff 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/lightgrey.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.33 8 | # Background color of password input 9 | passwordInputBackground=#a0a0a0 10 | # Radius of password input corners 11 | passwordInputRadius=7 12 | # "true" for visible cursor, "false" for invisible 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=28 16 | passwordCursorColor=#000000 17 | passwordTextColor= 18 | 19 | # Show or not sessions choose label 20 | showSessionsByDefault=false 21 | # Font size of sessions choose label (in points). 22 | sessionsFontSize=24 23 | 24 | # Show or not users choose label 25 | showUsersByDefault=false 26 | # Font size of users choose label (in points) 27 | usersFontSize=32 28 | 29 | # Path to background image 30 | background= 31 | # Or use just one color 32 | backgroundFill=#cccccc 33 | # Fill mode for image background 34 | # Value must be on of: aspect, fill, tile, pad 35 | backgroundFillMode=aspect 36 | 37 | # Default text color for all labels 38 | basicTextColor=#000000 39 | 40 | # Radius of background blur 41 | blurRadius= 42 | -------------------------------------------------------------------------------- /CONTRIBUTE.md: -------------------------------------------------------------------------------- 1 | # How to contribute? 2 | 3 | 1. The easiest one: create theme configuration based on `theme.conf` file. Just edit it and send it via pull request. 4 | 5 | 2. Fixing bugs. If you encountered a bug, send issue. You can also try to fix already encountered bugs. 6 | 7 | 3. Adding new feature. You can add new interesting feature, that will fit in minimalist theme design. 8 | Especially, you can use config file to add more customization for the theme. 9 | 10 | # How to send an issue? 11 | 12 | Issue format is free. Just describe your bug/enhancement in detail, with all necessary information. 13 | 14 | # How to create theme customization? 15 | 16 | 1. Edit `theme.conf` file and move it to `example_configs` directory in theme directory. 17 | 18 | 2. Make screenshot of your customization. Run `sddm-greeter-qt6 --test-mode --theme .` inside theme directory containing your config, 19 | Or run `sddm-greeter --test-mode --theme .` for Qt5. Move this screenshot to `screentshots` directory. 20 | 21 | 3. Add your customization to README file in proper format. 22 | 23 | 4. Create pull request. 24 | 25 | # How to add new configuration field to theme.conf? 26 | 27 | Just add it to main `theme.conf` file in theme directory, then add it to other configurations in `example_configs` directory. 28 | 29 | Follow [this SDDM API](https://github.com/sddm/sddm/wiki/Theming#new-explicitly-typed-api-since-sddm-020) to read this new configuraiton field to QML code. 30 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/theme.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.5 8 | # Background color of password input 9 | passwordInputBackground= 10 | # Radius of password input corners 11 | passwordInputRadius= 12 | # "true" for visible cursor, "false" 13 | passwordInputCursorVisible=true 14 | # Font size of password (in points) 15 | passwordFontSize=96 16 | passwordCursorColor=random 17 | passwordTextColor= 18 | # Allow blank password (e.g., if authentication is done by another PAM module) 19 | passwordAllowEmpty=false 20 | 21 | # Show or not sessions choose label 22 | showSessionsByDefault=false 23 | # Font size of sessions choose label (in points). 24 | sessionsFontSize=24 25 | 26 | # Show or not users choose label 27 | showUsersByDefault=false 28 | # Font size of users choose label (in points) 29 | usersFontSize=48 30 | # Show user real name on label by default 31 | showUserRealNameByDefault=true 32 | 33 | # Path to background image 34 | background= 35 | # Or use just one color 36 | backgroundFill=#000000 37 | # Fill mode for image background 38 | # Value must be on of: aspect, fill, tile, pad 39 | backgroundFillMode=aspect 40 | 41 | # Default text color for all labels 42 | basicTextColor=#ffffff 43 | 44 | # Blur radius for background image 45 | blurRadius=0 46 | 47 | # Hide cursor 48 | hideCursor=false 49 | 50 | # Default font 51 | font=monospace 52 | 53 | # Font of help message 54 | helpFont=monospace 55 | # Font size of help message (in points) 56 | helpFontSize=18 57 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | THEME_SOURCE=https://github.com/stepanzubkov/where-is-my-sddm-theme.git 4 | if [[ -n $USE_QT5 ]]; then 5 | THEME_DIR=where_is_my_sddm_theme_qt5 6 | else 7 | THEME_DIR=where_is_my_sddm_theme 8 | fi 9 | SDDM_THEMES_DIR=/usr/share/sddm/themes/ 10 | SDDM_CONFIG_PATH=/etc/sddm.conf.d/kde_settings.conf:/etc/sddm.conf 11 | 12 | if [[ -z $THEME_SOURCE ]]; then 13 | echo -e "\e[31;02mImproperly configured! THEME_SOURCE should be set!\e[0m" 14 | exit 1 15 | fi 16 | 17 | if [[ -z $THEME_DIR ]]; then 18 | echo -e "\e[31;02mImproperly configured! THEME_DIR should be set!\e[0m" 19 | exit 1 20 | fi 21 | 22 | if [[ ! -d $SDDM_THEMES_DIR ]]; then 23 | echo -e "\e[31;02m$SDDM_THEMES_DIR doesn't exist! Please, create it manually or edit SDDM_THEMES_DIR variable" 24 | exit 1 25 | fi 26 | 27 | git clone $THEME_SOURCE .theme_temp || (echo -e "\e31;02mFailed to fetch git repo at $THEME_SOURCE.\e[0m" && exit 1) 28 | 29 | if [[ ! -d .theme_temp/$THEME_DIR ]]; then 30 | echo -e "\e[31;02m$THEME_DIR is not found at $THEME_SOURCE!\e[0m" 31 | rm -rf .theme_temp 32 | exit 1 33 | fi 34 | 35 | cp -rv .theme_temp/$THEME_DIR $SDDM_THEMES_DIR || (echo -e "\e31;02mFailed to copy theme to $SDDM_THEMES_DIR!\e[0m" && rm -rf .theme_temp && exit 1) 36 | echo -e "\e[32;02mTheme successfully installed!\e[0m" 37 | rm -rf .theme_temp 38 | 39 | if [[ $1 == "current" ]]; then 40 | for file in `echo "$SDDM_CONFIG_PATH" | tr ':' '\n'`; do 41 | if [[ -f $file ]]; then 42 | sed -i "s/Current=.*/Current=$THEME_DIR/" $file || (echo -e "\e[31;02mFailed to edit $file.\e[0m" && exit 1) 43 | exit 0 44 | fi 45 | done 46 | echo -e "\e[33;02mFailed to set theme as current. Try to edit sddm configuration manually.\e[0m" 47 | fi 48 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/UsersChoose.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | 4 | Item { 5 | id: root 6 | property string text: "" 7 | property string prevText: "<" 8 | property string nextText: ">" 9 | property int fontPointSize: usersFontSize 10 | property string fontFamily: defaultFont 11 | signal prevClicked() 12 | signal nextClicked() 13 | Text { 14 | id: username 15 | horizontalAlignment: Text.AlignHCenter 16 | verticalAlignment: Text.AlignVCenter 17 | font.pointSize: root.fontPointSize 18 | font.family: root.fontFamily 19 | color: textColor 20 | text: root.text 21 | anchors { 22 | horizontalCenter: parent.horizontalCenter 23 | verticalCenter: parent.verticalCenter 24 | } 25 | } 26 | Text { 27 | id: prevButton 28 | text: root.prevText 29 | color: textColor 30 | font.pointSize: root.fontPointSize 31 | font.family: root.fontFamily 32 | anchors { 33 | left: parent.left 34 | verticalCenter: parent.verticalCenter 35 | rightMargin: 10 36 | } 37 | MouseArea { 38 | anchors.fill: parent 39 | onClicked: { 40 | root.prevClicked(); 41 | } 42 | } 43 | } 44 | Text { 45 | id: nextButton 46 | text: root.nextText 47 | color: textColor 48 | font.pointSize: root.fontPointSize 49 | font.family: root.fontFamily 50 | anchors { 51 | right: parent.right 52 | verticalCenter: parent.verticalCenter 53 | leftMargin: 10 54 | } 55 | MouseArea { 56 | anchors.fill: parent 57 | onClicked: { 58 | root.nextClicked(); 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/UsersChoose.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | 4 | Item { 5 | id: root 6 | property string text: "" 7 | property string prevText: "<" 8 | property string nextText: ">" 9 | property int fontPointSize: usersFontSize 10 | property string fontFamily: defaultFont 11 | signal prevClicked() 12 | signal nextClicked() 13 | Text { 14 | id: username 15 | horizontalAlignment: Text.AlignHCenter 16 | verticalAlignment: Text.AlignVCenter 17 | font.pointSize: root.fontPointSize 18 | font.family: root.fontFamily 19 | color: textColor 20 | text: root.text 21 | anchors { 22 | horizontalCenter: parent.horizontalCenter 23 | verticalCenter: parent.verticalCenter 24 | } 25 | } 26 | Text { 27 | id: prevButton 28 | text: root.prevText 29 | color: textColor 30 | font.pointSize: root.fontPointSize 31 | font.family: root.fontFamily 32 | anchors { 33 | left: parent.left 34 | verticalCenter: parent.verticalCenter 35 | rightMargin: 10 36 | } 37 | MouseArea { 38 | anchors.fill: parent 39 | onClicked: { 40 | root.prevClicked(); 41 | } 42 | } 43 | } 44 | Text { 45 | id: nextButton 46 | text: root.nextText 47 | color: textColor 48 | font.pointSize: root.fontPointSize 49 | font.family: root.fontFamily 50 | anchors { 51 | right: parent.right 52 | verticalCenter: parent.verticalCenter 53 | leftMargin: 10 54 | } 55 | MouseArea { 56 | anchors.fill: parent 57 | onClicked: { 58 | root.nextClicked(); 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/SessionsChoose.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | 4 | Item { 5 | id: root 6 | property string text: "" 7 | property string prevText: "<" 8 | property string nextText: ">" 9 | property int fontPointSize: sessionsFontSize 10 | property string fontFamily: defaultFont 11 | signal prevClicked() 12 | signal nextClicked() 13 | Text { 14 | id: sessionName 15 | horizontalAlignment: Text.AlignHCenter 16 | verticalAlignment: Text.AlignVCenter 17 | font.pointSize: root.fontPointSize 18 | font.family: root.fontFamily 19 | color: textColor 20 | text: root.text 21 | anchors { 22 | horizontalCenter: parent.horizontalCenter 23 | verticalCenter: parent.verticalCenter 24 | } 25 | } 26 | Text { 27 | id: prevButton 28 | text: root.prevText 29 | color: textColor 30 | font.pointSize: root.fontPointSize 31 | font.family: root.fontFamily 32 | anchors { 33 | left: parent.left 34 | verticalCenter: parent.verticalCenter 35 | rightMargin: 10 36 | } 37 | MouseArea { 38 | anchors.fill: parent 39 | onClicked: { 40 | root.prevClicked(); 41 | } 42 | } 43 | } 44 | Text { 45 | id: nextButton 46 | text: root.nextText 47 | color: textColor 48 | font.pointSize: root.fontPointSize 49 | font.family: root.fontFamily 50 | anchors { 51 | right: parent.right 52 | verticalCenter: parent.verticalCenter 53 | leftMargin: 10 54 | } 55 | MouseArea { 56 | anchors.fill: parent 57 | onClicked: { 58 | root.nextClicked(); 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/SessionsChoose.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | 4 | Item { 5 | id: root 6 | property string text: "" 7 | property string prevText: "<" 8 | property string nextText: ">" 9 | property int fontPointSize: sessionsFontSize 10 | property string fontFamily: defaultFont 11 | signal prevClicked() 12 | signal nextClicked() 13 | Text { 14 | id: sessionName 15 | horizontalAlignment: Text.AlignHCenter 16 | verticalAlignment: Text.AlignVCenter 17 | font.pointSize: root.fontPointSize 18 | font.family: root.fontFamily 19 | color: textColor 20 | text: root.text 21 | anchors { 22 | horizontalCenter: parent.horizontalCenter 23 | verticalCenter: parent.verticalCenter 24 | } 25 | } 26 | Text { 27 | id: prevButton 28 | text: root.prevText 29 | color: textColor 30 | font.pointSize: root.fontPointSize 31 | font.family: root.fontFamily 32 | anchors { 33 | left: parent.left 34 | verticalCenter: parent.verticalCenter 35 | rightMargin: 10 36 | } 37 | MouseArea { 38 | anchors.fill: parent 39 | onClicked: { 40 | root.prevClicked(); 41 | } 42 | } 43 | } 44 | Text { 45 | id: nextButton 46 | text: root.nextText 47 | color: textColor 48 | font.pointSize: root.fontPointSize 49 | font.family: root.fontFamily 50 | anchors { 51 | right: parent.right 52 | verticalCenter: parent.verticalCenter 53 | leftMargin: 10 54 | } 55 | MouseArea { 56 | anchors.fill: parent 57 | onClicked: { 58 | root.nextClicked(); 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/theme.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.5 8 | # Background color of password input 9 | passwordInputBackground= 10 | # Radius of password input corners 11 | passwordInputRadius= 12 | # Width of the border for the password input 13 | passwordInputBorderWidth=0 14 | # Border color for the password input 15 | passwordInputBorderColor= 16 | # "true" for visible cursor, "false" 17 | passwordInputCursorVisible=true 18 | # Font size of password (in points) 19 | passwordFontSize=96 20 | passwordCursorColor=random 21 | passwordTextColor= 22 | # Allow blank password (e.g., if authentication is done by another PAM module) 23 | passwordAllowEmpty=false 24 | 25 | # Radius of the border which is displayed upon wrong authentication attempt 26 | wrongPasswordBorderRadius= 27 | # Color of the border which is displayed upon wrong authentication attempt 28 | wrongPasswordBorderColor= 29 | 30 | # Enable or disable cursor blink animation ("true" or "false") 31 | cursorBlinkAnimation=true 32 | 33 | # Show or not sessions choose label 34 | showSessionsByDefault=false 35 | # Font size of sessions choose label (in points). 36 | sessionsFontSize=24 37 | 38 | # Show or not users choose label 39 | showUsersByDefault=false 40 | # Font size of users choose label (in points) 41 | usersFontSize=48 42 | # Show user real name on label by default 43 | showUserRealNameByDefault=true 44 | 45 | # Path to background image 46 | background= 47 | # Or use just one color 48 | backgroundFill=#000000 49 | # Fill mode for image background 50 | # Value must be on of: aspect, fill, tile, pad 51 | backgroundFillMode=aspect 52 | 53 | # Default text color for all labels 54 | basicTextColor=#ffffff 55 | 56 | # Blur radius for background image 57 | blurRadius=0 58 | 59 | # Hide cursor 60 | hideCursor=false 61 | 62 | # Default font 63 | font=monospace 64 | 65 | # Font of help message 66 | helpFont=monospace 67 | # Font size of help message (in points) 68 | helpFontSize=18 69 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/rose-pine-moon.conf: -------------------------------------------------------------------------------- 1 | [General] 2 | # Password mask character 3 | passwordCharacter=* 4 | # Mask password characters or not ("true" or "false") 5 | passwordMask=true 6 | # value "1" is all display width, "0.5" is a half of display width etc. 7 | passwordInputWidth=0.5 8 | # Background color of password input 9 | passwordInputBackground=#393552 10 | # Radius of password input corners 11 | passwordInputRadius=80 12 | # Width of the border for the password input 13 | passwordInputBorderWidth=4 14 | # Border color for the password input 15 | passwordInputBorderColor=#c4a7e7 16 | # "true" for visible cursor, "false" 17 | passwordInputCursorVisible=false 18 | # Font size of password (in points) 19 | passwordFontSize=96 20 | passwordCursorColor=#2a283e 21 | passwordTextColor=#e0def4 22 | # Allow blank password (e.g., if authentication is done by another PAM module) 23 | passwordAllowEmpty=false 24 | 25 | # Radius of the border which is displayed upon wrong authentication attempt 26 | wrongPasswordBorderRadius=80 27 | # Color of the border which is displayed upon wrong authentication attempt 28 | wrongPasswordBorderColor=#eb6f92 29 | 30 | # Enable or disable cursor blink animation ("true" or "false") 31 | cursorBlinkAnimation=true 32 | 33 | # Show or not sessions choose label 34 | showSessionsByDefault=true 35 | # Font size of sessions choose label (in points). 36 | sessionsFontSize=24 37 | 38 | # Show or not users choose label 39 | showUsersByDefault=false 40 | # Font size of users choose label (in points) 41 | usersFontSize=48 42 | # Show user real name on label by default 43 | showUserRealNameByDefault=true 44 | 45 | # Path to background image 46 | background= 47 | # Or use just one color 48 | backgroundFill=#232136 49 | # Fill mode for image background 50 | # Value must be on of: aspect, fill, tile, pad 51 | backgroundFillMode=aspect 52 | 53 | # Default text color for all labels 54 | basicTextColor=#e0def4 55 | 56 | # Blur radius for background image 57 | blurRadius=0 58 | 59 | # Hide cursor 60 | hideCursor=false 61 | 62 | # Default font 63 | font=CaskaydiaCove Nerd Font Mono 64 | 65 | # Font of help message 66 | helpFont=monospace 67 | # Font size of help message (in points) 68 | helpFontSize=18 69 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/example_configs/nord.conf: -------------------------------------------------------------------------------- 1 | # colors provided here for reference 2 | # source: https://www.nordtheme.com/docs/colors-and-palettes 3 | # nord0=#2e3440 4 | # nord1=#3b4252 5 | # nord2=#434c5e 6 | # nord3=#4c566a 7 | # 8 | # nord4=#d8dee9 9 | # nord5=#e5e9f0 10 | # nord6=#eceff4 11 | # 12 | # nord7=#8fbcbb 13 | # nord8=#88c0d0 14 | # nord9=#81a1c1 15 | # nord10=#5e81ac 16 | # 17 | # nord11=#bf616a 18 | # nord12=#d08770 19 | # nord13=#ebcb8b 20 | # nord14=#a3be8c 21 | # nord15=#b48ead 22 | 23 | [General] 24 | # Password mask character 25 | passwordCharacter=* 26 | # Mask password characters or not ("true" or "false") 27 | passwordMask=true 28 | # value "1" is all display width, "0.5" is a half of display width etc. 29 | passwordInputWidth=0.5 30 | # Background color of password input 31 | # nord2 32 | passwordInputBackground=#434c5e 33 | # Radius of password input corners 34 | passwordInputRadius=40 35 | # Width of the border for the password input 36 | passwordInputBorderWidth=0 37 | # Border color for the password input 38 | passwordInputBorderColor= 39 | # "true" for visible cursor, "false" 40 | passwordInputCursorVisible=true 41 | # Font size of password (in points) 42 | passwordFontSize=64 43 | # nord10 44 | passwordCursorColor=#81a1c1 45 | passwordTextColor= 46 | # Allow blank password (e.g., if authentication is done by another PAM module) 47 | passwordAllowEmpty=false 48 | 49 | # Radius of the border which is displayed upon wrong authentication attempt 50 | wrongPasswordBorderRadius= 51 | # Color of the border which is displayed upon wrong authentication attempt 52 | # nord11 53 | wrongPasswordBorderColor=#bf616a 54 | 55 | # Enable or disable cursor blink animation ("true" or "false") 56 | cursorBlinkAnimation=true 57 | 58 | # Show or not sessions choose label 59 | showSessionsByDefault=false 60 | # Font size of sessions choose label (in points). 61 | sessionsFontSize=24 62 | 63 | # Show or not users choose label 64 | showUsersByDefault=false 65 | # Font size of users choose label (in points) 66 | usersFontSize=48 67 | # Show user real name on label by default 68 | showUserRealNameByDefault=false 69 | 70 | # Path to background image 71 | background= 72 | # Or use just one color 73 | # nord0 74 | backgroundFill=#2e3440 75 | # Fill mode for image background 76 | # Value must be on of: aspect, fill, tile, pad 77 | backgroundFillMode=aspect 78 | 79 | # Default text color for all labels 80 | # nord9 81 | basicTextColor=#81a1c1 82 | 83 | # Blur radius for background image 84 | blurRadius=0 85 | 86 | # Hide cursor 87 | hideCursor=false 88 | 89 | # Default font 90 | font=monospace 91 | 92 | # Font of help message 93 | helpFont=monospace 94 | # Font size of help message (in points) 95 | helpFontSize=18 96 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/example_configs/nord.conf: -------------------------------------------------------------------------------- 1 | # colors provided here for reference 2 | # source: https://www.nordtheme.com/docs/colors-and-palettes 3 | # nord0=#2e3440 4 | # nord1=#3b4252 5 | # nord2=#434c5e 6 | # nord3=#4c566a 7 | # 8 | # nord4=#d8dee9 9 | # nord5=#e5e9f0 10 | # nord6=#eceff4 11 | # 12 | # nord7=#8fbcbb 13 | # nord8=#88c0d0 14 | # nord9=#81a1c1 15 | # nord10=#5e81ac 16 | # 17 | # nord11=#bf616a 18 | # nord12=#d08770 19 | # nord13=#ebcb8b 20 | # nord14=#a3be8c 21 | # nord15=#b48ead 22 | 23 | [General] 24 | # Password mask character 25 | passwordCharacter=* 26 | # Mask password characters or not ("true" or "false") 27 | passwordMask=true 28 | # value "1" is all display width, "0.5" is a half of display width etc. 29 | passwordInputWidth=0.5 30 | # Background color of password input 31 | # nord2 32 | passwordInputBackground=#434c5e 33 | # Radius of password input corners 34 | passwordInputRadius=40 35 | # Width of the border for the password input 36 | passwordInputBorderWidth=0 37 | # Border color for the password input 38 | passwordInputBorderColor= 39 | # "true" for visible cursor, "false" 40 | passwordInputCursorVisible=true 41 | # Font size of password (in points) 42 | passwordFontSize=64 43 | # nord10 44 | passwordCursorColor=#81a1c1 45 | passwordTextColor= 46 | # Allow blank password (e.g., if authentication is done by another PAM module) 47 | passwordAllowEmpty=false 48 | 49 | # Radius of the border which is displayed upon wrong authentication attempt 50 | wrongPasswordBorderRadius= 51 | # Color of the border which is displayed upon wrong authentication attempt 52 | # nord11 53 | wrongPasswordBorderColor=#bf616a 54 | 55 | # Enable or disable cursor blink animation ("true" or "false") 56 | cursorBlinkAnimation=true 57 | 58 | # Show or not sessions choose label 59 | showSessionsByDefault=false 60 | # Font size of sessions choose label (in points). 61 | sessionsFontSize=24 62 | 63 | # Show or not users choose label 64 | showUsersByDefault=false 65 | # Font size of users choose label (in points) 66 | usersFontSize=48 67 | # Show user real name on label by default 68 | showUserRealNameByDefault=false 69 | 70 | # Path to background image 71 | background= 72 | # Or use just one color 73 | # nord0 74 | backgroundFill=#2e3440 75 | # Fill mode for image background 76 | # Value must be on of: aspect, fill, tile, pad 77 | backgroundFillMode=aspect 78 | 79 | # Default text color for all labels 80 | # nord9 81 | basicTextColor=#81a1c1 82 | 83 | # Blur radius for background image 84 | blurRadius=0 85 | 86 | # Hide cursor 87 | hideCursor=false 88 | 89 | # Default font 90 | font=monospace 91 | 92 | # Font of help message 93 | helpFont=monospace 94 | # Font size of help message (in points) 95 | helpFontSize=18 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Where is my SDDM theme? 2 | 3 | *:eyes: That feeling when your SDDM theme suddenly disappeared...* 4 | 5 | The *most minimalistic* and *highly customizable* SDDM theme. Only black screen and password input field. Nothing extra, right? Even when you enter wrong password theme will show only red border around your screen. To login, just type your password and press `` key. 6 | 7 | # Examples of customization 8 | 9 | To install one of these configs, run inside theme directory: 10 | 11 | ```shell 12 | cp theme.conf 13 | ``` 14 | 15 | If config based on image background, also copy image. For example: 16 | 17 | ```shell 18 | cp example_configurations/tree.conf theme.conf 19 | cp example_configurations/tree.png tree.png 20 | ``` 21 | 22 | | | | 23 | | --- |--- | 24 | | Classic (`where_is_my_sddm_theme/theme.conf`) | Classic, no cursor (`where_is_my_sddm_theme/example_configurations/classic_nocursor.conf`) | 25 | | ![screenshot](./where_is_my_sddm_theme/screenshot.png) | ![screenshot](./screenshots/classic_nocursor.png) | 26 | | Grey (`where_is_my_sddm_theme/example_configurations/grey.conf`) | Light grey (`where_is_my_sddm_theme/example_configurations/lightgrey.conf`) | 27 | | ![screenshot](./screenshots/grey.png) | ![screenshot](./screenshots/lightgrey.png) | 28 | | Blue (`where_is_my_sddm_theme/example_configurations/blue.conf`) | Tree (`where_is_my_sddm_theme/example_configurations/tree.conf`) | 29 | | ![screenshot](./screenshots/blue.png) | ![screenshot](./screenshots/tree.png) | 30 | | Catppuccin (`https://github.com/catppuccin/where-is-my-sddm-theme`) | Rose-Pine Moon (`where_is_my_sddm_theme/example_configurations/rose-pine-moon.conf`) | 31 | | ![screenshot](./screenshots/catppuccin-mocha.webp) | ![screenshot](./screenshots/rose-pine-moon.png) | 32 | | Nord (`where_is_my_sddm_theme/example_configurations/nord.conf`) | | 33 | | ![screenshot](./screenshots/nord.png) | | 34 | 35 | If you have created an interesting configuration that might be useful to other people, please **share it via Pull Request!** 36 | 37 | # Keymaps 38 | 39 | `F2` or `Alt+u` - cycle select next user 40 | 41 | `Ctrl+F2` or `Alt+Ctrl+u` - cycle select prev user 42 | 43 | `F3` or `Alt+s` - cycle select next session 44 | 45 | `Ctrl+F3` or `Alt+Ctrl+s` - cycle select prev session 46 | 47 | `F10` - Suspend. 48 | 49 | `F11` - Poweroff. 50 | 51 | `F12` - Reboot. 52 | 53 | `F1` - Show help message. 54 | 55 | # Installation 56 | 57 | ## With script 58 | 59 | This script installs latest theme version from **main branch**. 60 | 61 | This script should be run with **super user privileges** (sudo)! 62 | 63 | To install theme for Qt6, run `sudo ./install.sh` 64 | 65 | To install theme for Qt5, run `sudo USE_QT5=true ./install.sh` 66 | 67 | To install theme as current, run `sudo ./install.sh current` 68 | 69 | ## From KDE store 70 | 71 | You can find product page on [pling](https://www.pling.com/p/2011322/) 72 | 73 | ### On KDE 74 | 75 | 1. Open System settings 76 | 2. Choose Start and finish/Log in (SDDM) 77 | 3. Click on "...", then "Download SDDM theme..." 78 | 4. Search "Where is my sddm theme?" theme 79 | 5. Install 80 | 6. Activate 81 | 82 | ### On other DEs/WMs 83 | 84 | 1. Open [link](https://www.pling.com/p/2011322/) 85 | 2. Click on "Install" 86 | 3. Unzip downloaded archive 87 | 4. Copy given folder to /usr/share/sddm/themes (`sudo cp -r where_is_my_sddm_theme/ /usr/share/sddm/themes`) 88 | 5. Open /etc/sddm.conf 89 | 6. Change line `Current=...` to `Current=where_is_my_sddm_theme` 90 | 91 | ## From source 92 | 93 | 1. Clone repo 94 | 2. [On other DEs/WMs](#on-other-deswms) (steps 4-6) 95 | 96 | # Configuration 97 | 98 | In `theme.conf` file you can find theme configuration. 99 | 100 | Awailable settings: 101 | 102 | `passwordcharacter=*` - Password mask character 103 | 104 | `passwordMask=true` - Mask password characters or not ("true" or "false") 105 | 106 | `passwordInputWidth=0.5` - value "1" is all display width, "0.5" is a half of display width etc. 107 | 108 | `passwordInputBackground=` - Background color of password input 109 | 110 | `passwordInputRadius=` - Radius of password input corners 111 | 112 | `passwordInputCursorVisible=true` - "true" for visible cursor, "false" 113 | 114 | `passwordFontSize=96` - Font size of password (in points) 115 | 116 | `passwordCursorColor=random` - Color of password input cursor 117 | 118 | `passwordTextColor=` - Color of password input text 119 | 120 | `passwordAllowEmpty=false` - Allow blank password (e.g., if authentication is done by another PAM module) 121 | 122 | `showSessionsByDefault=false` - Show or not sessions choose label 123 | 124 | `sessionsFontSize=24` - Font size of sessions choose label (in points). 125 | 126 | `showUsersByDefault=false` - Show or not users choose label 127 | 128 | `showUserRealNameByDefault=true` - Show user real name on label by default 129 | 130 | `usersFontSize=48` - Font size of users choose label (in points) 131 | 132 | `background=` - Path to background image 133 | 134 | `backgroundFill=#000000` - Background solid color, if you don't use background image 135 | 136 | `backgroundFillMode=aspect` - Qt fill mode for background image. Must be one of: `aspect`, `fill`, `tile`, `pad` 137 | 138 | `basicTextColor=#ffffff` - Default text color for all labels 139 | 140 | `blurRadius=` - Radius for background blur. A larger radius increases the blur effect. 141 | 142 | `hideCursor=` - Set to `true` to hide mouse cursor. 143 | 144 | `cursorBlinkAnimation=true` - Enable or disable cursor blink animation ("true" or "false") **This option works only in Qt6**. 145 | 146 | `font=monospace` - Default font 147 | 148 | `helpFont=monospace` - Font of help message 149 | 150 | `helpFontSize=18` - Font size of help message (in points) 151 | 152 | ## Disable virtual keyboard 153 | 154 | You can disable virtual keyboard by setting line `InputMethod=qtvirtualkeyboard` 155 | to `InputMethod=` in sddm config file. SDDM config is located in `/etc/sddm.conf` 156 | (or `/etc/sddm.conf.d/kde_settings.conf`) 157 | 158 | # Contributions 159 | 160 | Contributions are welcome! Create Issues and PRs. See `CONTRIBUTE.md`. 161 | 162 | [![Stargazers repo roster for @stepanzubkov/where-is-my-sddm-theme](https://reporoster.com/stars/stepanzubkov/where-is-my-sddm-theme)](https://github.com/stepanzubkov/where-is-my-sddm-theme/stargazers) 163 | 164 | [![Forkers repo roster for @stepanzubkov/where-is-my-sddm-theme](https://reporoster.com/forks/stepanzubkov/where-is-my-sddm-theme)](https://github.com/stepanzubkov/where-is-my-sddm-theme/network/members) 165 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme_qt5/Main.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | import QtGraphicalEffects 1.12 4 | import SddmComponents 2.0 5 | 6 | 7 | Rectangle { 8 | id: root 9 | width: 640 10 | height: 480 11 | 12 | readonly property color textColor: config.basicTextColor || "#ffffff" 13 | property int currentUsersIndex: userModel.lastIndex 14 | property int currentSessionsIndex: sessionModel.lastIndex 15 | property int usernameRole: Qt.UserRole + 1 16 | property int realNameRole: Qt.UserRole + 2 17 | property int sessionNameRole: Qt.UserRole + 4 18 | property string currentUsername: (config.showUserRealNameByDefault=="true" && userModel.data(userModel.index(currentUsersIndex, 0), realNameRole)) || 19 | userModel.data(userModel.index(currentUsersIndex, 0), usernameRole) 20 | property string currentSession: sessionModel.data(sessionModel.index(currentSessionsIndex, 0), sessionNameRole) 21 | property string passwordFontSize: config.passwordFontSize || 96 22 | property string usersFontSize: config.usersFontSize || 48 23 | property string sessionsFontSize: config.sessionsFontSize || 24 24 | property string helpFontSize: config.intValue("helpFontSize") || 18 25 | property string defaultFont: config.stringValue("font") || "monospace" 26 | property string helpFont: config.stringValue("helpFont") || defaultFont 27 | 28 | 29 | function usersCycleSelectPrev() { 30 | if (currentUsersIndex - 1 < 0) { 31 | currentUsersIndex = userModel.count - 1; 32 | } else { 33 | currentUsersIndex--; 34 | } 35 | } 36 | 37 | function usersCycleSelectNext() { 38 | if (currentUsersIndex >= userModel.count - 1) { 39 | currentUsersIndex = 0; 40 | } else { 41 | currentUsersIndex++; 42 | } 43 | } 44 | 45 | function bgFillMode() { 46 | switch(config.stringValue("backgroundFillMode")) 47 | { 48 | case "aspect": 49 | return Image.PreserveAspectCrop; 50 | 51 | case "fill": 52 | return Image.Stretch; 53 | 54 | case "tile": 55 | return Image.Tile; 56 | 57 | case "pad": 58 | return Image.Pad; 59 | 60 | default: 61 | return Image.Pad; 62 | } 63 | } 64 | 65 | function sessionsCycleSelectPrev() { 66 | if (currentSessionsIndex - 1 < 0) { 67 | currentSessionsIndex = sessionModel.rowCount() - 1; 68 | } else { 69 | currentSessionsIndex--; 70 | } 71 | } 72 | 73 | function sessionsCycleSelectNext() { 74 | if (currentSessionsIndex >= sessionModel.rowCount() - 1) { 75 | currentSessionsIndex = 0; 76 | } else { 77 | currentSessionsIndex++; 78 | } 79 | } 80 | 81 | 82 | Connections { 83 | target: sddm 84 | function onLoginFailed() { 85 | backgroundBorder.border.width = 5; 86 | animateBorder.restart(); 87 | passwordInput.clear(); 88 | } 89 | function onLoginSucceeded() { 90 | backgroundBorder.border.width = 0; 91 | animateBorder.stop(); 92 | } 93 | } 94 | 95 | Item { 96 | id: mainFrame 97 | property variant geometry: screenModel.geometry(screenModel.primary) 98 | x: geometry.x 99 | y: geometry.y 100 | width: geometry.width 101 | height: geometry.height 102 | Shortcut { 103 | sequences: ["Alt+U", "F2"] 104 | onActivated: { 105 | if (!username.visible) { 106 | username.visible = true; 107 | return; 108 | } 109 | usersCycleSelectNext(); 110 | } 111 | } 112 | Shortcut { 113 | sequences: ["Alt+Ctrl+S", "Ctrl+F3"] 114 | onActivated: { 115 | if (!sessionName.visible) { 116 | sessionName.visible = true; 117 | return; 118 | } 119 | sessionsCycleSelectPrev(); 120 | } 121 | } 122 | 123 | Shortcut { 124 | sequences: ["Alt+S", "F3"] 125 | onActivated: { 126 | if (!sessionName.visible) { 127 | sessionName.visible = true; 128 | return; 129 | } 130 | sessionsCycleSelectNext(); 131 | } 132 | } 133 | Shortcut { 134 | sequences: ["Alt+Ctrl+U", "Ctrl+F2"] 135 | onActivated: { 136 | if (!username.visible) { 137 | username.visible = true; 138 | return; 139 | } 140 | usersCycleSelectPrev(); 141 | } 142 | } 143 | 144 | Shortcut { 145 | sequence: "F10" 146 | onActivated: { 147 | if (sddm.canSuspend) { 148 | sddm.suspend(); 149 | } 150 | } 151 | } 152 | Shortcut { 153 | sequence: "F11" 154 | onActivated: { 155 | if (sddm.canPowerOff) { 156 | sddm.powerOff(); 157 | } 158 | } 159 | } 160 | Shortcut { 161 | sequence: "F12" 162 | onActivated: { 163 | if (sddm.canReboot) { 164 | sddm.reboot(); 165 | } 166 | } 167 | } 168 | 169 | Shortcut { 170 | sequence: "F1" 171 | onActivated: { 172 | helpMessage.visible = !helpMessage.visible 173 | } 174 | } 175 | 176 | 177 | Rectangle { 178 | id: background 179 | visible: true 180 | anchors.fill: parent 181 | color: config.backgroundFill || "transparent" 182 | Image { 183 | id: image 184 | anchors.fill: parent 185 | source: config.background 186 | smooth: true 187 | fillMode: bgFillMode() 188 | z: 2 189 | } 190 | 191 | Rectangle { 192 | id: backgroundBorder 193 | anchors.fill: parent 194 | z: 4 195 | border.color: "#ff3117" 196 | border.width: 0 197 | color: "transparent" 198 | Behavior on border.width { 199 | SequentialAnimation { 200 | id: animateBorder 201 | running: false 202 | loops: Animation.Infinite 203 | NumberAnimation { from: 5; to: 10; duration: 700 } 204 | NumberAnimation { from: 10; to: 5; duration: 400 } 205 | } 206 | } 207 | } 208 | 209 | FastBlur { 210 | id: fastBlur 211 | z: 3 212 | anchors.fill: image 213 | source: image 214 | radius: +config.blurRadius || 0 215 | } 216 | 217 | } 218 | 219 | TextInput { 220 | id: passwordInput 221 | width: parent.width*(config.passwordInputWidth || 0.5) 222 | height: 200/96*passwordFontSize 223 | font.pointSize: passwordFontSize 224 | font.bold: true 225 | font.letterSpacing: 20/96*passwordFontSize 226 | font.family: defaultFont 227 | anchors { 228 | verticalCenter: parent.verticalCenter 229 | horizontalCenter: parent.horizontalCenter 230 | } 231 | echoMode: config.passwordMask == "true" ? TextInput.Password : null 232 | color: config.passwordTextColor || textColor 233 | selectionColor: textColor 234 | selectedTextColor: "#000000" 235 | clip: true 236 | horizontalAlignment: TextInput.AlignHCenter 237 | verticalAlignment: TextInput.AlignVCenter 238 | passwordCharacter: config.passwordCharacter || "*" 239 | cursorVisible: config.passwordInputCursorVisible == "true" ? true : false 240 | onAccepted: { 241 | if (text != "" || config.passwordAllowEmpty == "true") { 242 | sddm.login(userModel.data(userModel.index(currentUsersIndex, 0), usernameRole) 243 | || "123test", text, currentSessionsIndex); 244 | } 245 | } 246 | Rectangle { 247 | z: -1 248 | anchors.fill: parent 249 | color: config.passwordInputBackground || "transparent" 250 | radius: config.passwordInputRadius || 10 251 | } 252 | cursorDelegate: Rectangle { 253 | id: passwordInputCursor 254 | width: 18/96*passwordFontSize 255 | visible: config.passwordInputCursorVisible == "true" ? true : false 256 | onHeightChanged: height = passwordInput.height/2 257 | anchors.verticalCenter: parent.verticalCenter 258 | color: (() => { 259 | if (config.passwordCursorColor.length == 7 && config.passwordCursorColor[0] == "#") { 260 | return config.passwordCursorColor; 261 | } else if (config.passwordCursorColor == "constantRandom") { 262 | return generateRandomColor(); 263 | } else { 264 | return textColor 265 | } 266 | })() 267 | 268 | function generateRandomColor() { 269 | var color = "#"; 270 | for (var i = 0; i<3; i++) { 271 | var color_number = parseInt(Math.random()*255); 272 | var hex_color = color_number.toString(16); 273 | if (color_number < 16) { 274 | hex_color = "0" + hex_color; 275 | } 276 | color += hex_color; 277 | } 278 | return color; 279 | } 280 | Connections { 281 | target: passwordInput 282 | function onTextEdited() { 283 | if (config.passwordCursorColor == "random") { 284 | passwordInputCursor.color = generateRandomColor(); 285 | } 286 | } 287 | } 288 | } 289 | } 290 | UsersChoose { 291 | id: username 292 | text: currentUsername 293 | visible: config.showUsersByDefault == "true" ? true : false 294 | width: mainFrame.width/2.5/48*usersFontSize 295 | anchors { 296 | horizontalCenter: parent.horizontalCenter 297 | bottom: passwordInput.top 298 | bottomMargin: 40 299 | } 300 | onPrevClicked: { 301 | usersCycleSelectPrev(); 302 | } 303 | onNextClicked: { 304 | usersCycleSelectNext(); 305 | } 306 | } 307 | 308 | SessionsChoose { 309 | id: sessionName 310 | text: currentSession 311 | visible: config.showSessionsByDefault == "true" ? true : false 312 | width: mainFrame.width/2.5/24*sessionsFontSize 313 | anchors { 314 | horizontalCenter: parent.horizontalCenter 315 | bottom: parent.bottom 316 | bottomMargin: 30 317 | } 318 | onPrevClicked: { 319 | sessionsCycleSelectPrev(); 320 | } 321 | onNextClicked: { 322 | sessionsCycleSelectNext(); 323 | } 324 | } 325 | 326 | Text { 327 | id: helpMessage 328 | visible: false 329 | text: "Show help - F1\n" + 330 | "Cycle select next user - F2 or Alt+u\n" + 331 | "Cycle select previous user - Ctrl+F2 or Alt+Ctrl+u\n" + 332 | "Cycle select next session - F3 or Alt+s\n" + 333 | "Cycle select previous session - Ctrl+F3 or Alt+Ctrl+s\n" + 334 | "Suspend - F10\n" + 335 | "Poweroff - F11\n" + 336 | "Reboot - F12" 337 | color: textColor 338 | font.pointSize: helpFontSize 339 | font.family: helpFont 340 | anchors { 341 | top: parent.top 342 | topMargin: 30 343 | left: parent.left 344 | leftMargin: 30 345 | } 346 | } 347 | 348 | Component.onCompleted: { 349 | passwordInput.forceActiveFocus(); 350 | } 351 | 352 | } 353 | 354 | Loader { 355 | active: config.boolValue("hideCursor") || false 356 | anchors.fill: parent 357 | sourceComponent: MouseArea { 358 | enabled: false 359 | cursorShape: Qt.BlankCursor 360 | } 361 | } 362 | } 363 | 364 | -------------------------------------------------------------------------------- /where_is_my_sddm_theme/Main.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.15 2 | import QtQuick.Controls 2.0 3 | import SddmComponents 2.0 4 | 5 | import Qt5Compat.GraphicalEffects 6 | 7 | Rectangle { 8 | id: root 9 | width: 640 10 | height: 480 11 | 12 | readonly property color textColor: config.stringValue("basicTextColor") 13 | property int currentUsersIndex: userModel.lastIndex 14 | property int currentSessionsIndex: sessionModel.lastIndex 15 | property int usernameRole: Qt.UserRole + 1 16 | property int realNameRole: Qt.UserRole + 2 17 | property int sessionNameRole: Qt.UserRole + 4 18 | property string currentUsername: config.boolValue("showUserRealNameByDefault") ? 19 | userModel.data(userModel.index(currentUsersIndex, 0), realNameRole) 20 | : userModel.data(userModel.index(currentUsersIndex, 0), usernameRole) 21 | property string currentSession: sessionModel.data(sessionModel.index(currentSessionsIndex, 0), sessionNameRole) 22 | property string passwordFontSize: config.intValue("passwordFontSize") || 96 23 | property string usersFontSize: config.intValue("usersFontSize") || 48 24 | property string sessionsFontSize: config.intValue("sessionsFontSize") || 24 25 | property string helpFontSize: config.intValue("helpFontSize") || 18 26 | property string defaultFont: config.stringValue("font") || "monospace" 27 | property string helpFont: config.stringValue("helpFont") || defaultFont 28 | 29 | 30 | function usersCycleSelectPrev() { 31 | if (currentUsersIndex - 1 < 0) { 32 | currentUsersIndex = userModel.count - 1; 33 | } else { 34 | currentUsersIndex--; 35 | } 36 | } 37 | 38 | function usersCycleSelectNext() { 39 | if (currentUsersIndex >= userModel.count - 1) { 40 | currentUsersIndex = 0; 41 | } else { 42 | currentUsersIndex++; 43 | } 44 | } 45 | 46 | function bgFillMode() { 47 | switch(config.stringValue("backgroundFillMode")) 48 | { 49 | case "aspect": 50 | return Image.PreserveAspectCrop; 51 | 52 | case "fill": 53 | return Image.Stretch; 54 | 55 | case "tile": 56 | return Image.Tile; 57 | 58 | case "pad": 59 | return Image.Pad 60 | 61 | default: 62 | return Image.Pad; 63 | } 64 | } 65 | 66 | function sessionsCycleSelectPrev() { 67 | if (currentSessionsIndex - 1 < 0) { 68 | currentSessionsIndex = sessionModel.rowCount() - 1; 69 | } else { 70 | currentSessionsIndex--; 71 | } 72 | } 73 | 74 | function sessionsCycleSelectNext() { 75 | if (currentSessionsIndex >= sessionModel.rowCount() - 1) { 76 | currentSessionsIndex = 0; 77 | } else { 78 | currentSessionsIndex++; 79 | } 80 | } 81 | 82 | 83 | Connections { 84 | target: sddm 85 | function onLoginFailed() { 86 | backgroundBorder.border.width = 5; 87 | animateBorder.restart(); 88 | passwordInput.clear(); 89 | } 90 | function onLoginSucceeded() { 91 | backgroundBorder.border.width = 0; 92 | animateBorder.stop(); 93 | } 94 | } 95 | 96 | Item { 97 | id: mainFrame 98 | property variant geometry: screenModel.geometry(screenModel.primary) 99 | x: geometry.x 100 | y: geometry.y 101 | width: geometry.width 102 | height: geometry.height 103 | Shortcut { 104 | sequences: ["Alt+U", "F2"] 105 | onActivated: { 106 | if (!username.visible) { 107 | username.visible = true; 108 | return; 109 | } 110 | usersCycleSelectNext(); 111 | } 112 | } 113 | Shortcut { 114 | sequences: ["Alt+Ctrl+S", "Ctrl+F3"] 115 | onActivated: { 116 | if (!sessionName.visible) { 117 | sessionName.visible = true; 118 | return; 119 | } 120 | sessionsCycleSelectPrev(); 121 | } 122 | } 123 | 124 | Shortcut { 125 | sequences: ["Alt+S", "F3"] 126 | onActivated: { 127 | if (!sessionName.visible) { 128 | sessionName.visible = true; 129 | return; 130 | } 131 | sessionsCycleSelectNext(); 132 | } 133 | } 134 | Shortcut { 135 | sequences: ["Alt+Ctrl+U", "Ctrl+F2"] 136 | onActivated: { 137 | if (!username.visible) { 138 | username.visible = true; 139 | return; 140 | } 141 | usersCycleSelectPrev(); 142 | } 143 | } 144 | 145 | Shortcut { 146 | sequence: "F10" 147 | onActivated: { 148 | if (sddm.canSuspend) { 149 | sddm.suspend(); 150 | } 151 | } 152 | } 153 | Shortcut { 154 | sequence: "F11" 155 | onActivated: { 156 | if (sddm.canPowerOff) { 157 | sddm.powerOff(); 158 | } 159 | } 160 | } 161 | Shortcut { 162 | sequence: "F12" 163 | onActivated: { 164 | if (sddm.canReboot) { 165 | sddm.reboot(); 166 | } 167 | } 168 | } 169 | 170 | Shortcut { 171 | sequence: "F1" 172 | onActivated: { 173 | helpMessage.visible = !helpMessage.visible 174 | } 175 | } 176 | 177 | 178 | Rectangle { 179 | id: background 180 | visible: true 181 | anchors.fill: parent 182 | color: config.stringValue("backgroundFill") || "transparent" 183 | Image { 184 | id: image 185 | anchors.fill: parent 186 | source: config.stringValue("background") 187 | smooth: true 188 | fillMode: bgFillMode() 189 | z: 2 190 | } 191 | 192 | Rectangle { 193 | id: backgroundBorder 194 | anchors.fill: parent 195 | z: 4 196 | radius: config.stringValue("wrongPasswordBorderRadius") || 0 197 | border.color: config.stringValue("wrongPasswordBorderColor") || "#ff3117" 198 | border.width: 0 199 | color: "transparent" 200 | Behavior on border.width { 201 | SequentialAnimation { 202 | id: animateBorder 203 | running: false 204 | loops: Animation.Infinite 205 | NumberAnimation { from: 5; to: 10; duration: 700 } 206 | NumberAnimation { from: 10; to: 5; duration: 400 } 207 | } 208 | } 209 | } 210 | 211 | FastBlur { 212 | id: fastBlur 213 | z: 3 214 | anchors.fill: image 215 | source: image 216 | radius: config.intValue("blurRadius") 217 | } 218 | 219 | } 220 | 221 | TextInput { 222 | id: passwordInput 223 | width: parent.width*(config.realValue("passwordInputWidth") || 0.5) 224 | height: 200/96*passwordFontSize 225 | font.pointSize: passwordFontSize 226 | font.bold: true 227 | font.letterSpacing: 20/96*passwordFontSize 228 | font.family: defaultFont 229 | anchors { 230 | verticalCenter: parent.verticalCenter 231 | horizontalCenter: parent.horizontalCenter 232 | } 233 | echoMode: config.boolValue("passwordMask") ? TextInput.Password : null 234 | color: config.stringValue("passwordTextColor") || textColor 235 | selectionColor: textColor 236 | selectedTextColor: "#000000" 237 | clip: true 238 | horizontalAlignment: TextInput.AlignHCenter 239 | verticalAlignment: TextInput.AlignVCenter 240 | passwordCharacter: config.stringValue("passwordCharacter") || "*" 241 | cursorVisible: config.boolValue("passwordInputCursorVisible") 242 | onAccepted: { 243 | if (text != "" || config.boolValue("passwordAllowEmpty")) { 244 | sddm.login(userModel.data(userModel.index(currentUsersIndex, 0), usernameRole) 245 | || "123test", text, currentSessionsIndex); 246 | } 247 | } 248 | Rectangle { 249 | z: -1 250 | anchors.fill: parent 251 | color: config.stringValue("passwordInputBackground") || "transparent" 252 | radius: config.intValue("passwordInputRadius") || 10 253 | border.width: config.intValue("passwordInputBorderWidth") || 0 254 | border.color: config.stringValue("passwordInputBorderColor") || "#ffffff" 255 | } 256 | cursorDelegate: Rectangle { 257 | function getCursorColor() { 258 | if (config.stringValue("passwordCursorColor").length == 7 && config.stringValue("passwordCursorColor")[0] == "#") { 259 | return config.stringValue("passwordCursorColor"); 260 | } else if (config.stringValue("passwordCursorColor") == "constantRandom" || 261 | config.stringValue("passwordCursorColor") == "random") { 262 | return generateRandomColor(); 263 | } else { 264 | return textColor 265 | } 266 | } 267 | id: passwordInputCursor 268 | width: 18/96*passwordFontSize 269 | visible: config.boolValue("passwordInputCursorVisible") 270 | onHeightChanged: height = passwordInput.height/2 271 | anchors.verticalCenter: parent.verticalCenter 272 | color: getCursorColor() 273 | property color currentColor: color 274 | 275 | SequentialAnimation on color { 276 | loops: Animation.Infinite 277 | PauseAnimation { duration: 100 } 278 | ColorAnimation { from: currentColor; to: "transparent"; duration: 0 } 279 | PauseAnimation { duration: 500 } 280 | ColorAnimation { from: "transparent"; to: currentColor; duration: 0 } 281 | PauseAnimation { duration: 400 } 282 | running: config.boolValue("cursorBlinkAnimation") 283 | } 284 | 285 | function generateRandomColor() { 286 | var color_ = "#"; 287 | for (var i = 0; i<3; i++) { 288 | var color_number = parseInt(Math.random()*255); 289 | var hex_color = color_number.toString(16); 290 | if (color_number < 16) { 291 | hex_color = "0" + hex_color; 292 | } 293 | color_ += hex_color; 294 | } 295 | return color_; 296 | } 297 | Connections { 298 | target: passwordInput 299 | function onTextEdited() { 300 | if (config.stringValue("passwordCursorColor") == "random") { 301 | passwordInputCursor.currentColor = generateRandomColor(); 302 | } 303 | } 304 | } 305 | } 306 | } 307 | UsersChoose { 308 | id: username 309 | text: currentUsername 310 | visible: config.boolValue("showUsersByDefault") 311 | width: mainFrame.width/2.5/48*usersFontSize 312 | anchors { 313 | horizontalCenter: parent.horizontalCenter 314 | bottom: passwordInput.top 315 | bottomMargin: 40 316 | } 317 | onPrevClicked: { 318 | usersCycleSelectPrev(); 319 | } 320 | onNextClicked: { 321 | usersCycleSelectNext(); 322 | } 323 | } 324 | 325 | SessionsChoose { 326 | id: sessionName 327 | text: currentSession 328 | visible: config.boolValue("showSessionsByDefault") 329 | width: mainFrame.width/2.5/24*sessionsFontSize 330 | anchors { 331 | horizontalCenter: parent.horizontalCenter 332 | bottom: parent.bottom 333 | bottomMargin: 30 334 | } 335 | onPrevClicked: { 336 | sessionsCycleSelectPrev(); 337 | } 338 | onNextClicked: { 339 | sessionsCycleSelectNext(); 340 | } 341 | } 342 | 343 | Text { 344 | id: helpMessage 345 | visible: false 346 | text: "Show help - F1\n" + 347 | "Cycle select next user - F2 or Alt+u\n" + 348 | "Cycle select previous user - Ctrl+F2 or Alt+Ctrl+u\n" + 349 | "Cycle select next session - F3 or Alt+s\n" + 350 | "Cycle select previous session - Ctrl+F3 or Alt+Ctrl+s\n" + 351 | "Suspend - F10\n" + 352 | "Poweroff - F11\n" + 353 | "Reboot - F12" 354 | color: textColor 355 | font.pointSize: helpFontSize 356 | font.family: helpFont 357 | anchors { 358 | top: parent.top 359 | topMargin: 30 360 | left: parent.left 361 | leftMargin: 30 362 | } 363 | } 364 | 365 | Component.onCompleted: { 366 | passwordInput.forceActiveFocus(); 367 | } 368 | 369 | } 370 | 371 | Loader { 372 | active: config.boolValue("hideCursor") || false 373 | anchors.fill: parent 374 | sourceComponent: MouseArea { 375 | enabled: false 376 | cursorShape: Qt.BlankCursor 377 | } 378 | } 379 | } 380 | --------------------------------------------------------------------------------