mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2025-12-08 22:48:00 -08:00
Compare commits
2 Commits
9cc37f1efe
...
711a3da32d
| Author | SHA1 | Date | |
|---|---|---|---|
|
711a3da32d
|
|||
|
e101b81abd
|
@@ -223,7 +223,7 @@ device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render {
|
render {
|
||||||
explicit_sync = true
|
# explicit_sync = true
|
||||||
}
|
}
|
||||||
|
|
||||||
misc {
|
misc {
|
||||||
@@ -256,7 +256,9 @@ misc {
|
|||||||
# windowrulev2 = float, class:com.mitchellh.ghostty
|
# windowrulev2 = float, class:com.mitchellh.ghostty
|
||||||
windowrule = float, class:discord
|
windowrule = float, class:discord
|
||||||
windowrule = float, class:mpv
|
windowrule = float, class:mpv
|
||||||
|
windowrule = float, class:steam
|
||||||
windowrule = workspace 10 silent, class:discord
|
windowrule = workspace 10 silent, class:discord
|
||||||
|
windowrule = workspace 9 silent, class:steam
|
||||||
# windowruv2 = opacity 0.88, class:.* fullscreen:0
|
# windowruv2 = opacity 0.88, class:.* fullscreen:0
|
||||||
windowrule = opacity 0.88, class:.* fullscreen:0
|
windowrule = opacity 0.88, class:.* fullscreen:0
|
||||||
# windowruv2 = opacity 1, class:.* fullscreen:0
|
# windowruv2 = opacity 1, class:.* fullscreen:0
|
||||||
|
|||||||
@@ -106,9 +106,9 @@ bind = SUPER, m, exec, ~/.local/bin/mpv-add.sh
|
|||||||
bind = SUPER SHIFT, s, exec, slurp | grim -g - - | wl-copy
|
bind = SUPER SHIFT, s, exec, slurp | grim -g - - | wl-copy
|
||||||
bind = ,code:107, exec, ~/.local/bin/screenshot
|
bind = ,code:107, exec, ~/.local/bin/screenshot
|
||||||
bind = SUPER,code:107, exec, flameshot screen
|
bind = SUPER,code:107, exec, flameshot screen
|
||||||
bind = SUPER SHIFT, o, exec, ~/.local/bin/ocr.sh
|
bind = SUPER, o, exec, ~/.local/bin/ocr.sh
|
||||||
bind = $mainMod, o, exec, ~/.local/bin/ocr.sh
|
bind = $mainMod, o, exec, ~/.local/bin/rofi-open tab
|
||||||
bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open tab
|
bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open window
|
||||||
|
|
||||||
# change wallpaper
|
# change wallpaper
|
||||||
bind = $mainMod CTRL, n, exec, ~/.local/bin/change-wallpaper
|
bind = $mainMod CTRL, n, exec, ~/.local/bin/change-wallpaper
|
||||||
|
|||||||
235
.config/rmpc/config.ron
Normal file
235
.config/rmpc/config.ron
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
#![enable(implicit_some)]
|
||||||
|
#![enable(unwrap_newtypes)]
|
||||||
|
#![enable(unwrap_variant_newtypes)]
|
||||||
|
(
|
||||||
|
address: "127.0.0.1:6600",
|
||||||
|
password: None,
|
||||||
|
theme: None,
|
||||||
|
cache_dir: "/tmp/rmpc",
|
||||||
|
on_song_change: ["songinfo"],
|
||||||
|
volume_step: 5,
|
||||||
|
max_fps: 144,
|
||||||
|
scrolloff: 0,
|
||||||
|
wrap_navigation: false,
|
||||||
|
enable_mouse: true,
|
||||||
|
enable_config_hot_reload: true,
|
||||||
|
status_update_interval_ms: 1000,
|
||||||
|
rewind_to_start_sec: None,
|
||||||
|
reflect_changes_to_playlist: false,
|
||||||
|
select_current_song_on_change: false,
|
||||||
|
browser_song_sort: [Disc, Track, Artist, Title],
|
||||||
|
directories_sort: SortFormat(group_by_type: true, reverse: false),
|
||||||
|
keybinds: (
|
||||||
|
global: {
|
||||||
|
":": CommandMode,
|
||||||
|
",": VolumeDown,
|
||||||
|
"s": Stop,
|
||||||
|
".": VolumeUp,
|
||||||
|
"<Tab>": NextTab,
|
||||||
|
"<S-Tab>": PreviousTab,
|
||||||
|
"1": SwitchToTab("Queue"),
|
||||||
|
"2": SwitchToTab("Directories"),
|
||||||
|
"3": SwitchToTab("Artists"),
|
||||||
|
"4": SwitchToTab("Album Artists"),
|
||||||
|
"5": SwitchToTab("Albums"),
|
||||||
|
"6": SwitchToTab("Playlists"),
|
||||||
|
"7": SwitchToTab("Search"),
|
||||||
|
"q": Quit,
|
||||||
|
">": NextTrack,
|
||||||
|
"p": TogglePause,
|
||||||
|
"<": PreviousTrack,
|
||||||
|
"f": SeekForward,
|
||||||
|
"z": ToggleRepeat,
|
||||||
|
"x": ToggleRandom,
|
||||||
|
"c": ToggleConsume,
|
||||||
|
"v": ToggleSingle,
|
||||||
|
"b": SeekBack,
|
||||||
|
"?": ShowHelp,
|
||||||
|
"u": Update,
|
||||||
|
"U": Rescan,
|
||||||
|
"I": ShowCurrentSongInfo,
|
||||||
|
"O": ShowOutputs,
|
||||||
|
"P": ShowDecoders,
|
||||||
|
"R": AddRandom,
|
||||||
|
},
|
||||||
|
navigation: {
|
||||||
|
"k": Up,
|
||||||
|
"j": Down,
|
||||||
|
"h": Left,
|
||||||
|
"l": Right,
|
||||||
|
"<Up>": Up,
|
||||||
|
"<Down>": Down,
|
||||||
|
"<Left>": Left,
|
||||||
|
"<Right>": Right,
|
||||||
|
"<C-k>": PaneUp,
|
||||||
|
"<C-j>": PaneDown,
|
||||||
|
"<C-h>": PaneLeft,
|
||||||
|
"<C-l>": PaneRight,
|
||||||
|
"<C-u>": UpHalf,
|
||||||
|
"N": PreviousResult,
|
||||||
|
"a": Add,
|
||||||
|
"A": AddAll,
|
||||||
|
"r": Rename,
|
||||||
|
"n": NextResult,
|
||||||
|
"g": Top,
|
||||||
|
"<Space>": Select,
|
||||||
|
"<C-Space>": InvertSelection,
|
||||||
|
"G": Bottom,
|
||||||
|
"<CR>": Confirm,
|
||||||
|
"i": FocusInput,
|
||||||
|
"J": MoveDown,
|
||||||
|
"<C-d>": DownHalf,
|
||||||
|
"/": EnterSearch,
|
||||||
|
"<C-c>": Close,
|
||||||
|
"<Esc>": Close,
|
||||||
|
"K": MoveUp,
|
||||||
|
"D": Delete,
|
||||||
|
"B": ShowInfo,
|
||||||
|
},
|
||||||
|
queue: {
|
||||||
|
"D": DeleteAll,
|
||||||
|
"<CR>": Play,
|
||||||
|
"<C-s>": Save,
|
||||||
|
"a": AddToPlaylist,
|
||||||
|
"d": Delete,
|
||||||
|
"C": JumpToCurrent,
|
||||||
|
"X": Shuffle,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
search: (
|
||||||
|
case_sensitive: false,
|
||||||
|
mode: Contains,
|
||||||
|
tags: [
|
||||||
|
(value: "any", label: "Any Tag"),
|
||||||
|
(value: "artist", label: "Artist"),
|
||||||
|
(value: "album", label: "Album"),
|
||||||
|
(value: "albumartist", label: "Album Artist"),
|
||||||
|
(value: "title", label: "Title"),
|
||||||
|
(value: "filename", label: "Filename"),
|
||||||
|
(value: "genre", label: "Genre"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
artists: (
|
||||||
|
album_display_mode: SplitByDate,
|
||||||
|
album_sort_by: Date,
|
||||||
|
),
|
||||||
|
default_album_art_path: None,
|
||||||
|
draw_borders: false,
|
||||||
|
show_song_table_header: false,
|
||||||
|
symbols: (song: "🎵", dir: "📁", playlist: "🎼", marker: "\u{e0b0}"),
|
||||||
|
layout: Split(
|
||||||
|
direction: Vertical,
|
||||||
|
panes: [
|
||||||
|
(
|
||||||
|
pane: Pane(Header),
|
||||||
|
size: "1",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pane: Pane(TabContent),
|
||||||
|
size: "100%",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pane: Pane(ProgressBar),
|
||||||
|
size: "1",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
progress_bar: (
|
||||||
|
symbols: ["", "", "⭘", " ", " "],
|
||||||
|
track_style: (bg: "#1e2030"),
|
||||||
|
elapsed_style: (fg: "#c6a0f6", bg: "#1e2030"),
|
||||||
|
thumb_style: (fg: "#c6a0f6", bg: "#1e2030"),
|
||||||
|
),
|
||||||
|
scrollbar: (
|
||||||
|
symbols: ["│", "█", "▲", "▼"],
|
||||||
|
track_style: (),
|
||||||
|
ends_style: (),
|
||||||
|
thumb_style: (fg: "#b7bdf8"),
|
||||||
|
),
|
||||||
|
browser_column_widths: [20, 38, 42],
|
||||||
|
text_color: "#cad3f5",
|
||||||
|
background_color: "#24273a",
|
||||||
|
header_background_color: "#1e2030",
|
||||||
|
modal_background_color: None,
|
||||||
|
modal_backdrop: false,
|
||||||
|
tab_bar: (active_style: (fg: "black", bg: "#c6a0f6", modifiers: "Bold"), inactive_style: ()),
|
||||||
|
borders_style: (fg: "#6e738d"),
|
||||||
|
highlighted_item_style: (fg: "#c6a0f6", modifiers: "Bold"),
|
||||||
|
current_item_style: (fg: "black", bg: "#b7bdf8", modifiers: "Bold"),
|
||||||
|
highlight_border_style: (fg: "#b7bdf8"),
|
||||||
|
song_table_format: [
|
||||||
|
(
|
||||||
|
prop: (kind: Property(Artist), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))),
|
||||||
|
width: "50%",
|
||||||
|
alignment: Right,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
prop: (kind: Text("-"), style: (fg: "#b7bdf8"), default: (kind: Text("Unknown"))),
|
||||||
|
width: "1",
|
||||||
|
alignment: Center,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
prop: (kind: Property(Title), style: (fg: "#7dc4e4"), default: (kind: Text("Unknown"))),
|
||||||
|
width: "50%",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
header: (
|
||||||
|
rows: [
|
||||||
|
(
|
||||||
|
left: [
|
||||||
|
(kind: Text("["), style: (fg: "#b7bdf8", modifiers: "Bold")),
|
||||||
|
(kind: Property(Status(State)), style: (fg: "#b7bdf8", modifiers: "Bold")),
|
||||||
|
(kind: Text("]"), style: (fg: "#b7bdf8", modifiers: "Bold"))
|
||||||
|
],
|
||||||
|
center: [
|
||||||
|
(kind: Property(Song(Artist)), style: (fg: "#eed49f", modifiers: "Bold"),
|
||||||
|
default: (kind: Text("Unknown"), style: (fg: "#eed49f", modifiers: "Bold"))
|
||||||
|
),
|
||||||
|
(kind: Text(" - ")),
|
||||||
|
(kind: Property(Song(Title)), style: (fg: "#7dc4e4", modifiers: "Bold"),
|
||||||
|
default: (kind: Text("No Song"), style: (fg: "#7dc4e4", modifiers: "Bold"))
|
||||||
|
)
|
||||||
|
],
|
||||||
|
right: [
|
||||||
|
(kind: Text("Vol: "), style: (fg: "#b7bdf8", modifiers: "Bold")),
|
||||||
|
(kind: Property(Status(Volume)), style: (fg: "#b7bdf8", modifiers: "Bold")),
|
||||||
|
(kind: Text("% "), style: (fg: "#b7bdf8", modifiers: "Bold"))
|
||||||
|
]
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
tabs: [
|
||||||
|
(
|
||||||
|
name: "Queue",
|
||||||
|
pane: Split(
|
||||||
|
direction: Horizontal,
|
||||||
|
panes: [(size: "60%", pane: Pane(Queue)), (size: "40%", pane: Pane(AlbumArt))],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Directories",
|
||||||
|
pane: Pane(Directories),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Artists",
|
||||||
|
pane: Pane(Artists),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Album Artists",
|
||||||
|
pane: Pane(AlbumArtists),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Albums",
|
||||||
|
pane: Pane(Albums),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Playlists",
|
||||||
|
pane: Pane(Playlists),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Search",
|
||||||
|
pane: Pane(Search),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -21,29 +22,42 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Topics []string `json:"topics"`
|
Topics []string `json:"topics"`
|
||||||
|
Keep int `json:"keep"` // Number of wallpapers to keep (0 = never delete)
|
||||||
|
WallpaperDir string `json:"wallpaperDir"` // Directory to store wallpapers
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultTopics = []string{
|
var defaultTopics = []string{
|
||||||
"lofi",
|
"lofi",
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfig() []string {
|
const defaultKeep = 10
|
||||||
|
|
||||||
|
func loadConfig() (topics []string, keep int, wallpaperDir string) {
|
||||||
homeDir, err := os.UserHomeDir()
|
homeDir, err := os.UserHomeDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return defaultTopics
|
return defaultTopics, defaultKeep, wallpaperDir
|
||||||
}
|
}
|
||||||
configPath := filepath.Join(homeDir, ".config", "change-wallpaper", "config.json")
|
configPath := filepath.Join(homeDir, ".config", "change-wallpaper", "config.json")
|
||||||
file, err := os.Open(configPath)
|
file, err := os.Open(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return defaultTopics
|
return defaultTopics, defaultKeep, wallpaperDir
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
var cfg Config
|
var cfg Config
|
||||||
if err := json.NewDecoder(file).Decode(&cfg); err != nil || len(cfg.Topics) == 0 {
|
if err := json.NewDecoder(file).Decode(&cfg); err != nil {
|
||||||
return defaultTopics
|
return defaultTopics, defaultKeep, wallpaperDir
|
||||||
}
|
}
|
||||||
return cfg.Topics
|
if len(cfg.Topics) == 0 {
|
||||||
|
cfg.Topics = defaultTopics
|
||||||
|
}
|
||||||
|
if cfg.Keep < 0 {
|
||||||
|
cfg.Keep = defaultKeep
|
||||||
|
}
|
||||||
|
if cfg.WallpaperDir == "" {
|
||||||
|
cfg.WallpaperDir = wallpaperDir
|
||||||
|
}
|
||||||
|
return cfg.Topics, cfg.Keep, cfg.WallpaperDir
|
||||||
}
|
}
|
||||||
|
|
||||||
type WallhavenResponse struct {
|
type WallhavenResponse struct {
|
||||||
@@ -57,7 +71,7 @@ func main() {
|
|||||||
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
// Load topics from config or use defaults
|
// Load topics from config or use defaults
|
||||||
topics := loadConfig()
|
topics, keep, configWallpaperDir := loadConfig()
|
||||||
|
|
||||||
// Check if a file path was provided as argument
|
// Check if a file path was provided as argument
|
||||||
if len(os.Args) > 1 {
|
if len(os.Args) > 1 {
|
||||||
@@ -75,14 +89,26 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
wallpaperPath := filepath.Join(homeDir, wallpaperDir)
|
// Use config wallpaper directory if set, otherwise use default
|
||||||
|
var wallpaperPath string
|
||||||
|
if configWallpaperDir != "" {
|
||||||
|
if strings.HasPrefix(configWallpaperDir, "~/") {
|
||||||
|
wallpaperPath = filepath.Join(homeDir, configWallpaperDir[2:])
|
||||||
|
} else if configWallpaperDir == "~" {
|
||||||
|
wallpaperPath = homeDir
|
||||||
|
} else {
|
||||||
|
wallpaperPath = configWallpaperDir
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
wallpaperPath = filepath.Join(homeDir, wallpaperDir)
|
||||||
|
}
|
||||||
if err := os.MkdirAll(wallpaperPath, 0755); err != nil {
|
if err := os.MkdirAll(wallpaperPath, 0755); err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Error creating wallpaper directory: %v\n", err)
|
fmt.Fprintf(os.Stderr, "Error creating wallpaper directory: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Download and set new wallpaper
|
// Download and set new wallpaper
|
||||||
newWallpaper, topic := downloadRandomWallpaper(wallpaperPath, r, topics)
|
newWallpaper, topic := downloadRandomWallpaper(wallpaperPath, r, topics, keep)
|
||||||
if newWallpaper != "" {
|
if newWallpaper != "" {
|
||||||
changeWallpaper(newWallpaper, topic)
|
changeWallpaper(newWallpaper, topic)
|
||||||
} else {
|
} else {
|
||||||
@@ -91,7 +117,33 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func downloadRandomWallpaper(wallpaperPath string, r *rand.Rand, topics []string) (string, string) {
|
func downloadRandomWallpaper(wallpaperPath string, r *rand.Rand, topics []string, keep int) (string, string) {
|
||||||
|
// Clean up old wallpapers before downloading a new one, if keep > 0
|
||||||
|
if keep > 0 {
|
||||||
|
files, err := os.ReadDir(wallpaperPath)
|
||||||
|
if err == nil && len(files) > keep {
|
||||||
|
type fileInfo struct {
|
||||||
|
name string
|
||||||
|
mod int64
|
||||||
|
}
|
||||||
|
var fileInfos []fileInfo
|
||||||
|
for _, f := range files {
|
||||||
|
if !f.IsDir() {
|
||||||
|
info, err := f.Info()
|
||||||
|
if err == nil {
|
||||||
|
fileInfos = append(fileInfos, fileInfo{f.Name(), info.ModTime().Unix()})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sort by mod time, newest first
|
||||||
|
sort.Slice(fileInfos, func(i, j int) bool { return fileInfos[i].mod > fileInfos[j].mod })
|
||||||
|
for _, f := range fileInfos[keep:] {
|
||||||
|
os.Remove(filepath.Join(wallpaperPath, f.name))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If keep == 0, never delete
|
||||||
|
|
||||||
// Select random topic
|
// Select random topic
|
||||||
topic := topics[r.Intn(len(topics))]
|
topic := topics[r.Intn(len(topics))]
|
||||||
var query string
|
var query string
|
||||||
|
|||||||
Reference in New Issue
Block a user