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:
2025-11-04 21:36:38 +00:00
parent 593735370a
commit b2ae32a078
240 changed files with 1024921 additions and 3 deletions

View File

@@ -0,0 +1,58 @@
import GLib from "gi://GLib?version=2.0";
const i18nKeys = {
en_US: (await import("./lang/en_US")).default,
fr_FR: (await import("./lang/fr_FR")).default,
fr_BE: (await import("./lang/fr_FR")).default,
pt_BR: (await import("./lang/pt_BR")).default,
ru_RU: (await import("./lang/ru_RU")).default,
};
const languages: Array<string> = Object.keys(i18nKeys);
let language: string = getSystemLanguage();
export function getSystemLanguage(): string {
const sysLanguage: string | null | undefined =
GLib.getenv("LANG") ?? GLib.getenv("LANGUAGE"),
splitted: Array<string> | undefined = sysLanguage?.split(".");
if (!splitted || !languages.includes(splitted![0])) {
console.warn(`Intl: Falling back to default \`${languages[0]}\``);
return languages[0];
}
return splitted![0];
}
export function setLanguage(lang: string): string {
languages.map((cur: string) => {
if (cur === lang) {
language = lang;
return lang;
}
});
throw new Error(`Intl: couldn't set language: ${lang}`, {
cause: `language ${lang} not found in languages of type ${typeof languages}`,
});
}
export function tr(key: string): string {
let result = i18nKeys[language as keyof typeof i18nKeys],
defResult = i18nKeys[languages[0] as keyof typeof i18nKeys];
for (const keyString of key.split(".")) {
result = result[keyString as keyof typeof result] as never;
defResult = defResult[keyString as keyof typeof defResult] as never;
}
return typeof result == "string"
? result
: typeof defResult == "string"
? defResult
: 'not found / is not of type "string"';
}
export function trGet() {
return i18nKeys[getSystemLanguage() as keyof typeof i18nKeys];
}

View File

@@ -0,0 +1,105 @@
import { i18nStruct } from "../struct";
export default {
language: "English (United States)",
cancel: "Cancel",
accept: "Ok",
devices: "Devices",
others: "Others",
connected: "Connected",
disconnected: "Disconnected",
unknown: "Unknown",
connecting: "Connecting",
none: "None",
limited: "Limited",
apps: "Applications",
clear: "Clear",
connect: "Connect",
disconnect: "Disconnect",
copy_to_clipboard: "Copy to clipboard",
media: {
play: "Play",
pause: "Pause",
next: "Next",
previous: "Previous",
loop: "Loop",
no_loop: "No loop",
song_loop: "Loop song",
shuffle_order: "Shuffle",
follow_order: "Follow order",
no_artist: "No artist",
no_title: "No title"
},
control_center: {
tiles: {
enabled: "Enabled",
disabled: "Disabled",
more: "More",
network: {
network: "Network",
wireless: "Wireless",
wired: "Wired"
},
recording: {
title: "Screen Recording",
disabled_desc: "Start recording",
enabled_desc: "Stop recording",
},
dnd: {
title: "Do Not Disturb"
},
night_light: {
title: "Night Light",
default_desc: "Fidelity"
}
},
pages: {
more_settings: "More settings",
sound: {
title: "Sound",
description: "Configure the audio output"
},
microphone: {
title: "Microphone",
description: "Configure the audio input"
},
night_light: {
title: "Night Light",
description: "Control Night Light and Gamma filters",
gamma: "Gamma",
temperature: "Temperature"
},
backlight: {
title: "Backlight",
description: "Control the brightness of your screens",
refresh: "Refresh backlights"
},
bluetooth: {
title: "Bluetooth",
description: "Manage Bluetooth devices",
new_devices: "New devices",
adapters: "Adapters",
paired_devices: "Paired Devices",
start_discovering: "Start discovering",
stop_discovering: "Stop discovering",
untrust_device: "Untrust device",
unpair_device: "Unpair device",
trust_device: "Trust device",
pair_device: "Pair device"
},
network: {
title: "Network",
interface: "Interface"
}
}
},
ask_popup: {
title: "Question"
}
} satisfies i18nStruct;

View File

