mirror of
https://github.com/zephrynis/nix-flake.git
synced 2026-02-19 04:21:55 +00:00
feat: make AGS colorshell configuration fully declarative
- Add complete colorshell v2.0.3 configuration to home/ags-config/ - Disable runner plugin and NightLight tile (incompatible with NixOS) - Customize SCSS with full opacity (no transparency) - Add dark pale blue color scheme in home/pywal-colors/ - Configure Papirus-Dark icon theme via home-manager - Make ~/.config/ags/ immutable and managed by Nix store - Auto-deploy pywal colors to ~/.cache/wal/colors.json All AGS configuration is now reproducible and version controlled.
This commit is contained in:
99
home/ags-config/runner/plugins/media.ts
Normal file
99
home/ags-config/runner/plugins/media.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
import { createBinding, createComputed } from "ags";
|
||||
import { Runner } from "../Runner";
|
||||
import { secureBaseBinding } from "../../modules/utils";
|
||||
import { tr } from "../../i18n/intl";
|
||||
|
||||
import Media from "../../modules/media";
|
||||
import AstalMpris from "gi://AstalMpris";
|
||||
|
||||
|
||||
export const PluginMedia = {
|
||||
prefix: ":",
|
||||
handle: () => !Media.getDefault().player.available ? {
|
||||
icon: "folder-music-symbolic",
|
||||
title: "Couldn't find any players",
|
||||
closeOnClick: false,
|
||||
description: "No media / player found with mpris"
|
||||
} : [
|
||||
{
|
||||
icon: secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"playbackStatus",
|
||||
AstalMpris.PlaybackStatus.PAUSED
|
||||
).as((status) => status === AstalMpris.PlaybackStatus.PLAYING ?
|
||||
"media-playback-pause-symbolic"
|
||||
: "media-playback-start-symbolic"),
|
||||
closeOnClick: false,
|
||||
title: createComputed([
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"title",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_title")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"artist",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_artist")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"playbackStatus",
|
||||
AstalMpris.PlaybackStatus.PAUSED
|
||||
)
|
||||
], (title, artist, status) => `${status === AstalMpris.PlaybackStatus.PLAYING ?
|
||||
"Pause" : "Play"
|
||||
} ${title} | ${artist}`),
|
||||
actionClick: () => Media.getDefault().player.play_pause()
|
||||
},
|
||||
{
|
||||
icon: "media-skip-backward-symbolic",
|
||||
closeOnClick: false,
|
||||
title: createComputed([
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"title",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_title")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"artist",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_artist")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"identity",
|
||||
"Music Player"
|
||||
)
|
||||
], (title, artist, identity) =>
|
||||
`Go Previous ${title ? title : identity}${artist ? ` | ${artist}` : ""}`
|
||||
),
|
||||
actionClick: () => Media.getDefault().player.canGoPrevious &&
|
||||
Media.getDefault().player.previous()
|
||||
},
|
||||
{
|
||||
icon: "media-skip-forward-symbolic",
|
||||
closeOnClick: false,
|
||||
title: createComputed([
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"title",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_title")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"artist",
|
||||
null
|
||||
).as(t => t ?? tr("media.no_artist")),
|
||||
secureBaseBinding<AstalMpris.Player>(
|
||||
createBinding(Media.getDefault(), "player"),
|
||||
"identity",
|
||||
"Music Player"
|
||||
)
|
||||
], (title, artist, identity) =>
|
||||
`Go Next ${title ? title : identity}${artist ? ` | ${artist}` : ""}`
|
||||
),
|
||||
actionClick: () => Media.getDefault().player.canGoNext &&
|
||||
Media.getDefault().player.next()
|
||||
}
|
||||
]
|
||||
} as Runner.Plugin;
|
||||
Reference in New Issue
Block a user