From 06477003e02588dee79dbd1d1cf305123b945a42 Mon Sep 17 00:00:00 2001 From: Sem Date: Sun, 29 Mar 2026 22:36:31 +0200 Subject: [PATCH] add switching random wallpaper every 60 seconds and base for matugen --- hypr/hyprland.conf | 10 +++--- matugen/config.toml | 46 +++++++++++++-------------- quickshell/RandomWallpaper.qml | 57 ++++++++++++++++++++++++++++++++++ quickshell/shell.qml | 7 +++-- 4 files changed, 88 insertions(+), 32 deletions(-) create mode 100644 quickshell/RandomWallpaper.qml diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf index 9d746eb..4736064 100644 --- a/hypr/hyprland.conf +++ b/hypr/hyprland.conf @@ -41,12 +41,10 @@ $programs = rofi -show drun # exec-once = nm-applet & # exec-once = waybar & hyprpaper & firefox -# authentication -exec-once = /usr/lib/hyprpolkitagent/hyprpolkitagent -# quickshell -exec-once = /usr/bin/qs & -# wallpaper -exec-once = hyprpaper +exec-once = /usr/lib/hyprpolkitagent/hyprpolkitagent # authentication +exec-once = /usr/bin/qs & # quickshell +# exec-once = hyprpaper # wallpaper +exec-once = awww-daemon # wallpaper ############################# ### ENVIRONMENT VARIABLES ### ############################# diff --git a/matugen/config.toml b/matugen/config.toml index 8873e1b..fb20384 100644 --- a/matugen/config.toml +++ b/matugen/config.toml @@ -11,7 +11,7 @@ fallback_color = "#ffbf9b" # Which color to choose if multiple good colors were found from an image. # choices: [darkness, lightness, saturation, less-saturation, value, closest-to-fallback] # The cli flag will override this if used. -prefer = "closest-to-fallback" +prefer = "value" # Enables caching which will cache the colorscheme, custom colors, etc. into a cache folder located in # Windows: C:\Users\user\AppData\Roaming\InioX\matugen\cache\images\ @@ -34,10 +34,10 @@ block_postfix = "*>" # Imports json files just like `--import-json` does. # Relative paths will be resolved from the path `config.toml` is in. -import_json_files = ["./custom3.json"] +# import_json_files = ["./custom3.json"] # Defaults to the contrast from CLI if unspecified. -# Value from -1 to 1. +# Value from -1 to 1. # -1 represents minimum contrast, 0 represents standard (i.e. the design as spec'd), # and 1 represents maximum contrast. contrast = 1.0 @@ -54,6 +54,13 @@ command = "swww img --transition-type center {{ image }}" # For example, killing the wallpaper daemon. Usage is like a normal hook. # pre_hook = "" +# If you don't want to use the other colors that are automatically generated (on_color, on_color_container) you can just import a custom json with the colors instead. +# For an example of importing json see: https://iniox.github.io/#matugen/usage/importing-json +[config.custom_colors] +red = "#ff0000" +blue = "#0000ff" +green = "#00ff00" + [templates.includeme] input_path = "./include.txt" # The output path is optional if you just want to import the template anyways. @@ -84,19 +91,19 @@ type = "SchemeExpressive" # This will compare all of the colors inside the array with the color you set as `compare_to`, and returns the closest color to it. # You can then use `{{closest_color}}` inside hooks. colors_to_compare = [ - { name = "black", color = "#000000" }, - { name = "red", color = "#ff0000" }, - { name = "maroon", color = "#800000" }, - { name = "yellow", color = "#ffff00" }, - { name = "olive", color = "#808000" }, - { name = "lime", color = "#00ff00" }, - { name = "green", color = "#008000" }, - { name = "aqua", color = "#00ffff" }, - { name = "teal", color = "#008080" }, - { name = "blue", color = "#0000ff" }, - { name = "navy", color = "#000080" }, - { name = "fuchsia", color = "#ff00ff" }, - { name = "purple", color = "#800080" }, + { name = "black", color = "#000000" }, + { name = "red", color = "#ff0000" }, + { name = "maroon", color = "#800000" }, + { name = "yellow", color = "#ffff00" }, + { name = "olive", color = "#808000" }, + { name = "lime", color = "#00ff00" }, + { name = "green", color = "#008000" }, + { name = "aqua", color = "#00ffff" }, + { name = "teal", color = "#008080" }, + { name = "blue", color = "#0000ff" }, + { name = "navy", color = "#000080" }, + { name = "fuchsia", color = "#ff00ff" }, + { name = "purple", color = "#800080" }, ] compare_to = "{{colors.primary.default.hex}}" @@ -115,10 +122,3 @@ expr_postfix = "}}" # https://m3.material.io/styles/color/advanced/adjust-existing-colors#1cc12e43-237b-45b9-8fe0-9a3549c1f61e # If you want to use the original color without any harmonization, add `_source` after the name like: `{{ color_source }}` # Example: To use the original red color you would use `{{ red_source }}` instead of `{{ red }}` - -# If you don't want to use the other colors that are automatically generated (on_color, on_color_container) you can just import a custom json with the colors instead. -# For an example of importing json see: https://iniox.github.io/#matugen/usage/importing-json -[config.custom_colors] -red = "#ff0000" -blue = "#0000ff" -green = "#00ff00" \ No newline at end of file diff --git a/quickshell/RandomWallpaper.qml b/quickshell/RandomWallpaper.qml new file mode 100644 index 0000000..62b108b --- /dev/null +++ b/quickshell/RandomWallpaper.qml @@ -0,0 +1,57 @@ +import Quickshell +import Quickshell.Io +import QtQuick + +Item { + id: wallpaperHolder + + // Store all wallpapers + property var wallpapers: [] + property string wallpaperDir: Qt.resolvedUrl("file:///home/sem/Pictures/wallpapers") + + // process to run the command to change the wallpaper + Process { + id: wallpaperProcess + } + + // Load wallpaper list once at startup + Process { + id: loadWallpapers + command: ["bash", "-c", "find ~/Pictures/wallpapers -type f"] + + stdout: StdioCollector { + onStreamFinished: { + console.log("wallpapers loaded!"); + wallpaperHolder.wallpapers = this.text.trim().split("\n"); + wallpaperHolder.setRandomWallpaper(); + } + } + } + + function setRandomWallpaper() { + if (wallpapers.length === 0) { + console.log("No wallpapers found"); + return; + } + + var index = Math.floor(Math.random() * wallpapers.length); + var path = wallpapers[index]; + + console.log("wallpaper set to " + path); + + wallpaperProcess.command = ["awww", "img", path, "--transition-type", "grow", "--transition-fps", "60", "--transition-duration", "0.6"]; + + wallpaperProcess.running = true; + } + + Timer { + interval: 60000 + running: true + repeat: true + onTriggered: wallpaperHolder.setRandomWallpaper() + } + + Component.onCompleted: { + loadWallpapers.running = true; // start loading wallpapers + } +} diff --git a/quickshell/shell.qml b/quickshell/shell.qml index 912a523..dc101f0 100644 --- a/quickshell/shell.qml +++ b/quickshell/shell.qml @@ -5,6 +5,8 @@ import Quickshell.Io import QtQuick import QtQuick.Layouts +import "." + // qmllint disable uncreatable-type PanelWindow { id: root @@ -18,6 +20,8 @@ PanelWindow { property var lastCpuIdle: 0 property var lastCpuTotal: 0 + RandomWallpaper {} + Process { id: cpuProc // get cpu usage, first line of /proc/stat @@ -25,7 +29,6 @@ PanelWindow { stdout: StdioCollector { onStreamFinished: { var line = this.text.split(/\r?\n/)[1].split(" "); - console.log("the line is " + line); var user = parseInt(line[1]); var nice = parseInt(line[2]); @@ -45,8 +48,6 @@ PanelWindow { root.cpuUsage = Math.round(100 * (1 - diffIdle / diffTotal)); } - console.log("diffTotal is " + diffTotal); - root.lastCpuIdle = idleAll; root.lastCpuTotal = total; }