@@ -0,0 +1,105 @@
import { i18nStruct } from "../struct";
export default {
language: "Français (France)",
cancel: "Annuler",
accept: "Ok",
devices: "Appareils",
others: "Autres",
connected: "Connecté",
disconnected: "Déconnecté",
unknown: "Inconnu",
connecting: "Connexion en cours",
none: "Aucun",
limited: "Limité",
apps: "Applications",
clear: "Effacer",
connect: "Se connecter",
disconnect: "Se déconnecter",
copy_to_clipboard: "Copier dans le presse-papiers",
media: {
play: "Lecture",
pause: "Pause",
next: "Suivant",
previous: "Précédent",
loop: "Boucle",
no_loop: "Pas de boucle",
song_loop: "Répéter le morceau",
shuffle_order: "Lecture aléatoire",
follow_order: "Lecture dans l'ordre",
no_artist: "Aucun artiste",
no_title: "Aucun titre",
},
control_center: {
tiles: {
enabled: "Activé",
disabled: "Désactivé",
more: "Plus",
network: {
network: "Réseau",
wireless: "Sans fil",
wired: "Filaire",
},
recording: {
title: "Enregistrement de l'écran",
disabled_desc: "Démarrer l'enregistrement",
enabled_desc: "Arrêter l'enregistrement",
},
dnd: {
title: "Ne pas déranger",
},
night_light: {
title: "Éclairage nocturne",
default_desc: "Fidélité",
},
},
pages: {
more_settings: "Plus de paramètres",
sound: {
title: "Son",
description: "Configurer la sortie audio",
},
microphone: {
title: "Microphone",
description: "Configurer l'entrée audio",
},
night_light: {
title: "Éclairage nocturne",
description: "Contrôler l'éclairage nocturne et les filtres Gamma",
gamma: "Gamma",
temperature: "Température",
},
backlight: {
title: "Rétroéclairage",
description: "Contrôler la luminosité de vos écrans",
refresh: "Actualiser les rétroéclairages",
},
bluetooth: {
title: "Bluetooth",
description: "Gérer les appareils Bluetooth",
new_devices: "Nouveaux appareils",
adapters: "Adaptateurs",
paired_devices: "Appareils appairés",
start_discovering: "Démarrer la recherche",
stop_discovering: "Arrêter la recherche",
untrust_device: "Retirer la confiance",
unpair_device: "Désappairer",
trust_device: "Faire confiance",
pair_device: "Appairer",
},
network: {
title: "Réseau",
interface: "Interface",
},
},
},
ask_popup: {
title: "Question",
},
} satisfies i18nStruct;

View File

@@ -0,0 +1,105 @@
import { i18nStruct } from "../struct";
export default {
language: "Português (Brasil)",
cancel: "Cancelar",
accept: "Ok",
devices: "Dispositivos",
others: "Outros",
connected: "Conectado",
disconnected: "Desconectado",
unknown: "Desconhecido",
connecting: "Conectando",
limited: "Limitado",
none: "Nenhum",
disconnect: "Desconectar",
connect: "Conectar",
apps: "Aplicativos",
clear: "Limpar",
copy_to_clipboard: "Copiar para a Área de Transferência",
media: {
next: "Próxima faixa",
pause: "Pausar",
play: "Tocar",
previous: "Faixa anterior",
loop: "Repetir",
no_loop: "Não repetir",
song_loop: "Repetir faixa",
follow_order: "Seguir ordem",
shuffle_order: "Ordem aleatória",
no_title: "Sem título",
no_artist: "Sem artista"
},
control_center: {
tiles: {
enabled: "Ligado",
disabled: "Desligado",
more: "Mais",
network: {
network: "Rede",
wireless: "Wi-Fi",
wired: "Cabeada"
},
recording: {
title: "Gravação de Tela",
disabled_desc: "Iniciar gravação",
enabled_desc: "Parar gravação",
},
dnd: {
title: "Não Perturbe"
},
night_light: {
title: "Luz Noturna",
default_desc: "Fidelidade"
}
},
pages: {
more_settings: "Mais configurações",
sound: {
title: "Som",
description: "Controle a saída de áudio"
},
microphone: {
title: "Microfone",
description: "Configure a entrada de áudio"
},
night_light: {
title: "Luz Noturna",
description: "Controle os filtros de Luz Noturna e Gama",
temperature: "Temperatura",
gamma: "Gama"
},
backlight: {
title: "Brilho",
description: "Controle o nível de brilho das suas telas",
refresh: "Recarregar"
},
bluetooth: {
title: "Bluetooth",
description: "Gerencie dispositivos Bluetooth",
new_devices: "Novos Dispositivos",
adapters: "Adaptadores",
paired_devices: "Dispositivos Pareados",
start_discovering: "Começar a procurar dispositivos",
stop_discovering: "Parar de procurar dispositivos",
pair_device: "Parear dispositivo",
trust_device: "Confiar no dispositivo",
unpair_device: "Desparear dispositivo",
untrust_device: "Deixar de confiar no dispositivo"
},
network: {
title: "Rede",
interface: "Interface"
}
}
},
ask_popup: {
title: "Pergunta"
}
} satisfies i18nStruct;

View File

@@ -0,0 +1,86 @@
import { i18nStruct } from "../struct";
export default {
language: "Русский (Российская Федерация)",
cancel: "Отменить",
accept: "Ок",
devices: "Устройства",
others: "Другие",
connected: "Подключён",
disconnected: "Отключён",
unknown: "Неизвестный",
connecting: "Подключение",
none: "Ничего",
limited: "Ограничен",
apps: "Приложения",
clear: "Очистить",
connect: "Подключиться",
disconnect: "Отключиться",
control_center: {
tiles: {
enabled: "Включить",
disabled: "Отключить",
more: "Больше",
network: {
network: "Инетрнет",
wireless: "Беспроводное",
wired: "Проводное"
},
recording: {
title: "Запись экрана",
disabled_desc: "Начать запись",
enabled_desc: "Остановить запись",
},
dnd: {
title: "Не беспокоить"
},
night_light: {
title: "Ночной свет",
default_desc: "Тонн"
}
},
pages: {
more_settings: "Больше настроек",
sound: {
title: "Звук",
description: "Настройка вывода звука"
},
microphone: {
title: "Микрофон",
description: "Настройка ввода звука"
},
night_light: {
title: "Ночной свет",
description: "Контроль интенсивности фильтрации синего света",
gamma: "Гамма",
temperature: "Температура"
},
bluetooth: {
title: "Bluetooth",
description: "Управление Bluetooth устройствами",
new_devices: "Новые устройства",
adapters: "Адапреты",
paired_devices: "Привязанные устройства",
start_discovering: "Начать поиск",
stop_discovering: "Остановить поиск",
untrust_device: "Недоверенное устройство",
unpair_device: "Отвязанное устройство",
trust_device: "Доверенное устройство",
pair_device: "Привязанное устройство"
},
network: {
title: "Интернет",
interface: "Интерфейсы"
}
}
},
ask_popup: {
title: "Вопрос"
}
} as i18nStruct;

View File

@@ -0,0 +1,105 @@
export type i18nStruct = {
language: string,
cancel: string,
accept: string,
connected: string,
disconnected: string,
connecting: string,
unknown: string,
none: string,
limited: string,
devices: string,
others: string,
disconnect: string,
connect: string,
apps: string,
clear: string,
copy_to_clipboard: string,
media: {
loop: string,
song_loop: string,
no_loop: string,
shuffle_order: string,
follow_order: string,
pause: string,
play: string,
next: string,
previous: string,
no_artist: string,
no_title: string
},
control_center: {
tiles: {
enabled: string,
disabled: string,
more: string,
network: {
network: string,
wireless: string,
wired: string
},
recording: {
title: string,
disabled_desc: string,
enabled_desc: string
},
dnd: {
title: string
},
night_light: {
title: string,
default_desc: string
}
},
pages: {
more_settings: string,
sound: {
title: string,
description: string
},
microphone: {
title: string,
description: string
},
network: {
title: string,
interface: string
},
backlight: {
title: string,
description: string,
refresh: string
},
bluetooth: {
title: string,
description: string,
adapters: string,
new_devices: string,
paired_devices: string,
start_discovering: string,
stop_discovering: string,
trust_device: string,
untrust_device: string,
pair_device: string,
unpair_device: string
},
night_light: {
title: string,
description: string,
temperature: string,
gamma: string
}
}
},
ask_popup: {
title: string
}
};