Compare commits
18 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
0548409184 |
|||
|
e717e15f9e |
|||
|
81038ba96d |
|||
|
aa10117aef |
|||
|
3e3f4445a4 |
|||
|
f8b846018b |
|||
|
34ddaa1802 |
|||
|
45a3da8a00 |
|||
|
71325c5ffc |
|||
|
7320d1ea6b |
|||
|
540156b7d9 |
|||
|
9de5f7bab9 |
|||
|
b640603c1e |
|||
| 8c0bc5c710 | |||
|
7dffb515a6 |
|||
|
d11d8c7f87 |
|||
|
70fe7c72ce |
|||
|
0157a6a002 |
13 changed files with 220 additions and 15 deletions
1
.fpm
1
.fpm
|
|
@ -3,4 +3,5 @@
|
|||
--license agpl3
|
||||
--description "Wallpaper manager for i3"
|
||||
--url "https://gitnet.fr/deblan/i3-wallpaper-manager"
|
||||
--deb-recommends "feh"
|
||||
--maintainer "Simon Vieille <contact+i3wallpapermanager@deblan.fr>"
|
||||
|
|
|
|||
34
.gitea/issue_template/FEATURE_TEMPLATE.yml
Normal file
34
.gitea/issue_template/FEATURE_TEMPLATE.yml
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
name: New feature
|
||||
about: Use this template if you want to request a feature
|
||||
title: "[FEATURE] "
|
||||
labels:
|
||||
- Kind/Enhancement
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this feature request!
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: Describe the feature.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: benefits
|
||||
attributes:
|
||||
label: Benefits
|
||||
description: Describe the benefits of this feature.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: extra
|
||||
attributes:
|
||||
label: More informations
|
||||
description: If you want to share more things, this is here!
|
||||
validations:
|
||||
required: false
|
||||
63
.gitea/issue_template/ISSUE_TEMPLATE.yml
Normal file
63
.gitea/issue_template/ISSUE_TEMPLATE.yml
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
name: New issue
|
||||
about: Use this template if you have a bug
|
||||
title: "[Bug] "
|
||||
labels:
|
||||
- Kind/Bug
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Environment
|
||||
value: |
|
||||
* i3 wallpaper manager version:
|
||||
* i3-wm version:
|
||||
* Operating system and version:
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: configuration
|
||||
attributes:
|
||||
label: Configuration
|
||||
value: |
|
||||
```
|
||||
```
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: How reproduce the bug?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: resuts
|
||||
attributes:
|
||||
label: Observed Results
|
||||
description: What happened?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Results
|
||||
description: What should happen?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: extra
|
||||
attributes:
|
||||
label: More informations
|
||||
description: If you want to share more things, this is here!
|
||||
validations:
|
||||
required: false
|
||||
26
.gitea/issue_template/QUESTION_TEMPLATE.yml
Normal file
26
.gitea/issue_template/QUESTION_TEMPLATE.yml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
name: New question
|
||||
about: Use this template when you don't know how to do something
|
||||
title: "[Question] "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill information.
|
||||
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: Environment
|
||||
value: |
|
||||
* i3 wallpaper manager version:
|
||||
* i3-wm version:
|
||||
* Operating system and version:
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: question
|
||||
attributes:
|
||||
label: Question
|
||||
validations:
|
||||
required: true
|
||||
8
.gitea/issue_template/config.yml
Normal file
8
.gitea/issue_template/config.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Documentation
|
||||
url: https://gitnet.fr/deblan/i3-wallpaper-manager
|
||||
about: Official documentation web site
|
||||
- name: Ask a question in our Matrix room
|
||||
about: If you prefer a chat-like conversation or in need for quick help, this might be an alternative to opening an issue.
|
||||
url: https://matrix.to/#/!QDcaVhvLZlhptPkGVi:neutralnetwork.org?via=neutralnetwork.org
|
||||
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -1,5 +1,15 @@
|
|||
[Unreleased]
|
||||
|
||||
## v1.2.1
|
||||
### Added
|
||||
- Add debian packaging deb-recommends
|
||||
### Fixed
|
||||
- Fix #1: add cache of latest command to not run wallpaper update when it's already up to date
|
||||
|
||||
## v1.2.0
|
||||
### Added
|
||||
- Add `callback` option
|
||||
|
||||
## v1.1.1
|
||||
### Fixed
|
||||
- Update wallpapers on start
|
||||
|
|
|
|||
32
README.md
32
README.md
|
|
@ -1,14 +1,16 @@
|
|||
# 🖥️ i3 wallpaper manager
|
||||
# 🖥️ i3 Wallpaper Manager
|
||||
|
||||
**i3 wallpaper manager** is a command-line tool designed to change the wallpaper depending of active workspaces on [i3](https://i3wm.org/).
|
||||
**i3 Wallpaper Manager** is a command-line tool designed to change the wallpaper depending of active workspaces on [i3](https://i3wm.org/). This tool works on one or multiple screens.
|
||||
|
||||
<video controls src="https://deblan.gitnet.page/i3-wallpaper-manager/demo.webm" type="video/webm" width="50%"></video>
|
||||
|
||||
_Thanks [AZProductions](https://github.com/AZProductions/AbstractCollection/)!_
|
||||
|
||||
## 📗 How to install the project
|
||||
|
||||
### Dependencies
|
||||
|
||||
- [Feh](https://feh.finalrewind.org/)
|
||||
- [Feh](https://feh.finalrewind.org/) (by default)
|
||||
|
||||
### Pre-compiled versions
|
||||
|
||||
|
|
@ -35,7 +37,7 @@ workspaces:
|
|||
"Name of the workspace 3": /home/alice/wallpapers/3.jpg
|
||||
```
|
||||
|
||||
Next, you simply need to run `i3-wallpaper-manager` while specify the path to the configuration file.
|
||||
Next, you simply need to run `i3-wallpaper-manager` and specify the path to the configuration file.
|
||||
|
||||
```bash
|
||||
DISPLAY=:0 i3-wallpaper-manager /path/to/config.yaml
|
||||
|
|
@ -44,5 +46,25 @@ DISPLAY=:0 i3-wallpaper-manager /path/to/config.yaml
|
|||
To run it when i3 starts, add this to your i3 configuration:
|
||||
|
||||
```bash
|
||||
exec_always DISPLAY=:0 i3-wallpaper-manager /path/to/config.yaml
|
||||
exec --no-startup-id DISPLAY=:0 i3-wallpaper-manager /path/to/config.yaml
|
||||
```
|
||||
|
||||
If you wish to use a program other than `feh`, set the `callback` parameter by specifying the path to your script.
|
||||
|
||||
```yaml
|
||||
callback: /path/to/custom.sh
|
||||
```
|
||||
|
||||
```bash
|
||||
#!/bin/sh
|
||||
# /path/to/custom.sh
|
||||
|
||||
SCREEN_1="$1"
|
||||
WALLPAPER_1="$2"
|
||||
|
||||
SCREEN_2="$3"
|
||||
WALLPAPER_2="$4"
|
||||
# etc.
|
||||
|
||||
# Do stuff...
|
||||
```
|
||||
|
|
|
|||
19
callback.go
Normal file
19
callback.go
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func CallbackUpdateWallpapers(callback string, files, screens []string) *exec.Cmd {
|
||||
args := []string{}
|
||||
|
||||
for key, file := range files {
|
||||
args = append(args, screens[key], file)
|
||||
}
|
||||
|
||||
cmd := exec.Command(callback, args...)
|
||||
cmd.Env = os.Environ()
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import (
|
|||
|
||||
type Config struct {
|
||||
Default string `yaml:"default"`
|
||||
Callback string `yaml:"callback"`
|
||||
Workspaces map[string]string `yaml:"workspaces"`
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,3 +3,4 @@ workspaces:
|
|||
"Name of the workspace 1": /home/alice/wallpapers/1.jpg
|
||||
"Name of the workspace 2": /home/alice/wallpapers/2.jpg
|
||||
"Name of the workspace 3": /home/alice/wallpapers/3.jpg
|
||||
# callback: /path/to/custom.sh
|
||||
|
|
|
|||
4
feh.go
4
feh.go
|
|
@ -5,7 +5,7 @@ import (
|
|||
"os/exec"
|
||||
)
|
||||
|
||||
func FehUpdateWallpapers(files []string) (*exec.Cmd, error) {
|
||||
func FehUpdateWallpapers(files []string) *exec.Cmd {
|
||||
args := []string{}
|
||||
|
||||
for _, file := range files {
|
||||
|
|
@ -15,5 +15,5 @@ func FehUpdateWallpapers(files []string) (*exec.Cmd, error) {
|
|||
cmd := exec.Command("feh", args...)
|
||||
cmd.Env = os.Environ()
|
||||
|
||||
return cmd, cmd.Run()
|
||||
return cmd
|
||||
}
|
||||
|
|
|
|||
7
main.go
7
main.go
|
|
@ -16,18 +16,21 @@ func main() {
|
|||
}
|
||||
|
||||
config, err := LoadConfiguration(os.Args[1])
|
||||
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
UpdateWallapers(config)
|
||||
var lastCommand string
|
||||
|
||||
UpdateWallapers(config, &lastCommand)
|
||||
|
||||
for recv.Next() {
|
||||
event := recv.Event().(*i3.WorkspaceEvent)
|
||||
|
||||
if event.Change == "focus" {
|
||||
UpdateWallapers(config)
|
||||
UpdateWallapers(config, &lastCommand)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
29
wallpaper.go
29
wallpaper.go
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"log"
|
||||
"os/exec"
|
||||
|
||||
"go.i3wm.org/i3"
|
||||
)
|
||||
|
|
@ -17,11 +18,12 @@ func GetWorkspaceWallpaper(workspace string, config Config) string {
|
|||
return file
|
||||
}
|
||||
|
||||
func GetOutputsWallpapers(config Config) ([]string, error) {
|
||||
func GetOutputsWallpapers(config Config) ([]string, []string, error) {
|
||||
files := []string{}
|
||||
screens := []string{}
|
||||
outputs, err := i3.GetOutputs()
|
||||
if err != nil {
|
||||
return files, err
|
||||
return files, screens, err
|
||||
}
|
||||
|
||||
for _, output := range outputs {
|
||||
|
|
@ -30,25 +32,40 @@ func GetOutputsWallpapers(config Config) ([]string, error) {
|
|||
|
||||
if file != "" {
|
||||
files = append(files, file)
|
||||
screens = append(screens, output.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return files, nil
|
||||
return files, screens, nil
|
||||
}
|
||||
|
||||
func UpdateWallapers(config Config) {
|
||||
files, err := GetOutputsWallpapers(config)
|
||||
func UpdateWallapers(config Config, lastCommand *string) {
|
||||
files, screens, err := GetOutputsWallpapers(config)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
cmd, err := FehUpdateWallpapers(files)
|
||||
var cmd *exec.Cmd
|
||||
|
||||
if config.Callback == "" {
|
||||
cmd = FehUpdateWallpapers(files)
|
||||
} else {
|
||||
cmd = CallbackUpdateWallpapers(config.Callback, files, screens)
|
||||
}
|
||||
|
||||
if cmd.String() == *lastCommand {
|
||||
log.Printf("[INFO] wallapaper(s) already up to date")
|
||||
return
|
||||
}
|
||||
|
||||
err = cmd.Run()
|
||||
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] cmd=%s error=%s", cmd.String(), err.Error())
|
||||
} else {
|
||||
log.Printf("[SUCCESS] cmd=%s", cmd.String())
|
||||
*lastCommand = cmd.String()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue