Full Code of RoccoRakete/hyprland-dots for AI

main a164395ea4a2 cached
579 files
1.1 MB
320.9k tokens
422 symbols
1 requests
Download .txt
Showing preview only (1,309K chars total). Download the full file or copy to clipboard to get everything.
Repository: RoccoRakete/hyprland-dots
Branch: main
Commit: a164395ea4a2
Files: 579
Total size: 1.1 MB

Directory structure:
gitextract_u_p066sk/

├── .gitignore
├── README.md
├── backgrounds/
│   └── last/
│       └── .comments/
│           └── image_blurred.png.xml
├── cfg/
│   ├── anyrun/
│   │   ├── adwaita-dark/
│   │   │   ├── config.ron
│   │   │   ├── launch.sh
│   │   │   └── style-adwaita.scss
│   │   └── catppuccin-mocha/
│   │       ├── config.ron
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   ├── hypr/
│   │   ├── adwaita-dark/
│   │   │   └── Decoration.conf
│   │   └── catppuccin-mocha/
│   │       └── Decoration.conf
│   ├── swaync/
│   │   ├── adwaita-dark/
│   │   │   ├── config.json
│   │   │   ├── configSchema.json
│   │   │   ├── launch.sh
│   │   │   └── style-adwaita.scss
│   │   └── catppuccin-mocha/
│   │       ├── config.json
│   │       ├── configSchema.json
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   ├── themes/
│   │   ├── adwaita.scss
│   │   └── catppuccin-mocha.scss
│   ├── themeswitcher/
│   │   ├── config.jsonc
│   │   └── styles.css
│   ├── walker/
│   │   └── catppuccin-mocha/
│   │       ├── config.json
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   └── waybar/
│       ├── adwaita-dark/
│       │   ├── adwaita-colored-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-adwaita.scss
│       ├── catppuccin-mocha-docked/
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       ├── catppuccin-mocha-docked-color-buttons/
│       │   ├── catppuccin-mocha-colored-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       ├── catppuccin-mocha-docked-flat-buttons/
│       │   ├── catppuccin-mocha-flat-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       └── scripts/
│           └── get_weather.sh
├── installers/
│   ├── install
│   ├── thinkfan
│   └── zsh
├── nixos/
│   ├── configs/
│   │   ├── home-configs/
│   │   │   ├── kitty.nix
│   │   │   ├── styling.nix
│   │   │   ├── waybar.nix
│   │   │   └── zsh.nix
│   │   └── nixos-configs/
│   │       ├── bluetooth.nix
│   │       ├── nixvim/
│   │       │   ├── autopairs.nix
│   │       │   ├── bufferline.nix
│   │       │   ├── conform.nix
│   │       │   ├── dashboard.nix
│   │       │   ├── efmls.nix
│   │       │   ├── keymaps.nix
│   │       │   ├── lsp-format.nix
│   │       │   ├── lsp-servers.nix
│   │       │   ├── lsp.nix
│   │       │   ├── neo-tree.nix
│   │       │   ├── nvim-cmp.nix
│   │       │   ├── nvim.nix
│   │       │   ├── prettier.nix
│   │       │   ├── telescope.nix
│   │       │   ├── treesitter.nix
│   │       │   └── whichkey.nix
│   │       ├── programs.nix
│   │       ├── services.nix
│   │       └── tlp.nix
│   ├── flake.nix
│   ├── global-dotfiles/
│   │   ├── gtklock/
│   │   │   ├── config.ini
│   │   │   └── style.css
│   │   └── swaylock/
│   │       └── config
│   ├── hosts/
│   │   ├── desktop/
│   │   │   ├── configuration-desktop.nix
│   │   │   ├── hardware-configuration-desktop.nix
│   │   │   ├── home-desktop.nix
│   │   │   ├── home-dotfiles-desktop/
│   │   │   │   ├── ags/
│   │   │   │   │   ├── .eslintrc.yml
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── .stylelintrc.yml
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── js/
│   │   │   │   │   │   ├── about/
│   │   │   │   │   │   │   └── about.js
│   │   │   │   │   │   ├── applauncher/
│   │   │   │   │   │   │   ├── AppItem.js
│   │   │   │   │   │   │   └── Applauncher.js
│   │   │   │   │   │   ├── bar/
│   │   │   │   │   │   │   ├── PanelButton.js
│   │   │   │   │   │   │   ├── TopBar.js
│   │   │   │   │   │   │   └── buttons/
│   │   │   │   │   │   │       ├── BatteryBar.js
│   │   │   │   │   │   │       ├── ColorPicker.js
│   │   │   │   │   │   │       ├── DateButton.js
│   │   │   │   │   │   │       ├── FocusedClient.js
│   │   │   │   │   │   │       ├── MediaIndicator.js
│   │   │   │   │   │   │       ├── NotificationIndicator.js
│   │   │   │   │   │   │       ├── OverviewButton.js
│   │   │   │   │   │   │       ├── PowerMenu.js
│   │   │   │   │   │   │       ├── ScreenRecord.js
│   │   │   │   │   │   │       ├── SubMenu.js
│   │   │   │   │   │   │       ├── SysTray.js
│   │   │   │   │   │   │       ├── System.js
│   │   │   │   │   │   │       ├── SystemIndicators.js
│   │   │   │   │   │   │       ├── Taskbar.js
│   │   │   │   │   │   │       └── Workspaces.js
│   │   │   │   │   │   ├── dashboard/
│   │   │   │   │   │   │   ├── Dashboard.js
│   │   │   │   │   │   │   ├── DateColumn.js
│   │   │   │   │   │   │   └── NotificationColumn.js
│   │   │   │   │   │   ├── desktop/
│   │   │   │   │   │   │   ├── Desktop.js
│   │   │   │   │   │   │   └── DesktopMenu.js
│   │   │   │   │   │   ├── dock/
│   │   │   │   │   │   │   ├── Dock.js
│   │   │   │   │   │   │   └── FloatingDock.js
│   │   │   │   │   │   ├── icons.js
│   │   │   │   │   │   ├── lockscreen/
│   │   │   │   │   │   │   ├── Lockscreen.js
│   │   │   │   │   │   │   └── auth.py
│   │   │   │   │   │   ├── main.js
│   │   │   │   │   │   ├── misc/
│   │   │   │   │   │   │   ├── Avatar.js
│   │   │   │   │   │   │   ├── BatteryIcon.js
│   │   │   │   │   │   │   ├── Clock.js
│   │   │   │   │   │   │   ├── FontIcon.js
│   │   │   │   │   │   │   ├── HoverRevealer.js
│   │   │   │   │   │   │   ├── IconBrowser.js
│   │   │   │   │   │   │   ├── Notification.js
│   │   │   │   │   │   │   ├── PopupWindow.js
│   │   │   │   │   │   │   ├── Progress.js
│   │   │   │   │   │   │   ├── RegularWindow.js
│   │   │   │   │   │   │   └── mpris.js
│   │   │   │   │   │   ├── notifications/
│   │   │   │   │   │   │   └── Notifications.js
│   │   │   │   │   │   ├── options.js
│   │   │   │   │   │   ├── osd/
│   │   │   │   │   │   │   └── OSD.js
│   │   │   │   │   │   ├── overview/
│   │   │   │   │   │   │   ├── Client.js
│   │   │   │   │   │   │   ├── Overview.js
│   │   │   │   │   │   │   └── Workspace.js
│   │   │   │   │   │   ├── powermenu/
│   │   │   │   │   │   │   ├── PowerMenu.js
│   │   │   │   │   │   │   ├── ShadedPopup.js
│   │   │   │   │   │   │   └── Verification.js
│   │   │   │   │   │   ├── quicksettings/
│   │   │   │   │   │   │   ├── QuickSettings.js
│   │   │   │   │   │   │   ├── ToggleButton.js
│   │   │   │   │   │   │   └── widgets/
│   │   │   │   │   │   │       ├── AsusProfile.js
│   │   │   │   │   │   │       ├── Bluetooth.js
│   │   │   │   │   │   │       ├── Brightness.js
│   │   │   │   │   │   │       ├── DND.js
│   │   │   │   │   │   │       ├── Header.js
│   │   │   │   │   │   │       ├── Media.js
│   │   │   │   │   │   │       ├── MicMute.js
│   │   │   │   │   │   │       ├── Network.js
│   │   │   │   │   │   │       ├── Theme.js
│   │   │   │   │   │   │       └── Volume.js
│   │   │   │   │   │   ├── screencorner/
│   │   │   │   │   │   │   └── ScreenCorners.js
│   │   │   │   │   │   ├── services/
│   │   │   │   │   │   │   ├── asusctl.js
│   │   │   │   │   │   │   ├── brightness.js
│   │   │   │   │   │   │   ├── colorpicker.js
│   │   │   │   │   │   │   ├── lockscreen.js
│   │   │   │   │   │   │   ├── onScreenIndicator.js
│   │   │   │   │   │   │   ├── powermenu.js
│   │   │   │   │   │   │   └── screenrecord.js
│   │   │   │   │   │   ├── settings/
│   │   │   │   │   │   │   ├── SettingsDialog.js
│   │   │   │   │   │   │   ├── globals.js
│   │   │   │   │   │   │   ├── hyprland.js
│   │   │   │   │   │   │   ├── option.js
│   │   │   │   │   │   │   ├── scss.js
│   │   │   │   │   │   │   ├── setup.js
│   │   │   │   │   │   │   ├── theme.js
│   │   │   │   │   │   │   └── wallpaper.js
│   │   │   │   │   │   ├── themes.js
│   │   │   │   │   │   ├── utils.js
│   │   │   │   │   │   └── variables.js
│   │   │   │   │   ├── package.json
│   │   │   │   │   ├── prepare_background.sh
│   │   │   │   │   ├── scss/
│   │   │   │   │   │   ├── common/
│   │   │   │   │   │   │   ├── a11y-button.scss
│   │   │   │   │   │   │   ├── button-workspaces.scss
│   │   │   │   │   │   │   ├── button.scss
│   │   │   │   │   │   │   ├── floating-widget.scss
│   │   │   │   │   │   │   ├── hidden.scss
│   │   │   │   │   │   │   ├── menu.scss
│   │   │   │   │   │   │   ├── scrollable.scss
│   │   │   │   │   │   │   ├── slider.scss
│   │   │   │   │   │   │   ├── spacing.scss
│   │   │   │   │   │   │   ├── switch.scss
│   │   │   │   │   │   │   ├── text-border.scss
│   │   │   │   │   │   │   ├── tooltip.scss
│   │   │   │   │   │   │   ├── unset.scss
│   │   │   │   │   │   │   └── widget.scss
│   │   │   │   │   │   ├── main.scss
│   │   │   │   │   │   ├── variables.scss
│   │   │   │   │   │   └── widgets/
│   │   │   │   │   │       ├── about.scss
│   │   │   │   │   │       ├── applauncher.scss
│   │   │   │   │   │       ├── bar.scss
│   │   │   │   │   │       ├── dashboard.scss
│   │   │   │   │   │       ├── desktop.scss
│   │   │   │   │   │       ├── dock.scss
│   │   │   │   │   │       ├── lockscreen.scss
│   │   │   │   │   │       ├── media.scss
│   │   │   │   │   │       ├── notifications.scss
│   │   │   │   │   │       ├── osd.scss
│   │   │   │   │   │       ├── overview.scss
│   │   │   │   │   │       ├── powermenu.scss
│   │   │   │   │   │       ├── quicksettings.scss
│   │   │   │   │   │       └── settings.scss
│   │   │   │   │   └── tsconfig.json
│   │   │   │   ├── hypr/
│   │   │   │   │   ├── Autostart.conf
│   │   │   │   │   ├── Decoration.conf
│   │   │   │   │   ├── KeyBinds.conf
│   │   │   │   │   ├── Misc.conf
│   │   │   │   │   ├── WindowRules.conf
│   │   │   │   │   ├── hyprland.conf
│   │   │   │   │   ├── monitors.conf
│   │   │   │   │   ├── presets/
│   │   │   │   │   │   ├── monitors.exampleconf
│   │   │   │   │   │   ├── monitors_external.conf
│   │   │   │   │   │   └── monitors_internal.conf
│   │   │   │   │   └── scripts/
│   │   │   │   │       ├── brightness
│   │   │   │   │       ├── launch_ags.sh
│   │   │   │   │       ├── monitor_attached.sh
│   │   │   │   │       └── monitor_dettached.sh
│   │   │   │   ├── kitty/
│   │   │   │   │   └── kitty.conf
│   │   │   │   └── neofetch/
│   │   │   │       ├── ascii.txt
│   │   │   │       └── config.conf
│   │   │   ├── home-programs-desktop.nix
│   │   │   └── link-dotfiles-desktop.nix
│   │   └── laptop/
│   │       ├── configs-laptop/
│   │       │   └── thinkfan.nix
│   │       ├── configuration-laptop.nix
│   │       ├── hardware-configuration-laptop.nix
│   │       ├── home-dotfiles-laptop/
│   │       │   ├── ags/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── config.js
│   │       │   │   ├── default.nix
│   │       │   │   ├── greeter/
│   │       │   │   │   ├── auth.ts
│   │       │   │   │   ├── greeter.scss
│   │       │   │   │   ├── greeter.ts
│   │       │   │   │   ├── session.ts
│   │       │   │   │   └── statusbar.ts
│   │       │   │   ├── greeter.js
│   │       │   │   ├── lib/
│   │       │   │   │   ├── battery.ts
│   │       │   │   │   ├── experiments.ts
│   │       │   │   │   ├── gtk.ts
│   │       │   │   │   ├── hyprland.ts
│   │       │   │   │   ├── icons.ts
│   │       │   │   │   ├── init.ts
│   │       │   │   │   ├── matugen.ts
│   │       │   │   │   ├── notifications.ts
│   │       │   │   │   ├── option.ts
│   │       │   │   │   ├── session.ts
│   │       │   │   │   ├── swww.ts
│   │       │   │   │   ├── tmux.ts
│   │       │   │   │   ├── utils.ts
│   │       │   │   │   └── variables.ts
│   │       │   │   ├── main.ts
│   │       │   │   ├── options.ts
│   │       │   │   ├── package.json
│   │       │   │   ├── service/
│   │       │   │   │   ├── asusctl.ts
│   │       │   │   │   ├── brightness.ts
│   │       │   │   │   ├── colorpicker.ts
│   │       │   │   │   ├── powermenu.ts
│   │       │   │   │   └── screenrecord.ts
│   │       │   │   ├── style/
│   │       │   │   │   ├── extra.scss
│   │       │   │   │   ├── mixins/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── media.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   └── style.ts
│   │       │   │   ├── tsconfig.json
│   │       │   │   └── widget/
│   │       │   │       ├── PopupWindow.ts
│   │       │   │       ├── RegularWindow.ts
│   │       │   │       ├── applauncher/
│   │       │   │       │   ├── AppItem.ts
│   │       │   │       │   ├── Applauncher.ts
│   │       │   │       │   └── applauncher.scss
│   │       │   │       ├── bar/
│   │       │   │       │   ├── Bar.ts
│   │       │   │       │   ├── PanelButton.ts
│   │       │   │       │   ├── ScreenCorners.ts
│   │       │   │       │   ├── bar.scss
│   │       │   │       │   ├── buttons/
│   │       │   │       │   │   ├── BatteryBar.ts
│   │       │   │       │   │   ├── ColorPicker.ts
│   │       │   │       │   │   ├── Date.ts
│   │       │   │       │   │   ├── Launcher.ts
│   │       │   │       │   │   ├── Media.ts
│   │       │   │       │   │   ├── Messages.ts
│   │       │   │       │   │   ├── PowerMenu.ts
│   │       │   │       │   │   ├── ScreenRecord.ts
│   │       │   │       │   │   ├── SysTray.ts
│   │       │   │       │   │   ├── SystemIndicators.ts
│   │       │   │       │   │   ├── Taskbar.ts
│   │       │   │       │   │   └── Workspaces.ts
│   │       │   │       │   └── screencorner.scss
│   │       │   │       ├── datemenu/
│   │       │   │       │   ├── DateColumn.ts
│   │       │   │       │   ├── DateMenu.ts
│   │       │   │       │   ├── NotificationColumn.ts
│   │       │   │       │   └── datemenu.scss
│   │       │   │       ├── desktop/
│   │       │   │       │   └── Desktop.ts
│   │       │   │       ├── notifications/
│   │       │   │       │   ├── Notification.ts
│   │       │   │       │   ├── NotificationPopups.ts
│   │       │   │       │   └── notifications.scss
│   │       │   │       ├── osd/
│   │       │   │       │   ├── OSD.ts
│   │       │   │       │   ├── Progress.ts
│   │       │   │       │   └── osd.scss
│   │       │   │       ├── overview/
│   │       │   │       │   ├── Overview.ts
│   │       │   │       │   ├── Window.ts
│   │       │   │       │   ├── Workspace.ts
│   │       │   │       │   └── overview.scss
│   │       │   │       ├── powermenu/
│   │       │   │       │   ├── PowerMenu.ts
│   │       │   │       │   ├── Verification.ts
│   │       │   │       │   └── powermenu.scss
│   │       │   │       ├── quicksettings/
│   │       │   │       │   ├── QuickSettings.ts
│   │       │   │       │   ├── ToggleButton.ts
│   │       │   │       │   ├── quicksettings.scss
│   │       │   │       │   └── widgets/
│   │       │   │       │       ├── AsusProfile.ts
│   │       │   │       │       ├── Bluetooth.ts
│   │       │   │       │       ├── Brightness.ts
│   │       │   │       │       ├── DND.ts
│   │       │   │       │       ├── DarkMode.ts
│   │       │   │       │       ├── Header.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── MicMute.ts
│   │       │   │       │       ├── Network.ts
│   │       │   │       │       └── Volume.ts
│   │       │   │       └── settings/
│   │       │   │           ├── Group.ts
│   │       │   │           ├── Page.ts
│   │       │   │           ├── Row.ts
│   │       │   │           ├── Setter.ts
│   │       │   │           ├── SettingsDialog.ts
│   │       │   │           ├── layout.ts
│   │       │   │           └── settingsdialog.scss
│   │       │   ├── ags_js/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── .stylelintrc.yml
│   │       │   │   ├── config.js
│   │       │   │   ├── js/
│   │       │   │   │   ├── about/
│   │       │   │   │   │   └── about.js
│   │       │   │   │   ├── applauncher/
│   │       │   │   │   │   ├── AppItem.js
│   │       │   │   │   │   └── Applauncher.js
│   │       │   │   │   ├── bar/
│   │       │   │   │   │   ├── PanelButton.js
│   │       │   │   │   │   ├── TopBar.js
│   │       │   │   │   │   └── buttons/
│   │       │   │   │   │       ├── BatteryBar.js
│   │       │   │   │   │       ├── ColorPicker.js
│   │       │   │   │   │       ├── DateButton.js
│   │       │   │   │   │       ├── FocusedClient.js
│   │       │   │   │   │       ├── MediaIndicator.js
│   │       │   │   │   │       ├── NotificationIndicator.js
│   │       │   │   │   │       ├── OverviewButton.js
│   │       │   │   │   │       ├── PowerMenu.js
│   │       │   │   │   │       ├── ScreenRecord.js
│   │       │   │   │   │       ├── SubMenu.js
│   │       │   │   │   │       ├── SysTray.js
│   │       │   │   │   │       ├── System.js
│   │       │   │   │   │       ├── SystemIndicators.js
│   │       │   │   │   │       ├── Taskbar.js
│   │       │   │   │   │       └── Workspaces.js
│   │       │   │   │   ├── dashboard/
│   │       │   │   │   │   ├── Dashboard.js
│   │       │   │   │   │   ├── DateColumn.js
│   │       │   │   │   │   └── NotificationColumn.js
│   │       │   │   │   ├── desktop/
│   │       │   │   │   │   ├── Desktop.js
│   │       │   │   │   │   └── DesktopMenu.js
│   │       │   │   │   ├── dock/
│   │       │   │   │   │   ├── Dock.js
│   │       │   │   │   │   └── FloatingDock.js
│   │       │   │   │   ├── icons.js
│   │       │   │   │   ├── lockscreen/
│   │       │   │   │   │   ├── Lockscreen.js
│   │       │   │   │   │   └── auth.py
│   │       │   │   │   ├── main.js
│   │       │   │   │   ├── misc/
│   │       │   │   │   │   ├── Avatar.js
│   │       │   │   │   │   ├── BatteryIcon.js
│   │       │   │   │   │   ├── Clock.js
│   │       │   │   │   │   ├── FontIcon.js
│   │       │   │   │   │   ├── HoverRevealer.js
│   │       │   │   │   │   ├── IconBrowser.js
│   │       │   │   │   │   ├── Notification.js
│   │       │   │   │   │   ├── PopupWindow.js
│   │       │   │   │   │   ├── Progress.js
│   │       │   │   │   │   ├── RegularWindow.js
│   │       │   │   │   │   └── mpris.js
│   │       │   │   │   ├── notifications/
│   │       │   │   │   │   └── Notifications.js
│   │       │   │   │   ├── options.js
│   │       │   │   │   ├── osd/
│   │       │   │   │   │   └── OSD.js
│   │       │   │   │   ├── overview/
│   │       │   │   │   │   ├── Client.js
│   │       │   │   │   │   ├── Overview.js
│   │       │   │   │   │   └── Workspace.js
│   │       │   │   │   ├── powermenu/
│   │       │   │   │   │   ├── PowerMenu.js
│   │       │   │   │   │   ├── ShadedPopup.js
│   │       │   │   │   │   └── Verification.js
│   │       │   │   │   ├── quicksettings/
│   │       │   │   │   │   ├── QuickSettings.js
│   │       │   │   │   │   ├── ToggleButton.js
│   │       │   │   │   │   └── widgets/
│   │       │   │   │   │       ├── AsusProfile.js
│   │       │   │   │   │       ├── Bluetooth.js
│   │       │   │   │   │       ├── Brightness.js
│   │       │   │   │   │       ├── DND.js
│   │       │   │   │   │       ├── Header.js
│   │       │   │   │   │       ├── Media.js
│   │       │   │   │   │       ├── MicMute.js
│   │       │   │   │   │       ├── Network.js
│   │       │   │   │   │       ├── Theme.js
│   │       │   │   │   │       └── Volume.js
│   │       │   │   │   ├── screencorner/
│   │       │   │   │   │   └── ScreenCorners.js
│   │       │   │   │   ├── services/
│   │       │   │   │   │   ├── asusctl.js
│   │       │   │   │   │   ├── brightness.js
│   │       │   │   │   │   ├── colorpicker.js
│   │       │   │   │   │   ├── lockscreen.js
│   │       │   │   │   │   ├── onScreenIndicator.js
│   │       │   │   │   │   ├── powermenu.js
│   │       │   │   │   │   └── screenrecord.js
│   │       │   │   │   ├── settings/
│   │       │   │   │   │   ├── SettingsDialog.js
│   │       │   │   │   │   ├── globals.js
│   │       │   │   │   │   ├── hyprland.js
│   │       │   │   │   │   ├── option.js
│   │       │   │   │   │   ├── scss.js
│   │       │   │   │   │   ├── setup.js
│   │       │   │   │   │   ├── theme.js
│   │       │   │   │   │   └── wallpaper.js
│   │       │   │   │   ├── themes.js
│   │       │   │   │   ├── utils.js
│   │       │   │   │   └── variables.js
│   │       │   │   ├── package.json
│   │       │   │   ├── prepare_background.sh
│   │       │   │   ├── scss/
│   │       │   │   │   ├── common/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button-workspaces.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── menu.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── text-border.scss
│   │       │   │   │   │   ├── tooltip.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   ├── main.scss
│   │       │   │   │   ├── variables.scss
│   │       │   │   │   └── widgets/
│   │       │   │   │       ├── about.scss
│   │       │   │   │       ├── applauncher.scss
│   │       │   │   │       ├── bar.scss
│   │       │   │   │       ├── dashboard.scss
│   │       │   │   │       ├── desktop.scss
│   │       │   │   │       ├── dock.scss
│   │       │   │   │       ├── lockscreen.scss
│   │       │   │   │       ├── media.scss
│   │       │   │   │       ├── notifications.scss
│   │       │   │   │       ├── osd.scss
│   │       │   │   │       ├── overview.scss
│   │       │   │   │       ├── powermenu.scss
│   │       │   │   │       ├── quicksettings.scss
│   │       │   │   │       └── settings.scss
│   │       │   │   └── tsconfig.json
│   │       │   ├── ags_ts_old/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── config.js
│   │       │   │   ├── default.nix
│   │       │   │   ├── lib/
│   │       │   │   │   ├── battery.ts
│   │       │   │   │   ├── experiments.ts
│   │       │   │   │   ├── gtk.ts
│   │       │   │   │   ├── hyprland.ts
│   │       │   │   │   ├── icons.ts
│   │       │   │   │   ├── init.ts
│   │       │   │   │   ├── matugen.ts
│   │       │   │   │   ├── option.ts
│   │       │   │   │   ├── swww.ts
│   │       │   │   │   ├── tmux.ts
│   │       │   │   │   ├── utils.ts
│   │       │   │   │   └── variables.ts
│   │       │   │   ├── main.ts
│   │       │   │   ├── options.ts
│   │       │   │   ├── package.json
│   │       │   │   ├── service/
│   │       │   │   │   ├── asusctl.ts
│   │       │   │   │   ├── brightness.ts
│   │       │   │   │   ├── colorpicker.ts
│   │       │   │   │   ├── powermenu.ts
│   │       │   │   │   └── screenrecord.ts
│   │       │   │   ├── style/
│   │       │   │   │   ├── mixins/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── media.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   ├── style.ts
│   │       │   │   │   └── widget/
│   │       │   │   │       ├── applauncher.scss
│   │       │   │   │       ├── bar.scss
│   │       │   │   │       ├── datemenu.scss
│   │       │   │   │       ├── extra.scss
│   │       │   │   │       ├── notifications.scss
│   │       │   │   │       ├── osd.scss
│   │       │   │   │       ├── overview.scss
│   │       │   │   │       ├── powermenu.scss
│   │       │   │   │       ├── quicksettings.scss
│   │       │   │   │       ├── screencorner.scss
│   │       │   │   │       └── settingsdialog.scss
│   │       │   │   ├── tsconfig.json
│   │       │   │   └── widget/
│   │       │   │       ├── PopupWindow.ts
│   │       │   │       ├── applauncher/
│   │       │   │       │   ├── AppItem.ts
│   │       │   │       │   └── Applauncher.ts
│   │       │   │       ├── bar/
│   │       │   │       │   ├── Bar.ts
│   │       │   │       │   ├── PanelButton.ts
│   │       │   │       │   ├── ScreenCorners.ts
│   │       │   │       │   └── buttons/
│   │       │   │       │       ├── BatteryBar.ts
│   │       │   │       │       ├── ColorPicker.ts
│   │       │   │       │       ├── Date.ts
│   │       │   │       │       ├── Launcher.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── Messages.ts
│   │       │   │       │       ├── PowerMenu.ts
│   │       │   │       │       ├── ScreenRecord.ts
│   │       │   │       │       ├── SysTray.ts
│   │       │   │       │       ├── SystemIndicators.ts
│   │       │   │       │       ├── Taskbar.ts
│   │       │   │       │       └── Workspaces.ts
│   │       │   │       ├── datemenu/
│   │       │   │       │   ├── DateColumn.ts
│   │       │   │       │   ├── DateMenu.ts
│   │       │   │       │   └── NotificationColumn.ts
│   │       │   │       ├── desktop/
│   │       │   │       │   └── Desktop.ts
│   │       │   │       ├── notifications/
│   │       │   │       │   ├── Notification.ts
│   │       │   │       │   └── NotificationPopups.ts
│   │       │   │       ├── osd/
│   │       │   │       │   ├── OSD.ts
│   │       │   │       │   └── Progress.ts
│   │       │   │       ├── overview/
│   │       │   │       │   ├── Overview.ts
│   │       │   │       │   ├── Window.ts
│   │       │   │       │   └── Workspace.ts
│   │       │   │       ├── powermenu/
│   │       │   │       │   ├── PowerMenu.ts
│   │       │   │       │   └── Verification.ts
│   │       │   │       ├── quicksettings/
│   │       │   │       │   ├── QuickSettings.ts
│   │       │   │       │   ├── ToggleButton.ts
│   │       │   │       │   └── widgets/
│   │       │   │       │       ├── AsusProfile.ts
│   │       │   │       │       ├── Bluetooth.ts
│   │       │   │       │       ├── Brightness.ts
│   │       │   │       │       ├── DND.ts
│   │       │   │       │       ├── DarkMode.ts
│   │       │   │       │       ├── Header.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── MicMute.ts
│   │       │   │       │       ├── Network.ts
│   │       │   │       │       └── Volume.ts
│   │       │   │       └── settings/
│   │       │   │           ├── Group.ts
│   │       │   │           ├── Page.ts
│   │       │   │           ├── Row.ts
│   │       │   │           ├── SettingsDialog.ts
│   │       │   │           └── layout.ts
│   │       │   ├── anyrun/
│   │       │   │   └── stylesheet.css
│   │       │   ├── hypr/
│   │       │   │   ├── Autostart.conf
│   │       │   │   ├── KeyBinds.conf
│   │       │   │   ├── Misc.conf
│   │       │   │   ├── WindowRules.conf
│   │       │   │   ├── hypridle.conf
│   │       │   │   ├── hyprland.conf
│   │       │   │   ├── hyprlock.conf
│   │       │   │   ├── monitors.conf
│   │       │   │   ├── presets/
│   │       │   │   │   ├── monitors.exampleconf
│   │       │   │   │   ├── monitors_external.conf
│   │       │   │   │   └── monitors_internal.conf
│   │       │   │   └── scripts/
│   │       │   │       ├── brightness
│   │       │   │       ├── launch_ags.sh
│   │       │   │       ├── logoutlaunch.sh
│   │       │   │       ├── monitor_attached.sh
│   │       │   │       ├── monitor_dettached.sh
│   │       │   │       └── w2m.sh
│   │       │   ├── neofetch/
│   │       │   │   ├── ascii.txt
│   │       │   │   └── config.conf
│   │       │   ├── screenlock/
│   │       │   │   ├── lock.sh
│   │       │   │   ├── lock_config.conf
│   │       │   │   └── lock_screen.sh
│   │       │   └── waybar/
│   │       │       ├── config.jsonc
│   │       │       └── launch.sh
│   │       ├── home-laptop.nix
│   │       ├── home-programs-laptop.nix
│   │       └── link-dotfiles-laptop.nix
│   ├── nixos.nix
│   ├── overlays/
│   │   ├── betaflight-configurator.nix
│   │   ├── blhelisuite32.nix
│   │   ├── default.bkp
│   │   └── test.nix
│   ├── packages.nix
│   ├── pkgs/
│   │   ├── default.nix
│   │   └── kanagawa-gtk-theme.nix
│   └── variables.nix
└── scripts/
    ├── blepower.sh
    ├── sleep.sh
    ├── update.sh
    └── wifipower.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
Backups/
dependencies..
backgrounds/last/image.png
backgrounds/last/image_blurred.png
hypr/monitors.conf
hypr/Workspaces.conf
Code/


================================================
FILE: README.md
================================================
![alt text](https://raw.githubusercontent.com/trinib/trinib/82213791fa9ff58d3ca768ddd6de2489ec23ffca/images/footer.svg)

# 👀 **Screenshots** 
![Hyprland_new](https://github.com/RoccoRakete/hyprland-dots/assets/44879342/0acf96c1-93b5-4c9a-9e71-7775172904d4)

---

# ⏰ **Updates**
 * This has changed quiet a lot...
   * These dotfiles are now intended to be used with NixOS. 
   * I removed the ability to set GTK-Themes/Icons due to weird behaviors... This styling is now to be done with home-manager.
   * More small changes has been made. 
 * works with ags > 1.5.0! If you want to use it with ags < 1.5.0 please use: "ags_old_working_1.4.x"
 * Added the ability to set GTK-Themes/Icons directly from the ags config. -> This got removed! 
 * Pywal-Themes can also be set from the ags config.
 * Needs Ags v1.4.0 to work correctly now... 
 * Rofi Wallpaper switcher is now available. 
 * Added a systemresource monitor to the bar.

# 🔧 **Stuff used** 
* GTK-Theme: [Mostly Adwaita/adw-gtk3.](https://github.com/lassekongo83/adw-gtk3)
* Icons: [MoreWaita](https://github.com/somepaulo/MoreWaita)
* Compositor: [Hyprland](https://github.com/hyprwm/Hyprland)
* Shell: [ags](https://github.com/Aylur/ags)
* Terminal: [Kitty](https://github.com/kovidgoyal/kitty)
* [Wallaper shown on the pictures](https://github.com/AngelJumbo/gruvbox-wallpapers/blob/main/wallpapers/irl/stairs.jpg)

# 🎨 **The Ags-Shell** 
When I first started using ags I thought, OMG: Why is this so hard and complicated ...

... but it's really not. If you want to make some minor adjustments to the shell, it's highly recommended, that you learn some JavaScript and (S)CSS for styling.

JavaScript is a quiet simple programming language and since you already have a useful project to work with, it's easy to try out and make changes on the fly :) 

There is also a nice [Wiki](https://github.com/Aylur/ags/wiki)!

The volume is controlled by ags, with Hyprland like this:
```
bind = , XF86AudioRaiseVolume , exec , ags run-js "audio.speaker.volume += 0.05; indicator.speaker()"
bind = , XF86AudioLowerVolume , exec , ags run-js "audio.speaker.volume -= 0.05; indicator.speaker()"
```
... this triggers the OSD to show up too!
This should work with brightness control too, but I can't verify this, since I'm not using Linux on a Laptop.

# ⚙️ **!!obsolete!! GTK-Themes / GTK-Icons / PyWall-Themes**
![Screenshot_19-11-23_12-20](https://github.com/RoccoRakete/hyprland-dots/assets/44879342/0a197c8a-e0d8-40e4-acf2-7d17771c5bb7)


* The refering options are: ```misc.pywal.theme:``` ```misc.gtk.theme:``` ```misc.gtkIcons.theme:```

  ### Make sure these namings match exactly the themes you want to use! 
  Otherwise the last used theme will be used.
  * Pywall-Themes can be found [here.](https://adamrutter.github.io/pywal-themes-preview/)
    Or simply by running ```wal --theme``` in your terminal and just picking one.
    
  GTK-Icons and GTK-Themes should have the exact same naming as found in ```~/.themes/``` for example.
  
  After you have set up everything, it's just a matter of chaning the themes from the settings panel! :)
  
  Have fun! 

# 📜 **Installation**
If you still want to use this with anything other than NixOS, this is the stuff you need to install:

If you install [ags](https://github.com/Aylur/ags/wiki/installation) and [Hyprland](https://wiki.hyprland.org/Getting-Started/Installation/) you're 99% ready to go. 

Forthermore I recommend installing the following things: 
* [playerctl](https://github.com/altdesktop/playerctl) for proper media control.
* [A nerdfont](https://www.nerdfonts.com/) for displaying icons.
* [Anyrun](https://github.com/Kirottu/anyrun) as an application launcher, web search and many more. Although ags has it's own application launcher, I like anyrun much more since It's capable of also doing websearches and much more! :D 
* [GTK-Lock](https://github.com/jovanlanik/gtklock) ... same thing goes with anyrun. I just like it much more, but this is totaly up to you!



[![Anurag's GitHub stats-Dark](https://github-readme-stats.vercel.app/api?username=RoccoRakete&show_icons=true&theme=dark#gh-dark-mode-only)](https://github.com/anuraghazra/github-readme-stats#gh-dark-mode-only)


================================================
FILE: backgrounds/last/.comments/image_blurred.png.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<comment version="3.0">
  <caption>rosé pine</caption>
  <note/>
  <place/>
  <categories/>
</comment>


================================================
FILE: cfg/anyrun/adwaita-dark/config.ron
================================================
Config(
  x: Fraction(0.500000),
  y: Fraction(0.300000),
  width: Fraction(0.250000),
  height: Absolute(0),
  hide_icons: false,
  ignore_exclusive_zones: true,
  layer: Overlay,
  hide_plugin_info: true,
  close_on_click: true,
  show_results_immediately: true,
  max_entries: None,
  plugins: ["/nix/store/78s37pd0a67zzwvvy9nf5c26yp98pcc3-applications-0.1.0/lib/libapplications.so"],
)


================================================
FILE: cfg/anyrun/adwaita-dark/launch.sh
================================================
#!/usr/bin/env sh

# Adwaita

sassc $HOME/.config/anyrun/style-adwaita.scss $HOME/.config/anyrun/style.css

anyrun


================================================
FILE: cfg/anyrun/adwaita-dark/style-adwaita.scss
================================================
@import "./adwaita.scss";

window {
  background: transparent;
  /* rgba(0, 0, 0, 0.8);*/
}

#match,
#entry,
#plugin,
#main {
  background: transparent;
}

#match.activatable {
  padding: 12px 14px;
  border-radius: 12px;

  color: white;
  margin-top: 4px;
  border: 2px solid transparent;
  transition: all 0.3s ease;
}

#match.activatable:not(:first-child) {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  /* border-top: 2px solid rgba(255, 255, 255, 0.1); */
}

#match.activatable #match-title {
  font-size: 1.3rem;
  font-weight: bolder;
}

#match.activatable:hover {
  background: $bg-color;
}

#match-title,
#match-desc {
  color: inherit;
}

#match.activatable:hover,
#match.activatable:selected {
  border-top-left-radius: 12px;
  border-top-right-radius: 12px;
}

#match.activatable:selected+#match.activatable,
#match.activatable:hover+#match.activatable {
  border-top: 2px solid transparent;
}

#match.activatable:selected,
#match.activatable:hover:selected {
  background: $bg-color;
}

#match,
#plugin {
  box-shadow: none;
}

#entry {
  padding-left: 18px;
  font-size: 1.2rem;
  font-weight: bolder;
  color: $fg_color;
  background: $bg_color;
  box-shadow: none;
  border-radius: 12px;
  border: $border $selected_bg_color;
}

box#main {
  background: $widget-bg;
  border-radius: 20px;
  padding: 15px;
  /* box-shadow: 0px 2px 33px -5px rgba(0, 0, 0, 0.5); */
}

row:first-child {
  margin-top: 6px;
}


================================================
FILE: cfg/anyrun/catppuccin-mocha/config.ron
================================================
Config(
  x: Fraction(0.500000),
  y: Fraction(0.300000),
  width: Fraction(0.250000),
  height: Absolute(0),
  hide_icons: false,
  ignore_exclusive_zones: true,
  layer: Overlay,
  hide_plugin_info: true,
  close_on_click: true,
  show_results_immediately: true,
  max_entries: None,
  plugins: ["libapplications.so"],
)


================================================
FILE: cfg/anyrun/catppuccin-mocha/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

sassc $HOME/.config/anyrun/style-catppuccin-mocha.scss $HOME/.config/anyrun/style.css

anyrun


================================================
FILE: cfg/anyrun/catppuccin-mocha/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";

window {
  background: transparent;
  /* rgba(0, 0, 0, 0.8);*/
}

#match,
#entry,
#plugin,
#main {
  background: transparent;
}

#match.activatable {
  padding: 12px 14px;
  border-radius: 12px;

  color: white;
  margin-top: 4px;
  border: 2px solid transparent;
  transition: all 0.3s ease;
}

#match.activatable:not(:first-child) {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
  /* border-top: 2px solid rgba(255, 255, 255, 0.1); */
}

#match.activatable #match-title {
  font-size: 1.3rem;
  font-weight: bolder;
}

#match.activatable:hover {
  background: $bg_color;
}

#match-title,
#match-desc {
  color: inherit;
}

#match.activatable:hover,
#match.activatable:selected {
  border-top-left-radius: 12px;
  border-top-right-radius: 12px;
}

#match.activatable:selected+#match.activatable,
#match.activatable:hover+#match.activatable {
  border-top: 2px solid transparent;
}

#match.activatable:selected,
#match.activatable:hover:selected {
  color: $color-fg;
  background: $selected_bg_color;
}

#match,
#plugin {
  box-shadow: none;
}

#entry {
  padding-left: 18px;
  font-size: 1.2rem;
  font-weight: bolder;
  color: $fg_color;
  background: $bg_color;
  box-shadow: none;
  border-radius: 12px;
  border: $border $selected_bg_color;
  background-color: $grid-bg;
}

box#main {
  background: $widget-bg;
  border-radius: 20px;
  padding: 15px;
  /* box-shadow: 0px 2px 33px -5px rgba(0, 0, 0, 0.5); */
}

row:first-child {
  margin-top: 6px;
}


================================================
FILE: cfg/hypr/adwaita-dark/Decoration.conf
================================================
# ############################################################################# #
#   _   _                  _                 _    ____             __ _         #
#  | | | |_   _ _ __  _ __| | __ _ _ __   __| |  / ___|___  _ __  / _(_) __ _   #
#  | |_| | | | | '_ \| '__| |/ _` | '_ \ / _` | | |   / _ \| '_ \| |_| |/ _` |  #
#  |  _  | |_| | |_) | |  | | (_| | | | | (_| | | |__| (_) | | | |  _| | (_| |  #
#  |_| |_|\__, | .__/|_|  |_|\__,_|_| |_|\__,_|  \____\___/|_| |_|_| |_|\__, |  #
#        |___/|_|                                                      |___/    #
#                                                                               #
# ############################################################################# #


# See https://wiki.hyprland.org/Configuring/Variables/ for more
general {
    gaps_in                 = 3
    gaps_out                = 10
    border_size             = 0
    col.active_border       = rgba(b4befecc)
    col.inactive_border     = rgba(77767bcc)
    layout                  = dwindle
    resize_on_border        = true
    allow_tearing           = true
}


# See https://wiki.hyprland.org/Configuring/Variables/ for more
decoration {
    # rounding
    rounding              = 10
    dim_inactive          = true 
    dim_strength          = 0.3

    blur {
        # blur
        enabled           = false
        new_optimizations = true
        
        #enabled           = true
        #brightness        = 1.0
        #contrast          = 1.0
        #noise             = 2.0e-2
        #passes            = 3
        #popups            = true
        #size              = 10
        #new_optimizations = true
    }

    # shadow
    drop_shadow            = true 
    shadow_range           = 10
    shadow_ignore_window   = true
    shadow_offset          = 0 2
    shadow_range           = 30
    shadow_render_power    = 3
    col.shadow             = rgba(00000055)
}

animations {
    enabled   = true
    bezier    = fluent_decel  , 0    , 0.2  , 0.4  , 1
    bezier    = easeOutCirc   , 0    , 0.55 , 0.45 , 1
    bezier    = easeOutCubic  , 0.33 , 1    , 0.68 , 1
    bezier    = easeinoutsine , 0.37 , 0    , 0.63 , 1

    # Windows
    animation = windowsIn   , 1 , 3 , fluent_decel  ,       # window open
    animation = windowsOut  , 1 , 5 , fluent_decel  ,       # window close.
    animation = windowsMove , 1 , 2 , easeinoutsine , slide # everything in between, moving, dragging, resizing.
    
    # Fade
    animation = fadeIn      , 1 , 3   , easeOutCubic        # fade in (open) -> layers and windows
    animation = fadeOut     , 1 , 1.7 , easeOutCubic        # fade out (close) -> layers and windows
    animation = fadeSwitch  , 0 , 1   , easeOutCirc         # fade on changing activewindow and its opacity
    animation = fadeShadow  , 1 , 10  , easeOutCirc         # fade on changing activewindow for shadows
    animation = fadeDim     , 1 , 4   , fluent_decel        # the easing of the dimming of inactive windows
    animation = border      , 1 , 2.7 , easeOutCirc         # for animating the border's color switch speed
    animation = borderangle , 1 , 30  , fluent_decel , once # for animating the border's gradient angle - styles: once (default), loop
    animation = workspaces  , 1 , 2   , easeOutCubic
}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile     = false 
    preserve_split = true # you probably want this
    force_split    = 2
    smart_split    = false
    smart_resizing = true
}

# Layerrules
#layerrule = blur, waybar 
layerrule = animation workspaces, swaync-control-center 


================================================
FILE: cfg/hypr/catppuccin-mocha/Decoration.conf
================================================
# ############################################################################# #
#   _   _                  _                 _    ____             __ _         #
#  | | | |_   _ _ __  _ __| | __ _ _ __   __| |  / ___|___  _ __  / _(_) __ _   #
#  | |_| | | | | '_ \| '__| |/ _` | '_ \ / _` | | |   / _ \| '_ \| |_| |/ _` |  #
#  |  _  | |_| | |_) | |  | | (_| | | | | (_| | | |__| (_) | | | |  _| | (_| |  #
#  |_| |_|\__, | .__/|_|  |_|\__,_|_| |_|\__,_|  \____\___/|_| |_|_| |_|\__, |  #
#        |___/|_|                                                      |___/    #
#                                                                               #
# ############################################################################# #


# See https://wiki.hyprland.org/Configuring/Variables/ for more
general {
    gaps_in                 = 3
    gaps_out                = 10
    border_size             = 3
    col.active_border       = rgba(b4befecc)
    col.inactive_border     = rgba(77767bcc)
    layout                  = dwindle
    resize_on_border        = true
    allow_tearing           = true
}


# See https://wiki.hyprland.org/Configuring/Variables/ for more
decoration {
    # rounding
    rounding              = 10
    dim_inactive          = true 
    dim_strength          = 0.2

    blur {
        # blur
        #enabled           = false
        #new_optimizations = true
        
        enabled           = true
        brightness        = 1.0
        contrast          = 1.0
        noise             = 2.0e-2
        passes            = 3
        popups            = true
        size              = 10
        new_optimizations = true
    }

    # shadow
    drop_shadow            = true 
    shadow_range           = 10
    shadow_ignore_window   = true
    shadow_offset          = 0 2
    shadow_range           = 30
    shadow_render_power    = 3
    col.shadow             = rgba(00000055)
}

animations {
    enabled   = true
    bezier    = fluent_decel  , 0    , 0.2  , 0.4  , 1
    bezier    = easeOutCirc   , 0    , 0.55 , 0.45 , 1
    bezier    = easeOutCubic  , 0.33 , 1    , 0.68 , 1
    bezier    = easeinoutsine , 0.37 , 0    , 0.63 , 1

    # Windows
    animation = windowsIn   , 1 , 3 , fluent_decel  ,       # window open
    animation = windowsOut  , 1 , 5 , fluent_decel  ,       # window close.
    animation = windowsMove , 1 , 2 , easeinoutsine , slide # everything in between, moving, dragging, resizing.
    
    # Fade
    animation = fadeIn      , 1 , 3   , easeOutCubic        # fade in (open) -> layers and windows
    animation = fadeOut     , 1 , 1.7 , easeOutCubic        # fade out (close) -> layers and windows
    animation = fadeSwitch  , 0 , 1   , easeOutCirc         # fade on changing activewindow and its opacity
    animation = fadeShadow  , 1 , 10  , easeOutCirc         # fade on changing activewindow for shadows
    animation = fadeDim     , 1 , 4   , fluent_decel        # the easing of the dimming of inactive windows
    animation = border      , 1 , 2.7 , easeOutCirc         # for animating the border's color switch speed
    animation = borderangle , 1 , 30  , fluent_decel , once # for animating the border's gradient angle - styles: once (default), loop
    animation = workspaces  , 1 , 2   , easeOutCubic
}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile     = false 
    preserve_split = true # you probably want this
    force_split    = 2
    smart_split    = false
    smart_resizing = true
}

# Layerrules
layerrule = blur, waybar 
layerrule = animation workspaces, swaync-control-center 


================================================
FILE: cfg/swaync/adwaita-dark/config.json
================================================
{
  "$schema": "./configSchema.json",
  "positionX": "right",
  "positionY": "top",
  "control-center-margin-top": 0,
  "control-center-margin-bottom": 0,
  "control-center-margin-right": 0,
  "control-center-margin-left": 0,
  "notification-icon-size": 64,
  "notification-body-image-height": 100,
  "notification-body-image-width": 200,
  "timeout": 10,
  "timeout-low": 5,
  "timeout-critical": 0,
  "fit-to-screen": false,
  "control-center-width": 500,
  "control-center-height": 800,
  "notification-window-width": 500,
  "keyboard-shortcuts": true,
  "image-visibility": "when-available",
  "transition-time": 200,
  "hide-on-clear": false,
  "hide-on-action": true,
  "script-fail-notify": true,
  "scripts": {
    "example-script": {
      "exec": "echo 'Do something...'",
      "urgency": "Normal"
    }
  },
  "notification-visibility": {
    "example-name": {
      "state": "muted",
      "urgency": "Low",
      "app-name": "Spotify"
    }
  },
  "widgets": [
    "label",
    "buttons-grid",
    "volume",
    "backlight",
    "title",
    "dnd",
    "notifications",
    "mpris"
  ],
  "widget-config": {
    "title": {
      "text": "Notifications",
      "clear-all-button": true,
      "button-text": "Clear All"
    },
    "dnd": {
      "text": "Do Not Disturb"
    },
    "label": {
      "max-lines": 1,
      "text": "Control Center"
    },
    "mpris": {
      "image-size": 96,
      "image-radius": 12
    },
    "backlight": {
      "label": "",
      "device": "intel_backlight",
      "min": 10
    },
    "backlight#KB": {
      "label": " ",
      "device": "asus::kbd_backlight",
      "subsystem": "leds"
    },
    "volume": {
      "label": ""
    },
    "menubar#label": {
      "menu#power-buttons": {
        "label": "",
        "position": "right",
        "actions": [
          {
            "label": " Reboot",
            "command": "systemctl reboot"
          },
          {
            "label": " Lock",
            "command": "hyprlock"
          },
          {
            "label": " Logout",
            "command": "hyprctl exit"
          },
          {
            "label": " Shut down",
            "command": "systemctl poweroff"
          }
        ]
      },
      "buttons#topbar-buttons": {
        "position": "left",
        "actions": [
          {
            "label": "",
            "command": "grim"
          },
          {
            "label": "",
            "command": "grim"
          }
        ]
      }
    },
    "buttons-grid": {
      "actions": [
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/wifipower.sh"
        },
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/blepower.sh"
        },
        {
          "label": "󰒲",
          "command": "/home/martin/.dots/scripts/sleep.sh"
        },
        {
          "label": "󰚰",
          "command": "/home/martin/.dots/scripts/update.sh"
        },
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/update.sh"
        },
        {
          "label": "󰚰",
          "command": "/home/martin/.dots/scripts/update.sh"
        }
      ]
    }
  }
}


================================================
FILE: cfg/swaync/adwaita-dark/configSchema.json
================================================
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "SwayNotificationCenter JSON schema",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "type": "string",
      "description": "Pointer to the schema against which this document should be validated."
    },
    "positionX": {
      "type": "string",
      "description": "Horizontal position of control center and notification window",
      "default": "right",
      "enum": ["right", "left", "center"]
    },
    "layer": {
      "type": "string",
      "description": "Layer of notification window",
      "default": "overlay",
      "enum": ["background", "bottom", "top", "overlay"]
    },
    "layer-shell": {
      "type": "boolean",
      "description": "Wether or not the windows should be opened as layer-shell surfaces. Note: Requires swaync restart to apply",
      "default": true
    },
    "cssPriority": {
      "type": "string",
      "description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css",
      "default": "user",
      "enum": ["user"]
    },
    "positionY": {
      "type": "string",
      "description": "Vertical position of control center and notification window",
      "default": "top",
      "enum": ["top", "center", "bottom"]
    },
    "control-center-positionX": {
      "type": "string",
      "description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`",
      "default": "none",
      "enum": ["right", "left", "center", "none"]
    },
    "control-center-positionY": {
      "type": "string",
      "description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`",
      "default": "none",
      "enum": ["top", "bottom", "none"]
    },
    "control-center-margin-top": {
      "type": "integer",
      "description": "The margin (in pixels) at the top of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-bottom": {
      "type": "integer",
      "description": "The margin (in pixels) at the bottom of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-right": {
      "type": "integer",
      "description": "The margin (in pixels) at the right of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-left": {
      "type": "integer",
      "description": "The margin (in pixels) at the left of the control center. 0 to disable",
      "default": 0
    },
    "control-center-layer": {
      "type": "string",
      "description": "Layer of control center window",
      "default": "none",
      "enum": ["background", "bottom", "top", "overlay", "none"]
    },
    "control-center-exclusive-zone": {
      "type": "boolean",
      "description": "Whether or not the control center should follow the compositors exclusive zones. An example would be setting it to \"false\" to cover your panel/dock.",
      "default": true
    },
    "notification-2fa-action": {
      "type": "boolean",
      "description": "If each notification should display a 'COPY \"1234\"' action",
      "default": true
    },
    "notification-inline-replies": {
      "type": "boolean",
      "description": "If notifications should display a text field to reply if the sender requests it. NOTE: Replying in popup notifications is only available if the compositor supports GTK Layer-Shell ON_DEMAND keyboard interactivity.",
      "default": false
    },
    "notification-icon-size": {
      "type": "integer",
      "description": "The notification icon size (in pixels). The app icon size is 1/3",
      "default": 64,
      "minimum": 16
    },
    "notification-body-image-height": {
      "type": "integer",
      "description": "The notification body image height (in pixels)",
      "default": 100,
      "minimum": 100
    },
    "notification-body-image-width": {
      "type": "integer",
      "description": "The notification body image width (in pixels)",
      "default": 200,
      "minimum": 200
    },
    "timeout": {
      "type": "integer",
      "description": "The notification timeout for notifications with normal priority",
      "default": 10
    },
    "timeout-low": {
      "type": "integer",
      "description": "The notification timeout for notifications with low priority",
      "default": 5
    },
    "timeout-critical": {
      "type": "integer",
      "description": "The notification timeout for notifications with critical priority. 0 to disable",
      "default": 0
    },
    "notification-window-width": {
      "type": "integer",
      "description": "Width of the notification in pixels",
      "default": 500
    },
    "fit-to-screen": {
      "type": "boolean",
      "description": "If the control center should expand to both edges of the screen",
      "default": true
    },
    "relative-timestamps": {
      "type": "boolean",
      "description": "Display notification timestamps relative to now e.g. \"26 minutes ago\". If false, a local iso8601-formatted absolute timestamp is displayed.",
      "default": true
    },
    "control-center-height": {
      "type": "integer",
      "description": "Height of the control center in pixels. Ignored when 'fit-to-screen' is set to 'true'",
      "default": 600,
      "minimum": 300
    },
    "control-center-width": {
      "type": "integer",
      "description": "Width of the control center in pixels",
      "default": 500,
      "minimum": 300
    },
    "keyboard-shortcuts": {
      "type": "boolean",
      "description": "If control center should use keyboard shortcuts",
      "default": true
    },
    "image-visibility": {
      "type": "string",
      "description": "The notification image visibility when no icon is available.",
      "default": "when-available",
      "enum": ["always", "when-available", "never"]
    },
    "transition-time": {
      "type": "integer",
      "description": "The notification animation duration. 0 to disable",
      "default": 200
    },
    "hide-on-clear": {
      "type": "boolean",
      "description": "Hides the control center after pressing \"Clear All\"",
      "default": false
    },
    "hide-on-action": {
      "type": "boolean",
      "description": "Hides the control center when clicking on notification action",
      "default": true
    },
    "script-fail-notify": {
      "type": "boolean",
      "description": "Sends a notification if a script fails to run",
      "default": true
    },
    "scripts": {
      "type": "object",
      "description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.",
      "minProperties": 1,
      "additionalProperties": false,
      "patternProperties": {
        "^.{1,}$": {
          "type": "object",
          "description": "Your script object.",
          "required": ["exec"],
          "minProperties": 2,
          "additionalProperties": false,
          "properties": {
            "exec": {
              "type": "string",
              "description": "The script to run. Can also run regular shell commands."
            },
            "app-name": {
              "type": "string",
              "description": "The app-name. Uses Regex."
            },
            "desktop-entry": {
              "type": "string",
              "description": "The desktop-entry. Uses Regex."
            },
            "summary": {
              "type": "string",
              "description": "The summary of the notification. Uses Regex."
            },
            "body": {
              "type": "string",
              "description": "The body of the notification. Uses Regex."
            },
            "urgency": {
              "type": "string",
              "description": "The urgency of the notification.",
              "default": "Normal",
              "enum": ["Low", "Normal", "Critical"]
            },
            "category": {
              "type": "string",
              "description": "Which category the notification belongs to. Uses Regex."
            },
            "run-on": {
              "type": "string",
              "description": "Whether to run the script on an action being activated, or when the notification is received.",
              "enum": ["action", "receive"],
              "default": "receive"
            }
          }
        }
      }
    },
    "notification-visibility": {
      "type": "object",
      "description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.",
      "minProperties": 1,
      "additionalProperties": false,
      "patternProperties": {
        "^.{1,}$": {
          "type": "object",
          "description": "Your script object.",
          "required": ["state"],
          "minProperties": 2,
          "additionalProperties": false,
          "properties": {
            "state": {
              "type": "string",
              "description": "The notification visibility state.",
              "default": "enabled",
              "enum": ["ignored", "muted", "enabled", "transient"]
            },
            "app-name": {
              "type": "string",
              "description": "The app-name. Uses Regex."
            },
            "desktop-entry": {
              "type": "string",
              "description": "The desktop-entry. Uses Regex."
            },
            "summary": {
              "type": "string",
              "description": "The summary of the notification. Uses Regex."
            },
            "body": {
              "type": "string",
              "description": "The body of the notification. Uses Regex."
            },
            "urgency": {
              "type": "string",
              "description": "The urgency of the notification.",
              "default": "Normal",
              "enum": ["Low", "Normal", "Critical"]
            },
            "override-urgency": {
              "type": "string",
              "description": "The new urgency of the notification (optional)",
              "default": "unset",
              "enum": ["unset", "low", "normal", "critical"]
            },
            "category": {
              "type": "string",
              "description": "Which category the notification belongs to. Uses Regex."
            }
          }
        }
      }
    },
    "widgets": {
      "type": "array",
      "description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.",
      "default": ["inhibitors", "title", "dnd", "notifications"],
      "items": {
        "type": "string",
        "$comment": "Sadly can't use regex and enums at the same time. Fix in the future?",
        "pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$"
      }
    },
    "widget-config": {
      "type": "object",
      "description": "Configure specific widget properties.",
      "additionalProperties": false,
      "$comment": "New widgets go here in \"patternProperties\" ↓",
      "patternProperties": {
        "^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$comment": "References the widget structure from \"widgets\" below",
          "$ref": "#/widgets/title"
        },
        "^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/dnd"
        },
        "^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/label"
        },
        "^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/mpris"
        },
        "^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/buttons-grid"
        },
        "^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/menubar"
        },
        "^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/volume"
        },
        "^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/backlight"
        },
        "^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$comment": "References the widget structure from \"widgets\" below",
          "$ref": "#/widgets/inhibitors"
        }
      }
    }
  },
  "widgets": {
    "$comment": "New widgets go here",
    "title": {
      "type": "object",
      "description": "Control Center Title Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Notifications"
        },
        "clear-all-button": {
          "type": "boolean",
          "description": "Wether to display a \"Clear All\" button",
          "default": true
        },
        "button-text": {
          "type": "string",
          "description": "\"Clear All\" button text",
          "default": "Clear All"
        }
      }
    },
    "dnd": {
      "type": "object",
      "description": "Control Center Do Not Disturb Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Do Not Disturb"
        }
      }
    },
    "label": {
      "type": "object",
      "description": "A generic widget that allows the user to add custom text",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The text content of the widget",
          "default": "Label Text"
        },
        "max-lines": {
          "type": "integer",
          "description": "The maximum lines",
          "default": 5
        }
      }
    },
    "mpris": {
      "type": "object",
      "description": "A widget that displays multiple music players",
      "additionalProperties": false,
      "properties": {
        "image-size": {
          "type": "integer",
          "description": "The size of the album art",
          "default": 96
        },
        "image-radius": {
          "type": "integer",
          "description": "The border radius of the album art. Will be overriden by setting the border-radius in the style.css for the \".widget-mpris-album-art\" class",

          "default": 12
        },
        "blur": {
          "type": "bool",
          "description": "Appy the artwork as the MPRIS background and blur it",
          "default": true
        }
      }
    },
    "buttons-grid": {
      "type": "object",
      "description": "A widget to add a grid of buttons that execute shell commands",
      "additionalProperties": false,
      "properties": {
        "actions": {
          "type": "array",
          "description": "A list of actions containing a label and a command",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "description": "Text to be displayed in button",
                "default": "label"
              },
              "command": {
                "type": "string",
                "description": "Command to be executed on click",
                "default": ""
              },
              "type": {
                "type": "string",
                "description": "Type of the button; toggle buttons receive the .active css class and an env variable 'SWAYNC_TOGGLE_STATE' is set. See example in the default config.json",
                "default": "normal",
                "enum": ["normal", "toggle"]
              },
              "update-command": {
                "type": "string",
                "description": "Command to be executed on visibility change of cc to update the active state of the toggle button (should echo true or false)",
                "default": ""
              },
              "active": {
                  "type": "bool",
                  "description": "Wether the toggle button is active as default or not",
                  "default": false
              }
            }
          }
        }
      }
    },
    "menubar": {
      "type": "object",
      "description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons",
      "additionalProperties": false,
      "patternProperties": {
        "^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "type": "object",
          "description": "A button that opens a dropdown with action-buttons",
          "additionalProperties": false,
          "properties": {
            "label": {
              "type": "string",
              "description": "Text to be displayed in button",
              "default": "Menu"
            },
            "position": {
              "type": "string",
              "description": "Horizontal position of the button in the bar",
              "default": "right",
              "enum": ["right", "left"]
            },
            "animation-type": {
              "type": "string",
              "default": "slide_down",
              "description": "Animation type for menu",
              "enum": ["slide_down", "slide_up", "none"]
            },
            "animation-duration":{
              "type": "integer",
              "default": 250,
              "description": "Duration of animation in milliseconds"
            },
            "actions": {
              "$ref" : "#/widgets/buttons-grid/properties/actions"
            }
          }
        },
        "^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "type": "object",
          "description": "A list of action-buttons to be displayed in the topbar",
          "additionalProperties": false,
          "properties": {
            "position": {
              "type": "string",
              "description": "Horizontal position of the button in the bar",
              "default": "right",
              "enum": ["right", "left"]
            },
            "actions": {
              "$ref" : "#/widgets/buttons-grid/properties/actions"
            }
          }
        }
      }
    },
    "volume": {
      "type": "object",
      "description": "Slider to control pulse volume",
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string",
          "description": "Text displayed in front of the volume slider",
          "default": "Volume"
        },
        "show-per-app": {
          "type": "boolean",
          "default": false,
          "description": "Show per app volume control"
        },
        "show-per-app-icon": {
          "type": "boolean",
          "default": true,
          "description": "Show application icon in per app control"
        },
        "show-per-app-label": {
          "type": "boolean",
          "default": false,
          "description": "Show application name in per app control"
        },
        "empty-list-label": {
          "type": "string",
          "default": "No active sink input",
          "description": "Text displayed when there are not active sink inputs"
        },
        "expand-button-label": {
          "type": "string",
          "default": "⇧",
          "description": "Label displayed on button to show per app volume control"
        },
        "collapse-button-label": {
          "type": "string",
          "default": "⇩",
          "description": "Label displayed on button to hide per app volume control"
        },
        "icon-size": {
          "type": "integer",
          "default": 24,
          "description": "Size of the application icon in per app volume control"
        },
        "animation-type": {
          "type": "string",
          "default": "slide_down",
          "description": "Animation type for menu",
          "enum": ["slide_down", "slide_up", "none"]
        },
        "animation-duration":{
          "type": "integer",
          "default": 250,
          "description": "Duration of animation in milliseconds"
        }
      }
    },
    "backlight": {
      "type": "object",
      "description": "Slider to control monitor brightness",
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string",
          "description": "Text displayed in front of the backlight slider",
          "default": "Brightness"
        },
        "device": {
          "type": "string",
          "description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)",
          "default": "intel_backlight"
        },
        "subsystem": {
          "type": "string",
          "description": "Kernel subsystem for brightness control",
          "default": "backlight",
          "enum": ["backlight", "leds"]
        },
        "min": {
          "type": "integer",
          "default": 0,
          "description": "Lowest possible value for brightness"
        }
      }
    },
    "inhibitors": {
      "type": "object",
      "description": "Control Center Inhibitors Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Inhibitors"
        },
        "clear-all-button": {
          "type": "boolean",
          "description": "Wether to display a \"Clear All\" button",
          "default": true
        },
        "button-text": {
          "type": "string",
          "description": "\"Clear All\" button text",
          "default": "Clear All"
        }
      }
    }
  }
}


================================================
FILE: cfg/swaync/adwaita-dark/launch.sh
================================================
#!/usr/bin/env sh

# Adwaita

sassc $HOME/.config/swaync/style-adwaita.scss $HOME/.config/swaync/style.css

swaync-client -R
swaync-client -rs
swaync-client -t


================================================
FILE: cfg/swaync/adwaita-dark/style-adwaita.scss
================================================
@import "./catppuccin-mocha.scss";

.text-button:hover,
.text-button.control-center-clear-all:hover {
  color: $color-fg;
  background-color: $button-bg-focus;
  transition: linear 0.25s;
}

.notification-row {
  outline: none;
}

.notification-row:focus,
.notification-row:hover {
  background: $button-bg-focus;
}

.notification-row .notification-background {
  padding: $widget-margin $widget-margin;
}

.notification-row .notification-background .close-button {
  /* The notification Close Button */
  background: $grid-bg;
  color: $text-color;
  text-shadow: none;
  padding: 0;
  border-radius: 100%;
  margin-top: $spacing;
  margin-right: $spacing;
  box-shadow: none;
  border: none;
  min-width: $font-size*1.5;
  min-height: $font-size*1.5;
}

.notification-row .notification-background .close-button:hover {
  box-shadow: none;
  background: $close-button-bg;
  transition: background 0.15s ease-in-out;
  border: none;
}

.notification-row .notification-background .notification {
  /* The actual notification */
  border-radius: $radii;
  border: $widget-border;
  border-radius: $radii;
  padding: 0;
  transition: background 0.15s ease-in-out;
  background: $widget-bg;
}

.notification-row .notification-background .notification.low {
  /* Low Priority Notification */
}

.notification-row .notification-background .notification.normal {
  /* Normal Priority Notification */
}

.notification-row .notification-background .notification.critical {
  /* Critical Priority Notification */
}

.notification-row .notification-background .notification .notification-action,
.notification-row .notification-background .notification .notification-default-action {
  padding: 0px;
  margin: 0;
  box-shadow: none;
  background: transparent;
  border: none;
  color: $text-color;
  transition: background 0.15s ease-in-out;
}

.notification-row .notification-background .notification .notification-action:hover,
.notification-row .notification-background .notification .notification-default-action:hover {
  -gtk-icon-effect: none;
  background: $button-bg;
}

.notification-row .notification-background .notification .notification-default-action {
  /* The large action that also displays the notification summary and body */
  border-radius: $radii;
}

.notification-row .notification-background .notification .notification-default-action:not(:only-child) {
  /* When alternative actions are visible */
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}

.notification-row .notification-background .notification .notification-default-action .notification-content {
  background: transparent;
  border-radius: $radii;
  padding: $spacing;
  padding-right: $spacing*3;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .image {
  /* Notification Primary Image */
  -gtk-icon-effect: none;
  border-radius: $radii;
  /* Size in px */
  margin: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon {
  /* Notification app icon (only visible when the primary image is set) */
  -gtk-icon-effect: none;
  -gtk-icon-shadow: 0 1px 4px black;
  margin: $spacing*2;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary {
  /* Notification summary/title */
  font-size: 1.1em;
  font-weight: bolder;
  background: transparent;
  color: $text-color;
  text-shadow: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time {
  /* Notification time-ago */
  font-size: 1.1em;
  font-weight: bolder;
  background: transparent;
  color: $text-color;
  text-shadow: none;
  margin-right: $spacing*10;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body {
  /* Notification body */
  font-size: 1.1em;
  font-weight: normal;
  background: transparent;
  color: $text-color;
  text-shadow: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content progressbar {
  /* The optional notification progress bar */
  margin-top: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .body-image {
  /* The "extra" optional bottom notification image */
  margin-top: $spacing;
  background-color: $text-color;
  border-radius: $radii;
  -gtk-icon-effect: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply {
  /* The inline reply section */
  margin-top: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry {
  background: $button-bg-darker;
  color: $text-color;
  caret-color: $text-color;
  border: 1px solid $dark_1;
  border-radius: $radii;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
  margin-left: $spacing;
  background: $grid-bg;
  border: 1px solid $dark_1;
  border-radius: $radii;
  color: $text-color;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled {
  background: initial;
  color: $text-color-disabled;
  border: 1px solid $dark_1;
  border-color: transparent;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover {
  background: $button-bg;
}

.notification-row .notification-background .notification .notification-action {
  /* The alternative actions below the default action */
  border-top: 1px solid $dark_1;
  border-radius: 0px;
  border-right: 1px solid $dark_1;
}

.notification-row .notification-background .notification .notification-action:first-child {
  /* add bottom border radius to eliminate clipping */
  border-bottom-left-radius: $radii;
}

.notification-row .notification-background .notification .notification-action:last-child {
  border-bottom-right-radius: $radii;
  border-right: none;
}

.notification-group {
  /* Styling only for Grouped Notifications */
}

.notification-group.low {
  /* Low Priority Group */
}

.notification-group.normal {
  /* Low Priority Group */
}

.notification-group.critical {
  /* Low Priority Group */
}

.notification-group .notification-group-buttons,
.notification-group .notification-group-headers {
  margin: 0 16px;
  color: $text-color;
}

.notification-group .notification-group-headers {
  /* Notification Group Headers */
}

.notification-group .notification-group-headers .notification-group-icon {
  color: $text-color;
}

.notification-group .notification-group-headers .notification-group-header {
  color: $text-color;
}

.notification-group .notification-group-buttons {
  /* Notification Group Buttons */
}

.notification-group.collapsed .notification-row .notification {
  background-color: $button-bg;
}

.notification-group.collapsed .notification-row:not(:last-child) {
  /* Top notification in stack */
  /* Set lower stacked notifications opacity to 0 */
}

.notification-group.collapsed .notification-row:not(:last-child) .notification-action,
.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action {
  opacity: 0;
}

.notification-group.collapsed:hover .notification-row:not(:only-child) .notification {
  background-color: $button-bg;
}

.control-center {
  /* The Control Center which contains the old notifications + widgets */
  background: $widget-bg;
  color: $text-color;
  margin: $widget-margin;
  border: $widget-border;
  border-radius: $widget-radii;
}

.control-center .control-center-list-placeholder {
  /* The placeholder when there are no notifications */
  opacity: 0.5;
}

.control-center .control-center-list {
  /* List of notifications */
  background: transparent;
}

.control-center .control-center-list .notification {
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3);
}

.control-center .control-center-list .notification .notification-default-action,
.control-center .control-center-list .notification .notification-action {
  transition: opacity 400ms ease-in-out, background 0.15s ease-in-out;
}

.control-center .control-center-list .notification .notification-default-action:hover,
.control-center .control-center-list .notification .notification-action:hover {
  background-color: $button-bg;
}

.blank-window {
  /* Window behind control center and on all other monitors */
  background: transparent;
}

.floating-notifications {
  background: transparent;
}

.floating-notifications .notification {
  box-shadow: none;
}

/*** Widgets ***/
/* Title widget */
.widget-title {
  color: $text-color;
  margin: $widget-margin;
  font-size: 1.5rem;
}

.widget-title>button {
  font-size: initial;
  color: $text-color;
  text-shadow: none;
  background: $button-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
  border-radius: $radii;
}

.widget-title>button:hover {
  background: $button-bg;
}

/* DND widget */
.widget-dnd {
  color: $text-color;
  margin: $widget-margin;
  font-size: 1.1rem;
}

.widget-dnd>switch {
  font-size: initial;
  border-radius: $radii;
  background: $grid-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
}

.widget-dnd>switch:checked {
  background: $bg-selected;
  color: white;
}

.widget-dnd>switch slider {
  background: $button-bg;
  border-radius: $radii;
}

/* Label widget */
.widget-label {
  margin: $widget-margin;
  margin-left: $widget-margin*2;
}

.widget-label>label {
  font-weight: bold;
  font-size: 1.5em;
}

/* Mpris widget */
$mpris-album-art-overlay: rgba(0, 0, 0, 0.55);
$mpris-button-hover: rgba(0, 0, 0, 0.50);

.widget-mpris {
  /* The parent to all players */
}

.widget-mpris .widget-mpris-player {
  padding: $widget-padding;
  margin: $widget-margin $widget-margin;
  background-color: $mpris-album-art-overlay;
  border-radius: $widget-radii;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
}

.widget-mpris .widget-mpris-player button:hover {
  /* The media player buttons (play, pause, next, etc...) */
  background: $button-bg;
}

.widget-mpris .widget-mpris-player .widget-mpris-album-art {
  border-radius: $radii;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
}

.widget-mpris .widget-mpris-player .widget-mpris-title {
  font-weight: bold;
  font-size: 1.25rem;
}

.widget-mpris .widget-mpris-player .widget-mpris-subtitle {
  font-size: 1.1rem;
}

.widget-mpris .widget-mpris-player>box>button {
  /* Change player control buttons */
}

.widget-mpris .widget-mpris-player>box>button:hover {
  background-color: $mpris-button-hover;
}

.widget-mpris>box>button {
  /* Change player side buttons */
}

.widget-mpris>box>button:disabled {
  /* Change player side buttons insensitive */
}

/* Buttons widget */
.widget-buttons-grid {
  padding: $widget-padding;
  margin: $widget-margin;
  border-radius: $widget-radii;
  background-color: $grid-bg;
}

.widget-buttons-grid>flowbox>flowboxchild>button {
  background: $button-bg;
  border-radius: $radii;
}

.widget-buttons-grid>flowbox>flowboxchild>button.toggle:checked {
  /* style given to the active toggle button */
}

/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
  border: none;
  background: transparent;
}

/* .AnyName { Name defined in config after #
  background-color: $noti-bg;
  padding: 8px;
  margin: 8px;
  border-radius: 12px;
}

.AnyName>button {
  background: transparent;
  border: none;
}

.AnyName>button:hover {
  background-color: $noti-bg-hover;
} */
.topbar-buttons>button {
  /* Name defined in config after # */
  border: none;
  background: transparent;
}

/* Volume widget */
.widget-volume,
.widget-backlight {
  background-color: $grid-bg;
  padding: $widget-padding;
  padding-left: $widget-padding*2;
  margin: $widget-margin;
  margin-left: $widget-margin;
  margin-right: $widget-margin;
  border-radius: $widget-radii;
}

.widget-volume {
  margin-top: 0;
  margin-bottom: 0;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}

.widget-backlight {
  margin-top: 0;
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

.widget-volume>box>button {
  background: transparent;
  border: none;
}

.per-app-volume {
  padding: 4px 8px 8px 8px;
  margin: 0px 8px 8px 8px;
  border-radius: $radii;
}

/* Inhibitors widget */
.widget-inhibitors {
  margin: $widget-margin;
  font-size: 1.5rem;
}

.widget-inhibitors>button {
  font-size: initial;
  color: $text-color;
  text-shadow: none;
  background: $grid-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
  border-radius: $radii;
}

.widget-inhibitors>button:hover {
  background: $button-bg;
}


================================================
FILE: cfg/swaync/catppuccin-mocha/config.json
================================================
{
  "$schema": "./configSchema.json",
  "positionX": "right",
  "positionY": "top",
  "control-center-margin-top": 0,
  "control-center-margin-bottom": 0,
  "control-center-margin-right": 0,
  "control-center-margin-left": 0,
  "notification-icon-size": 64,
  "notification-body-image-height": 100,
  "notification-body-image-width": 200,
  "timeout": 10,
  "timeout-low": 5,
  "timeout-critical": 0,
  "fit-to-screen": false,
  "control-center-width": 500,
  "control-center-height": 800,
  "notification-window-width": 500,
  "keyboard-shortcuts": true,
  "image-visibility": "when-available",
  "transition-time": 200,
  "hide-on-clear": false,
  "hide-on-action": true,
  "script-fail-notify": true,
  "scripts": {
    "example-script": {
      "exec": "echo 'Do something...'",
      "urgency": "Normal"
    }
  },
  "notification-visibility": {
    "example-name": {
      "state": "muted",
      "urgency": "Low",
      "app-name": "Spotify"
    }
  },
  "widgets": [
    "label",
    "buttons-grid",
    "volume",
    "backlight",
    "title",
    "dnd",
    "notifications",
    "mpris"
  ],
  "widget-config": {
    "title": {
      "text": "Notifications",
      "clear-all-button": true,
      "button-text": "Clear All"
    },
    "dnd": {
      "text": "Do Not Disturb"
    },
    "label": {
      "max-lines": 1,
      "text": "Control Center"
    },
    "mpris": {
      "image-size": 96,
      "image-radius": 12
    },
    "backlight": {
      "label": "",
      "device": "intel_backlight",
      "min": 10
    },
    "backlight#KB": {
      "label": " ",
      "device": "asus::kbd_backlight",
      "subsystem": "leds"
    },
    "volume": {
      "label": ""
    },
    "menubar#label": {
      "menu#power-buttons": {
        "label": "",
        "position": "right",
        "actions": [
          {
            "label": " Reboot",
            "command": "systemctl reboot"
          },
          {
            "label": " Lock",
            "command": "hyprlock"
          },
          {
            "label": " Logout",
            "command": "hyprctl exit"
          },
          {
            "label": " Shut down",
            "command": "systemctl poweroff"
          }
        ]
      },
      "buttons#topbar-buttons": {
        "position": "left",
        "actions": [
          {
            "label": "",
            "command": "grim"
          },
          {
            "label": "",
            "command": "grim"
          }
        ]
      }
    },
    "buttons-grid": {
      "actions": [
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/wifipower.sh"
        },
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/blepower.sh"
        },
        {
          "label": "󰒲",
          "command": "/home/martin/.dots/scripts/sleep.sh"
        },
        {
          "label": "󰚰",
          "command": "/home/martin/.dots/scripts/update.sh"
        },
        {
          "label": "",
          "command": "/home/martin/.dots/scripts/update.sh"
        },
        {
          "label": "󰚰",
          "command": "/home/martin/.dots/scripts/update.sh"
        }
      ]
    }
  }
}


================================================
FILE: cfg/swaync/catppuccin-mocha/configSchema.json
================================================
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "SwayNotificationCenter JSON schema",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "type": "string",
      "description": "Pointer to the schema against which this document should be validated."
    },
    "positionX": {
      "type": "string",
      "description": "Horizontal position of control center and notification window",
      "default": "right",
      "enum": ["right", "left", "center"]
    },
    "layer": {
      "type": "string",
      "description": "Layer of notification window",
      "default": "overlay",
      "enum": ["background", "bottom", "top", "overlay"]
    },
    "layer-shell": {
      "type": "boolean",
      "description": "Wether or not the windows should be opened as layer-shell surfaces. Note: Requires swaync restart to apply",
      "default": true
    },
    "cssPriority": {
      "type": "string",
      "description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-3.0/gtk.css",
      "default": "user",
      "enum": ["user"]
    },
    "positionY": {
      "type": "string",
      "description": "Vertical position of control center and notification window",
      "default": "top",
      "enum": ["top", "center", "bottom"]
    },
    "control-center-positionX": {
      "type": "string",
      "description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`",
      "default": "none",
      "enum": ["right", "left", "center", "none"]
    },
    "control-center-positionY": {
      "type": "string",
      "description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`",
      "default": "none",
      "enum": ["top", "bottom", "none"]
    },
    "control-center-margin-top": {
      "type": "integer",
      "description": "The margin (in pixels) at the top of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-bottom": {
      "type": "integer",
      "description": "The margin (in pixels) at the bottom of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-right": {
      "type": "integer",
      "description": "The margin (in pixels) at the right of the control center. 0 to disable",
      "default": 0
    },
    "control-center-margin-left": {
      "type": "integer",
      "description": "The margin (in pixels) at the left of the control center. 0 to disable",
      "default": 0
    },
    "control-center-layer": {
      "type": "string",
      "description": "Layer of control center window",
      "default": "none",
      "enum": ["background", "bottom", "top", "overlay", "none"]
    },
    "control-center-exclusive-zone": {
      "type": "boolean",
      "description": "Whether or not the control center should follow the compositors exclusive zones. An example would be setting it to \"false\" to cover your panel/dock.",
      "default": true
    },
    "notification-2fa-action": {
      "type": "boolean",
      "description": "If each notification should display a 'COPY \"1234\"' action",
      "default": true
    },
    "notification-inline-replies": {
      "type": "boolean",
      "description": "If notifications should display a text field to reply if the sender requests it. NOTE: Replying in popup notifications is only available if the compositor supports GTK Layer-Shell ON_DEMAND keyboard interactivity.",
      "default": false
    },
    "notification-icon-size": {
      "type": "integer",
      "description": "The notification icon size (in pixels). The app icon size is 1/3",
      "default": 64,
      "minimum": 16
    },
    "notification-body-image-height": {
      "type": "integer",
      "description": "The notification body image height (in pixels)",
      "default": 100,
      "minimum": 100
    },
    "notification-body-image-width": {
      "type": "integer",
      "description": "The notification body image width (in pixels)",
      "default": 200,
      "minimum": 200
    },
    "timeout": {
      "type": "integer",
      "description": "The notification timeout for notifications with normal priority",
      "default": 10
    },
    "timeout-low": {
      "type": "integer",
      "description": "The notification timeout for notifications with low priority",
      "default": 5
    },
    "timeout-critical": {
      "type": "integer",
      "description": "The notification timeout for notifications with critical priority. 0 to disable",
      "default": 0
    },
    "notification-window-width": {
      "type": "integer",
      "description": "Width of the notification in pixels",
      "default": 500
    },
    "fit-to-screen": {
      "type": "boolean",
      "description": "If the control center should expand to both edges of the screen",
      "default": true
    },
    "relative-timestamps": {
      "type": "boolean",
      "description": "Display notification timestamps relative to now e.g. \"26 minutes ago\". If false, a local iso8601-formatted absolute timestamp is displayed.",
      "default": true
    },
    "control-center-height": {
      "type": "integer",
      "description": "Height of the control center in pixels. Ignored when 'fit-to-screen' is set to 'true'",
      "default": 600,
      "minimum": 300
    },
    "control-center-width": {
      "type": "integer",
      "description": "Width of the control center in pixels",
      "default": 500,
      "minimum": 300
    },
    "keyboard-shortcuts": {
      "type": "boolean",
      "description": "If control center should use keyboard shortcuts",
      "default": true
    },
    "image-visibility": {
      "type": "string",
      "description": "The notification image visibility when no icon is available.",
      "default": "when-available",
      "enum": ["always", "when-available", "never"]
    },
    "transition-time": {
      "type": "integer",
      "description": "The notification animation duration. 0 to disable",
      "default": 200
    },
    "hide-on-clear": {
      "type": "boolean",
      "description": "Hides the control center after pressing \"Clear All\"",
      "default": false
    },
    "hide-on-action": {
      "type": "boolean",
      "description": "Hides the control center when clicking on notification action",
      "default": true
    },
    "script-fail-notify": {
      "type": "boolean",
      "description": "Sends a notification if a script fails to run",
      "default": true
    },
    "scripts": {
      "type": "object",
      "description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.",
      "minProperties": 1,
      "additionalProperties": false,
      "patternProperties": {
        "^.{1,}$": {
          "type": "object",
          "description": "Your script object.",
          "required": ["exec"],
          "minProperties": 2,
          "additionalProperties": false,
          "properties": {
            "exec": {
              "type": "string",
              "description": "The script to run. Can also run regular shell commands."
            },
            "app-name": {
              "type": "string",
              "description": "The app-name. Uses Regex."
            },
            "desktop-entry": {
              "type": "string",
              "description": "The desktop-entry. Uses Regex."
            },
            "summary": {
              "type": "string",
              "description": "The summary of the notification. Uses Regex."
            },
            "body": {
              "type": "string",
              "description": "The body of the notification. Uses Regex."
            },
            "urgency": {
              "type": "string",
              "description": "The urgency of the notification.",
              "default": "Normal",
              "enum": ["Low", "Normal", "Critical"]
            },
            "category": {
              "type": "string",
              "description": "Which category the notification belongs to. Uses Regex."
            },
            "run-on": {
              "type": "string",
              "description": "Whether to run the script on an action being activated, or when the notification is received.",
              "enum": ["action", "receive"],
              "default": "receive"
            }
          }
        }
      }
    },
    "notification-visibility": {
      "type": "object",
      "description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.",
      "minProperties": 1,
      "additionalProperties": false,
      "patternProperties": {
        "^.{1,}$": {
          "type": "object",
          "description": "Your script object.",
          "required": ["state"],
          "minProperties": 2,
          "additionalProperties": false,
          "properties": {
            "state": {
              "type": "string",
              "description": "The notification visibility state.",
              "default": "enabled",
              "enum": ["ignored", "muted", "enabled", "transient"]
            },
            "app-name": {
              "type": "string",
              "description": "The app-name. Uses Regex."
            },
            "desktop-entry": {
              "type": "string",
              "description": "The desktop-entry. Uses Regex."
            },
            "summary": {
              "type": "string",
              "description": "The summary of the notification. Uses Regex."
            },
            "body": {
              "type": "string",
              "description": "The body of the notification. Uses Regex."
            },
            "urgency": {
              "type": "string",
              "description": "The urgency of the notification.",
              "default": "Normal",
              "enum": ["Low", "Normal", "Critical"]
            },
            "override-urgency": {
              "type": "string",
              "description": "The new urgency of the notification (optional)",
              "default": "unset",
              "enum": ["unset", "low", "normal", "critical"]
            },
            "category": {
              "type": "string",
              "description": "Which category the notification belongs to. Uses Regex."
            }
          }
        }
      }
    },
    "widgets": {
      "type": "array",
      "description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.",
      "default": ["inhibitors", "title", "dnd", "notifications"],
      "items": {
        "type": "string",
        "$comment": "Sadly can't use regex and enums at the same time. Fix in the future?",
        "pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$"
      }
    },
    "widget-config": {
      "type": "object",
      "description": "Configure specific widget properties.",
      "additionalProperties": false,
      "$comment": "New widgets go here in \"patternProperties\" ↓",
      "patternProperties": {
        "^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$comment": "References the widget structure from \"widgets\" below",
          "$ref": "#/widgets/title"
        },
        "^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/dnd"
        },
        "^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/label"
        },
        "^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/mpris"
        },
        "^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/buttons-grid"
        },
        "^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/menubar"
        },
        "^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/volume"
        },
        "^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$ref": "#/widgets/backlight"
        },
        "^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "$comment": "References the widget structure from \"widgets\" below",
          "$ref": "#/widgets/inhibitors"
        }
      }
    }
  },
  "widgets": {
    "$comment": "New widgets go here",
    "title": {
      "type": "object",
      "description": "Control Center Title Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Notifications"
        },
        "clear-all-button": {
          "type": "boolean",
          "description": "Wether to display a \"Clear All\" button",
          "default": true
        },
        "button-text": {
          "type": "string",
          "description": "\"Clear All\" button text",
          "default": "Clear All"
        }
      }
    },
    "dnd": {
      "type": "object",
      "description": "Control Center Do Not Disturb Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Do Not Disturb"
        }
      }
    },
    "label": {
      "type": "object",
      "description": "A generic widget that allows the user to add custom text",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The text content of the widget",
          "default": "Label Text"
        },
        "max-lines": {
          "type": "integer",
          "description": "The maximum lines",
          "default": 5
        }
      }
    },
    "mpris": {
      "type": "object",
      "description": "A widget that displays multiple music players",
      "additionalProperties": false,
      "properties": {
        "image-size": {
          "type": "integer",
          "description": "The size of the album art",
          "default": 96
        },
        "image-radius": {
          "type": "integer",
          "description": "The border radius of the album art. Will be overriden by setting the border-radius in the style.css for the \".widget-mpris-album-art\" class",

          "default": 12
        },
        "blur": {
          "type": "bool",
          "description": "Appy the artwork as the MPRIS background and blur it",
          "default": true
        }
      }
    },
    "buttons-grid": {
      "type": "object",
      "description": "A widget to add a grid of buttons that execute shell commands",
      "additionalProperties": false,
      "properties": {
        "actions": {
          "type": "array",
          "description": "A list of actions containing a label and a command",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "description": "Text to be displayed in button",
                "default": "label"
              },
              "command": {
                "type": "string",
                "description": "Command to be executed on click",
                "default": ""
              },
              "type": {
                "type": "string",
                "description": "Type of the button; toggle buttons receive the .active css class and an env variable 'SWAYNC_TOGGLE_STATE' is set. See example in the default config.json",
                "default": "normal",
                "enum": ["normal", "toggle"]
              },
              "update-command": {
                "type": "string",
                "description": "Command to be executed on visibility change of cc to update the active state of the toggle button (should echo true or false)",
                "default": ""
              },
              "active": {
                  "type": "bool",
                  "description": "Wether the toggle button is active as default or not",
                  "default": false
              }
            }
          }
        }
      }
    },
    "menubar": {
      "type": "object",
      "description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons",
      "additionalProperties": false,
      "patternProperties": {
        "^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "type": "object",
          "description": "A button that opens a dropdown with action-buttons",
          "additionalProperties": false,
          "properties": {
            "label": {
              "type": "string",
              "description": "Text to be displayed in button",
              "default": "Menu"
            },
            "position": {
              "type": "string",
              "description": "Horizontal position of the button in the bar",
              "default": "right",
              "enum": ["right", "left"]
            },
            "animation-type": {
              "type": "string",
              "default": "slide_down",
              "description": "Animation type for menu",
              "enum": ["slide_down", "slide_up", "none"]
            },
            "animation-duration":{
              "type": "integer",
              "default": 250,
              "description": "Duration of animation in milliseconds"
            },
            "actions": {
              "$ref" : "#/widgets/buttons-grid/properties/actions"
            }
          }
        },
        "^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
          "type": "object",
          "description": "A list of action-buttons to be displayed in the topbar",
          "additionalProperties": false,
          "properties": {
            "position": {
              "type": "string",
              "description": "Horizontal position of the button in the bar",
              "default": "right",
              "enum": ["right", "left"]
            },
            "actions": {
              "$ref" : "#/widgets/buttons-grid/properties/actions"
            }
          }
        }
      }
    },
    "volume": {
      "type": "object",
      "description": "Slider to control pulse volume",
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string",
          "description": "Text displayed in front of the volume slider",
          "default": "Volume"
        },
        "show-per-app": {
          "type": "boolean",
          "default": false,
          "description": "Show per app volume control"
        },
        "show-per-app-icon": {
          "type": "boolean",
          "default": true,
          "description": "Show application icon in per app control"
        },
        "show-per-app-label": {
          "type": "boolean",
          "default": false,
          "description": "Show application name in per app control"
        },
        "empty-list-label": {
          "type": "string",
          "default": "No active sink input",
          "description": "Text displayed when there are not active sink inputs"
        },
        "expand-button-label": {
          "type": "string",
          "default": "⇧",
          "description": "Label displayed on button to show per app volume control"
        },
        "collapse-button-label": {
          "type": "string",
          "default": "⇩",
          "description": "Label displayed on button to hide per app volume control"
        },
        "icon-size": {
          "type": "integer",
          "default": 24,
          "description": "Size of the application icon in per app volume control"
        },
        "animation-type": {
          "type": "string",
          "default": "slide_down",
          "description": "Animation type for menu",
          "enum": ["slide_down", "slide_up", "none"]
        },
        "animation-duration":{
          "type": "integer",
          "default": 250,
          "description": "Duration of animation in milliseconds"
        }
      }
    },
    "backlight": {
      "type": "object",
      "description": "Slider to control monitor brightness",
      "additionalProperties": false,
      "properties": {
        "label": {
          "type": "string",
          "description": "Text displayed in front of the backlight slider",
          "default": "Brightness"
        },
        "device": {
          "type": "string",
          "description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)",
          "default": "intel_backlight"
        },
        "subsystem": {
          "type": "string",
          "description": "Kernel subsystem for brightness control",
          "default": "backlight",
          "enum": ["backlight", "leds"]
        },
        "min": {
          "type": "integer",
          "default": 0,
          "description": "Lowest possible value for brightness"
        }
      }
    },
    "inhibitors": {
      "type": "object",
      "description": "Control Center Inhibitors Widget",
      "additionalProperties": false,
      "properties": {
        "text": {
          "type": "string",
          "description": "The title of the widget",
          "default": "Inhibitors"
        },
        "clear-all-button": {
          "type": "boolean",
          "description": "Wether to display a \"Clear All\" button",
          "default": true
        },
        "button-text": {
          "type": "string",
          "description": "\"Clear All\" button text",
          "default": "Clear All"
        }
      }
    }
  }
}


================================================
FILE: cfg/swaync/catppuccin-mocha/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

sassc $HOME/.config/swaync/style-catppuccin-mocha.scss $HOME/.config/swaync/style.css

swaync-client -R
swaync-client -rs
swaync-client -t


================================================
FILE: cfg/swaync/catppuccin-mocha/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";

.text-button:hover,
.text-button.control-center-clear-all:hover {
  color: $color-fg;
  background-color: $button-bg-focus;
  transition: linear 0.25s;
}

.notification-row {
  outline: none;
}

.notification-row:focus,
.notification-row:hover {
  background: $button-bg-focus;
}

.notification-row .notification-background {
  padding: $widget-margin $widget-margin;
}

.notification-row .notification-background .close-button {
  /* The notification Close Button */
  background: $grid-bg;
  color: $text-color;
  text-shadow: none;
  padding: 0;
  border-radius: 100%;
  margin-top: $spacing;
  margin-right: $spacing;
  box-shadow: none;
  border: none;
  min-width: $font-size*1.5;
  min-height: $font-size*1.5;
}

.notification-row .notification-background .close-button:hover {
  box-shadow: none;
  background: $close-button-bg;
  transition: background 0.15s ease-in-out;
  border: none;
}

.notification-row .notification-background .notification {
  /* The actual notification */
  border-radius: $radii;
  border: $widget-border;
  border-radius: $radii;
  padding: 0;
  transition: background 0.15s ease-in-out;
  background: $widget-bg;
}

.notification-row .notification-background .notification.low {
  /* Low Priority Notification */
}

.notification-row .notification-background .notification.normal {
  /* Normal Priority Notification */
}

.notification-row .notification-background .notification.critical {
  /* Critical Priority Notification */
}

.notification-row .notification-background .notification .notification-action,
.notification-row .notification-background .notification .notification-default-action {
  padding: 0px;
  margin: 0;
  box-shadow: none;
  background: transparent;
  border: none;
  color: $text-color;
  transition: background 0.15s ease-in-out;
}

.notification-row .notification-background .notification .notification-action:hover,
.notification-row .notification-background .notification .notification-default-action:hover {
  -gtk-icon-effect: none;
  background: $button-bg;
}

.notification-row .notification-background .notification .notification-default-action {
  /* The large action that also displays the notification summary and body */
  border-radius: $radii;
}

.notification-row .notification-background .notification .notification-default-action:not(:only-child) {
  /* When alternative actions are visible */
  border-bottom-left-radius: 0px;
  border-bottom-right-radius: 0px;
}

.notification-row .notification-background .notification .notification-default-action .notification-content {
  background: transparent;
  border-radius: $radii;
  padding: $spacing;
  padding-right: $spacing*3;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .image {
  /* Notification Primary Image */
  -gtk-icon-effect: none;
  border-radius: $radii;
  /* Size in px */
  margin: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon {
  /* Notification app icon (only visible when the primary image is set) */
  -gtk-icon-effect: none;
  -gtk-icon-shadow: 0 1px 4px black;
  margin: $spacing*2;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary {
  /* Notification summary/title */
  font-size: 1.1em;
  font-weight: bolder;
  background: transparent;
  color: $text-color;
  text-shadow: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time {
  /* Notification time-ago */
  font-size: 1.1em;
  font-weight: bolder;
  background: transparent;
  color: $text-color;
  text-shadow: none;
  margin-right: $spacing*10;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body {
  /* Notification body */
  font-size: 1.1em;
  font-weight: normal;
  background: transparent;
  color: $text-color;
  text-shadow: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content progressbar {
  /* The optional notification progress bar */
  margin-top: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .body-image {
  /* The "extra" optional bottom notification image */
  margin-top: $spacing;
  background-color: $text-color;
  border-radius: $radii;
  -gtk-icon-effect: none;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply {
  /* The inline reply section */
  margin-top: $spacing;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry {
  background: $button-bg-darker;
  color: $text-color;
  caret-color: $text-color;
  border: 1px solid $dark_1;
  border-radius: $radii;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
  margin-left: $spacing;
  background: $grid-bg;
  border: 1px solid $dark_1;
  border-radius: $radii;
  color: $text-color;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled {
  background: initial;
  color: $text-color-disabled;
  border: 1px solid $dark_1;
  border-color: transparent;
}

.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover {
  background: $button-bg;
}

.notification-row .notification-background .notification .notification-action {
  /* The alternative actions below the default action */
  border-top: 1px solid $dark_1;
  border-radius: 0px;
  border-right: 1px solid $dark_1;
}

.notification-row .notification-background .notification .notification-action:first-child {
  /* add bottom border radius to eliminate clipping */
  border-bottom-left-radius: $radii;
}

.notification-row .notification-background .notification .notification-action:last-child {
  border-bottom-right-radius: $radii;
  border-right: none;
}

.notification-group {
  /* Styling only for Grouped Notifications */
}

.notification-group.low {
  /* Low Priority Group */
}

.notification-group.normal {
  /* Low Priority Group */
}

.notification-group.critical {
  /* Low Priority Group */
}

.notification-group .notification-group-buttons,
.notification-group .notification-group-headers {
  margin: 0 16px;
  color: $text-color;
}

.notification-group .notification-group-headers {
  /* Notification Group Headers */
}

.notification-group .notification-group-headers .notification-group-icon {
  color: $text-color;
}

.notification-group .notification-group-headers .notification-group-header {
  color: $text-color;
}

.notification-group .notification-group-buttons {
  /* Notification Group Buttons */
}

.notification-group.collapsed .notification-row .notification {
  background-color: $button-bg;
}

.notification-group.collapsed .notification-row:not(:last-child) {
  /* Top notification in stack */
  /* Set lower stacked notifications opacity to 0 */
}

.notification-group.collapsed .notification-row:not(:last-child) .notification-action,
.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action {
  opacity: 0;
}

.notification-group.collapsed:hover .notification-row:not(:only-child) .notification {
  background-color: $button-bg;
}

.control-center {
  /* The Control Center which contains the old notifications + widgets */
  background: $widget-bg;
  color: $text-color;
  margin: $widget-margin;
  border: $widget-border;
  border-radius: $widget-radii;
}

.control-center .control-center-list-placeholder {
  /* The placeholder when there are no notifications */
  opacity: 0.5;
}

.control-center .control-center-list {
  /* List of notifications */
  background: transparent;
}

.control-center .control-center-list .notification {
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3);
}

.control-center .control-center-list .notification .notification-default-action,
.control-center .control-center-list .notification .notification-action {
  transition: opacity 400ms ease-in-out, background 0.15s ease-in-out;
}

.control-center .control-center-list .notification .notification-default-action:hover,
.control-center .control-center-list .notification .notification-action:hover {
  background-color: $button-bg;
}

.blank-window {
  /* Window behind control center and on all other monitors */
  background: transparent;
}

.floating-notifications {
  background: transparent;
}

.floating-notifications .notification {
  box-shadow: none;
}

/*** Widgets ***/
/* Title widget */
.widget-title {
  color: $text-color;
  margin: $widget-margin;
  font-size: 1.5rem;
}

.widget-title>button {
  font-size: initial;
  color: $text-color;
  text-shadow: none;
  background: $button-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
  border-radius: $radii;
}

.widget-title>button:hover {
  background: $button-bg;
}

/* DND widget */
.widget-dnd {
  color: $text-color;
  margin: $widget-margin;
  font-size: 1.1rem;
}

.widget-dnd>switch {
  font-size: initial;
  border-radius: $radii;
  background: $grid-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
}

.widget-dnd>switch:checked {
  background: $bg-selected;
  color: white;
}

.widget-dnd>switch slider {
  background: $button-bg;
  border-radius: $radii;
}

/* Label widget */
.widget-label {
  margin: $widget-margin;
  margin-left: $widget-margin*2;
}

.widget-label>label {
  font-weight: bold;
  font-size: 1.5em;
}

/* Mpris widget */
$mpris-album-art-overlay: rgba(0, 0, 0, 0.55);
$mpris-button-hover: rgba(0, 0, 0, 0.50);

.widget-mpris {
  /* The parent to all players */
}

.widget-mpris .widget-mpris-player {
  padding: $widget-padding;
  margin: $widget-margin $widget-margin;
  background-color: $mpris-album-art-overlay;
  border-radius: $widget-radii;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
}

.widget-mpris .widget-mpris-player button:hover {
  /* The media player buttons (play, pause, next, etc...) */
  background: $button-bg;
}

.widget-mpris .widget-mpris-player .widget-mpris-album-art {
  border-radius: $radii;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
}

.widget-mpris .widget-mpris-player .widget-mpris-title {
  font-weight: bold;
  font-size: 1.25rem;
}

.widget-mpris .widget-mpris-player .widget-mpris-subtitle {
  font-size: 1.1rem;
}

.widget-mpris .widget-mpris-player>box>button {
  /* Change player control buttons */
}

.widget-mpris .widget-mpris-player>box>button:hover {
  background-color: $mpris-button-hover;
}

.widget-mpris>box>button {
  /* Change player side buttons */
}

.widget-mpris>box>button:disabled {
  /* Change player side buttons insensitive */
}

/* Buttons widget */
.widget-buttons-grid {
  padding: $widget-padding;
  margin: $widget-margin;
  border-radius: $widget-radii;
  background-color: $grid-bg;
}

.widget-buttons-grid>flowbox>flowboxchild>button {
  background: $button-bg;
  border-radius: $radii;
}

.widget-buttons-grid>flowbox>flowboxchild>button.toggle:checked {
  /* style given to the active toggle button */
}

/* Menubar widget */
.widget-menubar>box>.menu-button-bar>button {
  border: none;
  background: transparent;
}

/* .AnyName { Name defined in config after #
  background-color: $noti-bg;
  padding: 8px;
  margin: 8px;
  border-radius: 12px;
}

.AnyName>button {
  background: transparent;
  border: none;
}

.AnyName>button:hover {
  background-color: $noti-bg-hover;
} */
.topbar-buttons>button {
  /* Name defined in config after # */
  border: none;
  background: transparent;
}

/* Volume widget */
.widget-volume,
.widget-backlight {
  background-color: $grid-bg;
  padding: $widget-padding;
  padding-left: $widget-padding*2;
  margin: $widget-margin;
  margin-left: $widget-margin;
  margin-right: $widget-margin;
  border-radius: $widget-radii;
}

.widget-volume {
  margin-top: 0;
  margin-bottom: 0;
  border-bottom-left-radius: 0;
  border-bottom-right-radius: 0;
}

.widget-backlight {
  margin-top: 0;
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

.widget-volume>box>button {
  background: transparent;
  border: none;
}

.per-app-volume {
  padding: 4px 8px 8px 8px;
  margin: 0px 8px 8px 8px;
  border-radius: $radii;
}

/* Inhibitors widget */
.widget-inhibitors {
  margin: $widget-margin;
  font-size: 1.5rem;
}

.widget-inhibitors>button {
  font-size: initial;
  color: $text-color;
  text-shadow: none;
  background: $grid-bg;
  border: 1px solid $dark_1;
  box-shadow: none;
  border-radius: $radii;
}

.widget-inhibitors>button:hover {
  background: $button-bg;
}


================================================
FILE: cfg/themes/adwaita.scss
================================================
// When color definition differs for dark and light variant
// it gets @if ed depending on $variant

$variant: 'dark';

$font-size: 13pt;

$blue: #3584e4;
$green: #33d17a;
$yellow: #f6d32d;
$orange: #ff7800;
$red: #e01b24;
$purple: #9141ac;
$brown: #986a44;
$dark_1: #77767b;
$dark_3 :#3d3846;

$radii: 10px;
$widget-radii: $radii*2.5;
$spacing: 3px;
$border: solid 2px;
$widget-margin: $spacing*4;
$widget-padding: $spacing*3; 

$bar-bg: #171717;
$widget-bg: #171717;
$grid-bg: lighten(#171717, 7%);
$button-bg: lighten(#171717, 15%);
$button-bg-darker: #171717;
$button-bg-focus: #9A9A9A;
$close-button-bg:#666666; 
$widget-border: $border $dark_1;
$color-fg: #171717;

$text-color-disabled: #000000;

$bg-selected: $blue;


$base_color: if($variant == 'light', #ffffff, lighten(desaturate(#241f31, 100%), 2%));
$text_color: if($variant == 'light', black, white);
$bg_color: if($variant == 'light', #f6f5f4, darken(desaturate(#3d3846, 100%), 4%));
$fg_color: if($variant == 'light', #2e3436, #eeeeec);

$selected_fg_color: #ffffff;
$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%));
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
$alt_borders_color: if($variant == 'light', darken($bg_color, 24%), darken($bg_color, 18%));
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
$top_hilight: $borders_edge;
$dark_fill: mix($borders_color, $bg_color, 50%);
$headerbar_color: if($variant == 'light', lighten($bg_color, 5%), darken($bg_color, 3%));
$menu_color: if($variant == 'light', $base_color, mix($bg_color, $base_color, 20%));
$popover_bg_color: $bg_color;
$popover_hover_color: lighten($bg_color, 5%);

$scrollbar_bg_color: if($variant == 'light', mix($bg_color, $fg_color, 80%), mix($base_color, $bg_color, 50%));
$scrollbar_slider_color: mix($fg_color, $bg_color, 60%);
$scrollbar_slider_hover_color: mix($fg_color, $bg_color, 80%);
$scrollbar_slider_active_color: if($variant=='light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 10%));

$warning_color: #f57900;
$error_color: #cc0000;
$success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%));
$destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%));

$osd_fg_color: #eeeeec;
$osd_text_color: white;
$osd_bg_color: if($variant == 'light', transparentize(darken(desaturate(#3d3846, 100%), 4%),0.1), transparentize(darken(desaturate(#3d3846, 100%), 10%),0.1));
$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
$osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%);
$osd_borders_color: transparentize(black, 0.3);

$sidebar_bg_color: mix($bg_color, $base_color, 50%);
$base_hover_color: transparentize($fg_color, 0.95);

$tooltip_borders_color: transparentize(white, 0.9);
$shadow_color: transparentize(black, 0.9);

$drop_target_color: #4e9a06;

//insensitive state derived colors
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
$insensitive_bg_color: mix($bg_color, $base_color, 60%);
$insensitive_borders_color: $borders_color;

//colors for the backdrop state, derived from the main colors.
$backdrop_base_color: if($variant == 'light', darken($base_color, 1%), lighten($base_color, 1%));
$backdrop_text_color: mix($text_color, $backdrop_base_color, 80%);
$backdrop_bg_color: $bg_color;
$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 50%);
$backdrop_insensitive_color: if($variant == 'light', darken($backdrop_bg_color, 15%), lighten($backdrop_bg_color, 15%));
$backdrop_selected_fg_color: if($variant == 'light', $backdrop_base_color, $backdrop_text_color);
$backdrop_borders_color: mix($borders_color, $bg_color, 80%);
$backdrop_dark_fill: mix($backdrop_borders_color, $backdrop_bg_color, 35%);
$backdrop_sidebar_bg_color: mix($backdrop_bg_color, $backdrop_base_color, 50%);

$backdrop_scrollbar_bg_color: darken($backdrop_bg_color, 3%);
$backdrop_scrollbar_slider_color: mix($backdrop_fg_color, $backdrop_bg_color, 40%);

$backdrop_menu_color: if($variant == 'light', $backdrop_base_color, mix($backdrop_bg_color, $backdrop_base_color, 20%));

//special cased widget colors
$suggested_bg_color: $selected_bg_color;
$suggested_border_color: $selected_borders_color;
$progress_bg_color: $selected_bg_color;
$progress_border_color: $selected_borders_color;
$checkradio_bg_color: if($variant == 'light', $selected_bg_color, lighten($selected_bg_color,10%));
$checkradio_fg_color: $selected_fg_color;
$checkradio_borders_color: if($variant == 'light', darken($checkradio_bg_color,20%), darken($checkradio_bg_color,40%));


================================================
FILE: cfg/themes/catppuccin-mocha.scss
================================================
$variant: "dark";

$font-size: 13pt;

$orange: #ff7800;
$purple: #9141ac;
$brown: #986a44;
$dark_1: #77767b;
$dark_3: #3d3846;
$blue: #89b4fa;
$lavender: #b4befe;
$sapphire: #74c7ec;
$sky: #89dceb;
$teal: #94e2d5;
$green: #a6e3a1;
$yellow: #f9e2af;
$peach: #fab387;
$maroon: #eba0ac;
$red: #f38ba8;
$mauve: #cba6f7;
$pink: #f5c2e7;
$flamingo: #f2cdcd;
$rosewater: #f5e0dc;

$base: #1e1e2e;
$mantle: #181825;
$crust: #11111b;

$text: #cdd6f4;
$subtext0: #a6adc8;
$subtext1: #bac2de;

$surface0: #313244;
$surface1: #45475a;
$surface2: #585b70;

$overlay0: #6c7086;
$overlay1: #7f849c;
$overlay2: #9399b2;

$radii: 10px;
$widget-radii: $radii*2.5;
$spacing: 3px;
$border: solid 2px;
$widget-margin: $spacing*4;
$widget-padding: $spacing*3;

$bar-bg: $crust;
$widget-bg: $crust;
$grid-bg: lighten($crust, 7%);
$button-bg: lighten($crust, 15%);
$button-bg-darker: $crust;
$button-bg-focus: $overlay2;
$close-button-bg: $overlay2;
$widget-border: $border $blue;
$color-fg: $crust;

$text-color-disabled: #000000;

$bg-selected: $blue;

$selected-bg-color: $overlay2;


$base_color: if($variant =='light', #ffffff, lighten(desaturate(#241f31, 100%), 2%));
$text_color: if($variant =='light', black, white);
$bg_color: if($variant =='light', #f6f5f4, darken(desaturate(#3d3846, 100%), 4%));
$fg_color: if($variant =='light', #2e3436, #eeeeec);


================================================
FILE: cfg/themeswitcher/config.jsonc
================================================
{
  "title": "ThemeSwitcher",
  "name": "Rocco Rakete",
  "menus": [
    {
      "name": "Waybar Themes",
      "options": [
        "Catppuccin-Mocha - docked bar - color buttons",
        "Catppuccin-Mocha - docked bar - flat butons",
        "Catppuccin-Mocha - docked bar",
        "Adwaita-dark - floating bar"
      ],
      "commands": [
        [
          "sh -c \"rm -rf ~/.config/waybar/*\"",
          "sh -c \"cp -r ~/.dots/cfg/waybar/scripts/ ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/waybar/catppuccin-mocha-docked-color-buttons/* ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/waybar/catppuccin-mocha.scss\""
        ],
        [
          "sh -c \"rm -rf ~/.config/waybar/*\"",
          "sh -c \"cp -r ~/.dots/cfg/waybar/scripts/ ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/waybar/catppuccin-mocha-docked-flat-buttons/* ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/waybar/catppuccin-mocha.scss\""
        ],
        [
          "sh -c \"rm -rf ~/.config/waybar/*\"",
          "sh -c \"cp -r ~/.dots/cfg/waybar/scripts/ ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/waybar/catppuccin-mocha-docked/* ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/waybar/catppuccin-mocha.scss\""
        ],
        [
          "sh -c \"rm -rf ~/.config/waybar/*\"",
          "sh -c \"cp -r ~/.dots/cfg/waybar/scripts/ ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/waybar/adwaita-dark/* ~/.config/waybar/\"",
          "sh -c \"cp ~/.dots/cfg/themes/adwaita.scss ~/.config/waybar/adwaita.scss\""
        ]
      ]
    },
    {
      "name": "Anyrun Themes",
      "options": [
        "Catppuccin-Mocha",
        "Adwaita-dark"
      ],
      "commands": [
        [
          "sh -c \"rm -rf ~/.config/anyrun/*\"",
          "sh -c \"cp -r ~/.dots/cfg/anyrun/plugins/ ~/.config/anyrun/\"",
          "sh -c \"cp ~/.dots/cfg/anyrun/catppuccin-mocha/* ~/.config/anyrun/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/anyrun/catppuccin-mocha.scss\""
        ],
        [
          "sh -c \"rm -rf ~/.config/anyrun/*\"",
          "sh -c \"cp -r ~/.dots/cfg/anyrun/plugins/ ~/.config/anyrun/\"",
          "sh -c \"cp ~/.dots/cfg/anyrun/adwaita-dark/* ~/.config/anyrun/\"",
          "sh -c \"cp ~/.dots/cfg/themes/adwaita.scss ~/.config/anyrun/adwaita.scss\""
        ]
      ]
    },
    {
      "name": "Walker Themes",
      "options": [
        "Catppuccin-Mocha"
      ],
      "commands": [
        [
          "sh -c \"rm -rf ~/.config/walker/*\"",
          "sh -c \"cp -r ~/.dots/cfg/walker/plugins/ ~/.config/walker/\"",
          "sh -c \"cp ~/.dots/cfg/walker/catppuccin-mocha/* ~/.config/walker/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/walker/catppuccin-mocha.scss\""
        ]
      ]
    },
    {
      "name": "SwayNC Themes",
      "options": [
        "Catppuccin-Mocha",
        "Adwaita-dark"
      ],
      "commands": [
        [
          "sh -c \"rm -rf ~/.config/swaync/*\"",
          "sh -c \"cp ~/.dots/cfg/swaync/catppuccin-mocha/* ~/.config/swaync/\"",
          "sh -c \"cp ~/.dots/cfg/themes/catppuccin-mocha.scss ~/.config/swaync/catppuccin-mocha.scss\""
        ],
        [
          "sh -c \"rm -rf ~/.config/swaync/*\"",
          "sh -c \"cp ~/.dots/cfg/swaync/adwaita-dark/* ~/.config/swaync/\"",
          "sh -c \"cp ~/.dots/cfg/themes/adwaita.scss ~/.config/swaync/adwaita.scss\""
        ]
      ]
    },
    {
      "name": "Hyprland Themes",
      "options": [
        "Catppuccin-Mocha",
        "Adwaita-dark"
      ],
      "commands": [
        [
          "sh -c \"cp ~/.dots/cfg/hypr/catppuccin-mocha/* ~/.config/hypr/\""
        ],
        [
          "sh -c \"cp ~/.dots/cfg/hypr/adwaita-dark/* ~/.config/hypr/\""
        ]
      ]
    }
  ]
}


================================================
FILE: cfg/themeswitcher/styles.css
================================================
.menu-label {
  font-size: 1.2em;
  font-weight: bolder;
  padding-left: 20px;
  padding-right: 20px;
}

.menu-dropdown {
  padding: 10px;
  padding-left: 20px;
  padding-right: 20px;
}

.title-label {
  padding: 10px;
  font-size: 2em;
  font-weight: bolder;
  background-color: #11111B;
}

.menu-bar {
  padding-top: 10px;
  margin: 0;
  background-color: #11111B;
}


================================================
FILE: cfg/walker/catppuccin-mocha/config.json
================================================
{
	"activation_mode": {
		"disabled": false,
		"use_alt": false
	},
	"align": {
		"anchors": {
			"bottom": false,
			"left": false,
			"right": false,
			"top": false
		},
		"horizontal": "center",
		"ignore_exlusive": true,
		"margins": {
			"bottom": 0,
			"end": 0,
			"start": 0,
			"top": 0
		},
		"vertical": "center",
		"width": 500
	},
	"clipboard": {
		"image_height": 300,
		"max_entries": 10
	},
	"enable_typeahead": false,
	"fullscreen": false,
	"icons": {
		"hide": false,
		"image_height": 200,
		"size": 32
	},
	"ignore_mouse": false,
	"keep_open": false,
	"list": {
		"always_show": true,
		"height": 400,
		"hide_sub": false,
		"margin_top": 10
	},
	"modules": [{
		"name": "runner",
		"prefix": ""
	}, {
		"name": "applications",
		"prefix": ""
	}, {
		"name": "ssh",
		"prefix": "",
		"switcher_exclusive": true
	}, {
		"name": "finder",
		"prefix": "",
		"switcher_exclusive": true
	}, {
		"name": "commands",
		"prefix": "",
		"switcher_exclusive": true
	}, {
		"name": "websearch",
		"prefix": "?"
	}, {
		"name": "switcher",
		"prefix": "/"
	}],
	"orientation": "vertical",
	"placeholder": "Search...",
	"runner": {
		"excludes": [
			"rm"
		]
	},
	"scrollbar_policy": "automatic",
	"search": {
		"delay": 0,
		"hide_icons": false,
		"hide_spinner": true,
		"margin_spinner": 10
	},
	"show_initial_entries": true,
	"ssh_host_file": ""
}


================================================
FILE: cfg/walker/catppuccin-mocha/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

sassc $HOME/.config/walker/style-catppuccin-mocha.scss $HOME/.config/walker/style.css

walker


================================================
FILE: cfg/walker/catppuccin-mocha/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";

* {
  font-weight: bolder;
}

#window {
  border-radius: $widget-radii;
  border: $widget-border;
}

#box {
  padding: $widget-padding*1.5;
}

#searchwrapper {}

#search,
#typeahead {
  outline: none;
  outline-width: 0px;
  box-shadow: none;
  border-bottom: none;
  border: none;
  padding-left: $widget-padding;
  padding-right: $widget-padding;
  padding-top: 0px;
  padding-bottom: 0px;
  border-radius: $radii/3;
}

#typeahead {
  background: none;
  opacity: 0.5;
}

#search placeholder {
  opacity: 0.5;
}

#list {}

row:selected {
  border-radius: $radii;
  background-color: transparentize($color: $text, $amount: 0.75);
  color: black;
}

.item {
  padding: $spacing;
  border-radius: 2px;
}

.icon {
  padding-right: $spacing;
}

.textwrapper {}

.label {}

.sub {
  opacity: 0.5;
}

.activationlabel {
  opacity: 0.25;
}

.activation .activationlabel {
  opacity: 1;
  color: $green;
}

.activation .textwrapper,
.activation .icon,
.activation .search {
  opacity: 0.5;
}

#search {
  border-radius: $radii;
}


================================================
FILE: cfg/waybar/adwaita-dark/adwaita-colored-buttons.scss
================================================
@import "./adwaita.scss";

#cpu,
#memory,
#temperature,
#backlight {
  background-color: transparentize($color: $blue, $amount: 0.3);
  color: $color-fg;
}

#battery {
  background-color: transparentize($color: $red, $amount: 0.3);
  color: $color-fg;
}

#tray {
  background-color: transparentize($color: $yellow, $amount: 0.3);
}

#network,
#pulseaudio,
#bluetooth,
#custom-notification {
  background-color: transparentize($color: $purple, $amount: 0.3);
  color: $color-fg;
}

#custom-power {
  background-color: transparentize($color: $green, $amount: 0.3);
}


================================================
FILE: cfg/waybar/adwaita-dark/config.jsonc
================================================
{
  "spacing": 0,
  "margin-left": 10,
  "margin-right": 10,
  "margin-top": 10,
  //"margin-left": 0,
  //"margin-right": 0,
  //"margin-top": 0,
  "layer": "top",
  "reload_style_on_change": true,
  "modules-left": [
    "image",
    "hyprland/workspaces"
  ],
  "modules-center": [
    "clock"
  ],
  "modules-right": [
    "cpu",
    "memory",
    "temperature",
    "backlight",
    "battery",
    "tray",
    "network",
    "bluetooth",
    "pulseaudio",
    "custom/notification",
    "custom/power"
  ],
  "image": {
    "path": "/home/martin/Dokumente/Backgrounds/nixos.png",
    "size": 20,
    "interval": 86400, // once every day
    "on-click": "mpc toggle"
  },
  "hyprland/workspaces": {
    "format": "{icon}",
    "tooltip": false,
    "all-outputs": false,
    "current-only": true,
    "sort-by-number": true,
    "persistent-workspaces": {
      "1": "",
      "2": "",
      "3": "",
      "4": "",
      "5": "",
      "6": "",
      "7": "",
      "8": "",
      "9": "",
      "10": ""
    },
    "format-icons": {
      "1": "",
      "2": "",
      "3": "",
      "4": "",
      "5": "",
      "6": "",
      "7": "",
      "8": "",
      "9": "",
      "10": "",
      "active": "",
      "default": ""
    }
  },
  "clock": {
    "format": "{:%H:%M}",
    "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
    "format-alt": "{:%d.%m.%y - %H:%M}"
  },
  "cpu": {
    "format": "{icon}",
    "format-icons": [
      "󰝦",
      "󰪞",
      "󰪟",
      "󰪠",
      "󰪡",
      "󰪢",
      "󰪣",
      "󰪤",
      "󰪥"
    ],
    "tooltip": false,
    "interval": 1
  },
  "memory": {
    "tooltip": false,
    "format": "󰆼{used:.1f} GiB"
  },
  "temperature": {
    "tooltip": false,
    "thermal-zone": 6,
    "critical-threshold": 90,
    "format": "{temperatureC}°C",
    "interval": 1
  },
  "backlight": {
    "tooltip": false,
    "format": "{icon}{percent}%",
    "format-icons": [
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      ""
    ]
  },
  "battery": {
    "states": {
      "warning": 30,
      "critical": 15
    },
    "format": "{icon}",
    "format-full": "<span foreground=\"#2A995C\">󱐥</span>",
    "format-charging": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
    "format-plugged": "󱐋{capacity}%",
    "format-alt": "{icon} {capacity}%",
    "format-icons": [
      " ",
      " ",
      " ",
      " ",
      " "
    ],
    "interval": 1
  },
  "tray": {
    "spacing": 6
  },
  "network": {
    "format-wifi": "",
    "format-ethernet": "󰈀",
    "tooltip-format": "{ifname} ({ipaddr}) via {gwaddr} at\n{essid}",
    "format-linked": "{ifname} (No IP) ",
    "format-disconnected": "󰖪",
    "on-click": "swaync-client -t -sw"
  },
  "bluetooth": {
    "format": "",
    "format-disabled": "󰂲",
    "format-connected": "󰂱",
    "tooltip-format": "{controller_alias}\t{controller_address}",
    "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}",
    "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
    "on-click": "swaync-client -t -sw"
  },
  "pulseaudio": {
    // "scroll-step": 1, // %, can be a float
    "format": "{icon} {format_source}",
    "format-bluetooth": "{icon} {format_source}",
    "format-bluetooth-muted": " {icon} {format_source}",
    "format-muted": "󰸈 {format_source}",
    "format-source": "",
    "format-source-muted": "",
    "format-icons": {
      "headphone": "",
      "hands-free": "",
      "headset": "",
      "phone": "",
      "portable": "",
      "car": "",
      "default": [
        "",
        "",
        ""
      ]
    },
    "on-click": "swaync-client -t -sw",
    "on-click-right": "pavucontrol"
  },
  "custom/notification": {
    "tooltip": false,
    "format": "{icon}",
    "format-icons": {
      "notification": "󰂟",
      "none": "",
      "dnd-notification": "󰺁",
      "dnd-none": "",
      "inhibited-notification": "󰂟",
      "inhibited-none": "",
      "dnd-inhibited-notification": "󰺁",
      "dnd-inhibited-none": ""
    },
    "return-type": "json",
    "exec-if": "which swaync-client",
    "exec": "swaync-client -swb",
    "on-click": "swaync-client -t -sw",
    "on-click-right": "swaync-client -d -sw",
    "escape": true
  },
  "custom/power": {
    "format": "",
    "on-click": "wlogout -b 5 -c 0 -r 0 -T 0 -B 0",
    "interval": 86400, // once every day
    "tooltip": true
  }
}


================================================
FILE: cfg/waybar/adwaita-dark/launch.sh
================================================
#!/usr/bin/env sh

# Adwaita-Dark

is_swww_daemon_running() {
    if pgrep -x "swww-daemon" > /dev/null
    then
        return 0
    else
	exec swww-daemon &
        return 1
    fi
}

# wait for the swww-daemon
while ! is_swww_daemon_running; do
    echo "wait for swww-daemon"
    sleep 1
done

swww img ~/.config/backgrounds/minimal_landscape.jpg 

pkill waybar

sassc $HOME/.config/waybar/style-adwaita.scss $HOME/.config/waybar/style.css

waybar


================================================
FILE: cfg/waybar/adwaita-dark/style-adwaita.scss
================================================
@import "./adwaita.scss";
@import "./adwaita-colored-buttons.scss";

* {
  padding: 0;
  margin: 0;
  font-weight: bolder;
}

window#waybar {
  font-size: $font-size;
  background: $bar-bg;
  border-radius: $radii;
  box-shadow:
    inset -2px -2px 5px 1px (transparentize($color: #000000, $amount: 0.6)),
    2px 2px 5px 1px transparentize($color: #000000, $amount: 0.6) inset;
}

#cpu,
#memory,
#temperature,
#backlight,
#network,
#bluetooth,
#pulseaudio,
#custom-notification {
  padding-left: $spacing;
  padding-right: $spacing;
  margin-top: $spacing;
  margin-bottom: $spacing;
}

#cpu,
#network {
  padding-left: $spacing*2;
  border-top-left-radius: $radii/2;
  border-bottom-left-radius: $radii/2;
}

#backlight,
#custom-notification {
  margin-right: $spacing*2;
  padding-right: $spacing*2;
  border-top-right-radius: $radii/2;
  border-bottom-right-radius: $radii/2;
}

#cpu {
  font-size: 1.1em;
  font-weight: bolder;
  color: $orange;
  transition: 400ms;
  animation: ws_normal 20s ease-out 10;
}

#bluetooth.connected {
  font-size: 1.15em;
  color: darken($color: $blue, $amount: 10);
}

#pulseaudio {
  padding-left: 0;
}

#image,
#workspaces,
#clock,
#battery,
#tray,
#custom-power {
  padding-left: $spacing;
  padding-right: $spacing;
  margin-top: $spacing;
  margin-bottom: $spacing;
  margin-right: $spacing*2;
  border-radius: $radii/2;
}

#workspaces button {
  font-size: 0;
  min-width: $font-size*0.85;
  min-height: $font-size*0.85;
  margin: $spacing*1.5;
  border-radius: $spacing*10;
  background-color: $fg_color;
  transition: 100ms;
  animation: ws_normal 20s ease-out 10;
}

#workspaces button.empty {
  background-color: $dark_1;
}

#workspaces button.active {
  min-width: $font-size*2;
  background-color: $selected_bg_color;
  transition: 100ms;
}

#battery.full {
  font-size: 1.15em;
}

#custom-power {
  color: $red;
  margin-right: $spacing;
  border-top-right-radius: $radii;
  border-bottom-right-radius: $radii;
}

.modules-left {
  margin-left: $spacing;
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked/config.jsonc
================================================
{
	"spacing": 0,
	"margin-left": 0,
	"margin-right": 0,
	"margin-top": 0,
	"layer": "top",
	"reload_style_on_change": true,
	"modules-left": [
		"image",
		"hyprland/workspaces"
	],
	"modules-center": [
		"clock",
		"custom/weather"
	],
	"modules-right": [
		"network#speed",
		"memory",
		"temperature",
		"cpu",
		"backlight",
		"battery",
		"tray",
		"network",
		"bluetooth",
		"pulseaudio",
		"custom/notification",
		"custom/power"
	],
	"image": {
		"path": "/home/martin/Dokumente/Backgrounds/nixos.png",
		"size": 23,
		"interval": 86400, // once every day
		"on-click": "mpc toggle"
	},
	"hyprland/workspaces": {
		"format": "{icon}",
		"tooltip": false,
		"all-outputs": false,
		"current-only": true,
		"sort-by-number": true,
		"persistent-workspaces": {
			"1": "",
			"2": "",
			"3": "",
			"4": "",
			"5": "",
			"6": "",
			"7": "",
			"8": "",
			"9": "",
			"10": ""
		},
		"format-icons": {
			"1": "",
			"2": "",
			"3": "",
			"4": "",
			"5": "",
			"6": "",
			"7": "",
			"8": "",
			"9": "",
			"10": "",
			"active": "",
			"default": ""
		}
	},
	"clock": {
		"format": "{:%a. <span rise=\"1.5pt\">|</span> %H:%M <span rise=\"1.5pt\">|</span>}",
		"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
		"format-alt": "{:%d.%m.%y - %H:%M}"
	},
	"custom/weather": {
		"exec": "${HOME}/.config/waybar/scripts/get_weather.sh",
		"return-type": "json",
		"format": "{}",
		"tooltip": true,
		"interval": 900
	},
	"cpu": {
		"format": "{icon}",
		"format-icons": [
			"󰝦",
			"󰪞",
			"󰪟",
			"󰪠",
			"󰪡",
			"󰪢",
			"󰪣",
			"󰪤",
			"󰪥"
		],
		"tooltip": false,
		"interval": 1
	},
	"memory": {
		"tooltip": false,
		"format": "󰆼{used:.1f} GiB"
	},
	"temperature": {
		"tooltip": false,
		"thermal-zone": 6,
		"critical-threshold": 90,
		"format": "{temperatureC}°C",
		"interval": 1
	},
	"backlight": {
		"tooltip": false,
		"format": "{icon}{percent}%",
		"format-icons": [
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
		]
	},
	"battery": {
		"states": {
			"warning": 30,
			"critical": 15,
			"full-at": 98
		},
		"format": "{icon}",
		"format-full": "<span foreground=\"#2A995C\">󱐥</span>",
		"format-charging": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
		"format-plugged": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
		"format-alt": "{icon} {capacity}%",
		"format-icons": [
			"<span foreground=\"#f38ba8\"></span> ",
			"<span foreground=\"#eba0ac\"></span> ",
			"<span foreground=\"#fab387\"></span> ",
			"<span foreground=\"#f9e2af\"></span> ",
			"<span foreground=\"#a6e3a1\"></span> "
		],
		"interval": 1
	},
	"tray": {
		"spacing": 6
	},
	"network": {
		"format-wifi": "",
		"format-ethernet": "󰈀",
		"tooltip-format": "{ifname} ({ipaddr}) via {gwaddr} at\n{essid}",
		"format-linked": "{ifname} (No IP) ",
		"format-disconnected": "󰖪",
		"on-click": "swaync-client -t -sw"
	},
	"network#speed": {
		"format": "<span line_height=\"0.75\" size=\"9pt\"> {bandwidthUpBytes}\n {bandwidthDownBytes}</span>",
		"interval": 1
	},
	"bluetooth": {
		"format": "",
		"format-disabled": "󰂲",
		"format-connected": "󰂱",
		"tooltip-format": "{controller_alias}\t{controller_address}",
		"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}",
		"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
		"on-click": "swaync-client -t -sw"
	},
	"pulseaudio": {
		// "scroll-step": 1, // %, can be a float
		"format": "{icon} {format_source}",
		"format-bluetooth": "{icon} {format_source}",
		"format-bluetooth-muted": " {icon} {format_source}",
		"format-muted": "󰸈 {format_source}",
		"format-source": "",
		"format-source-muted": "",
		"format-icons": {
			"headphone": "",
			"hands-free": "",
			"headset": "",
			"phone": "",
			"portable": "",
			"car": "",
			"default": [
				"",
				"",
				" "
			]
		},
		"on-click": "swaync-client -t -sw",
		"on-click-right": "pavucontrol"
	},
	"custom/notification": {
		"tooltip": false,
		"format": "{icon}",
		"format-icons": {
			"notification": "󰂟",
			"none": "",
			"dnd-notification": "󰺁",
			"dnd-none": "",
			"inhibited-notification": "󰂟",
			"inhibited-none": "",
			"dnd-inhibited-notification": "󰺁",
			"dnd-inhibited-none": ""
		},
		"return-type": "json",
		"exec-if": "which swaync-client",
		"exec": "swaync-client -swb",
		"on-click": "swaync-client -t -sw",
		"on-click-right": "swaync-client -d -sw",
		"escape": true
	},
	"custom/power": {
		"format": "",
		"on-click": "wlogout -b 5 -c 0 -r 0 -T 0 -B 0",
		"interval": 86400, // once every day
		"tooltip": true
	}
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

is_swww_daemon_running() {
    if pgrep -x "swww-daemon" > /dev/null
    then
        return 0
    else
	exec swww-daemon &
        return 1
    fi
}

# wait for the swww-daemon
while ! is_swww_daemon_running; do
    echo "wait for swww-daemon"
    sleep 1
done

swww img ~/.config/backgrounds/mocha-mountains.png 

pkill waybar

sassc $HOME/.config/waybar/style-catppuccin-mocha.scss $HOME/.config/waybar/style.css

waybar


================================================
FILE: cfg/waybar/catppuccin-mocha-docked/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";

* {
  padding: 0;
  margin: 0;
  font-weight: bolder;
}

window#waybar {
  font-size: $font-size;
  /*border-radius: $radii;
   */
  background: transparentize($color: $bar-bg, $amount: 0.2);
}

#clock,
#custom-weather,
#cpu,
#memory,
#temperature,
#backlight,
#network,
#network.speed,
#bluetooth,
#pulseaudio,
#custom-notification {
  padding-left: $spacing;
  padding-right: $spacing;
  margin-top: $spacing * 1.5;
  margin-bottom: $spacing * 1.5;
}

#clock,
#network {
  padding-left: $spacing * 2;
  border-top-left-radius: $radii/2;
  border-bottom-left-radius: $radii/2;
}

#custom-weather,
#backlight,
#custom-notification {
  margin-right: $spacing * 2;
  padding-right: $spacing * 2;
  border-top-right-radius: $radii/2;
  border-bottom-right-radius: $radii/2;
}

#cpu {
  font-size: 1.1em;
  font-weight: bolder;
  color: $peach;
  transition: 400ms;
  animation: ws_normal 20s ease-out 10;
}

#bluetooth.connected {
  font-size: 1.15em;
  color: darken($color: $blue, $amount: 10);
}

#pulseaudio {
  padding-left: 0;
}

#image,
#workspaces,
#battery,
#tray,
#custom-power {
  padding-left: $spacing * 1.5;
  padding-right: $spacing * 1.5;
  margin-top: $spacing * 1.5;
  margin-bottom: $spacing * 1.5;
  margin-right: $spacing * 2;
  border-radius: $radii/2;
}

#workspaces {
  padding-left: 0;
}

#workspaces button {
  font-size: 0;
  min-width: $font-size * 1;
  min-height: $font-size * 1;
  margin: $spacing * 1.5;
  margin-top: $spacing * 1.5;
  margin-bottom: $spacing * 1.5;
  border-radius: $spacing * 10;
  background-color: $fg_color;
  transition: 100ms;
  animation: ws_normal 20s ease-out 10;
}

#workspaces button.empty {
  background-color: $dark_1;
}

#workspaces button.active {
  min-width: $font-size * 2.2;
  background-color: darken($color: $blue, $amount: 5);
  transition: 100ms;
}

#battery.full {
  font-size: 1.15em;
}

#custom-power {
  color: darken($color: $red, $amount: 10);
  margin-right: $spacing * 1.5;
}

.modules-left {
  margin-left: $spacing;
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-color-buttons/catppuccin-mocha-colored-buttons.scss
================================================
@import "./catppuccin-mocha.scss";

#cpu,
#memory,
#temperature,
#backlight {
  background-color: darken($color: $blue, $amount: 5);
  color: $color-fg;
}

#battery {
  background-color: darken($color: $teal, $amount: 5);
  color: $color-fg;
}

#tray {
  background-color: darken($color: $lavender, $amount: 0);
}

#network,
#pulseaudio,
#bluetooth,
#custom-notification {
  background-color: darken($color: $mauve, $amount: 15);
  color: $color-fg;
}

#custom-power {
  background-color: darken($color: $green, $amount: 40);
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-color-buttons/config.jsonc
================================================
{
  "spacing": 0,
  //"margin-left": 10,
  //"margin-right": 10,
  //"margin-top": 10,
  "margin-left": 0,
  "margin-right": 0,
  "margin-top": 0,
  "layer": "top",
  "reload_style_on_change": true,
  "modules-left": [
    "image",
    "hyprland/workspaces"
  ],
  "modules-center": [
    "clock"
  ],
  "modules-right": [
    "cpu",
    "memory",
    "temperature",
    "backlight",
    "battery",
    "tray",
    "network",
    "bluetooth",
    "pulseaudio",
    "custom/notification",
    "custom/power"
  ],
  "image": {
    "path": "/home/martin/Dokumente/Backgrounds/nixos.png",
    "size": 20,
    "interval": 86400, // once every day
    "on-click": "mpc toggle"
  },
  "hyprland/workspaces": {
    "format": "{icon}",
    "tooltip": false,
    "all-outputs": false,
    "current-only": true,
    "sort-by-number": true,
    "persistent-workspaces": {
      "1": "",
      "2": "",
      "3": "",
      "4": "",
      "5": "",
      "6": "",
      "7": "",
      "8": "",
      "9": "",
      "10": ""
    },
    "format-icons": {
      "1": "",
      "2": "",
      "3": "",
      "4": "",
      "5": "",
      "6": "",
      "7": "",
      "8": "",
      "9": "",
      "10": "",
      "active": "",
      "default": ""
    }
  },
  "clock": {
    "format": "{:%H:%M}",
    "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
    "format-alt": "{:%d.%m.%y - %H:%M}"
  },
  "cpu": {
    "format": "{icon}",
    "format-icons": [
      "󰝦",
      "󰪞",
      "󰪟",
      "󰪠",
      "󰪡",
      "󰪢",
      "󰪣",
      "󰪤",
      "󰪥"
    ],
    "tooltip": false,
    "interval": 1
  },
  "memory": {
    "tooltip": false,
    "format": "󰆼{used:.1f} GiB"
  },
  "temperature": {
    "tooltip": false,
    "thermal-zone": 6,
    "critical-threshold": 90,
    "format": "{temperatureC}°C",
    "interval": 1
  },
  "backlight": {
    "tooltip": false,
    "format": "{icon}{percent}%",
    "format-icons": [
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      ""
    ]
  },
  "battery": {
    "states": {
      "warning": 30,
      "critical": 15
    },
    "format": "{icon}",
    "format-full": "<span foreground=\"#2A995C\">󱐥</span>",
    "format-charging": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
    "format-plugged": "󱐋{capacity}%",
    "format-alt": "{icon} {capacity}%",
    "format-icons": [
      " ",
      " ",
      " ",
      " ",
      " "
    ],
    "interval": 1
  },
  "tray": {
    "spacing": 6
  },
  "network": {
    "format-wifi": "",
    "format-ethernet": "󰈀",
    "tooltip-format": "{ifname} ({ipaddr}) via {gwaddr} at\n{essid}",
    "format-linked": "{ifname} (No IP) ",
    "format-disconnected": "󰖪",
    "on-click": "swaync-client -t -sw"
  },
  "bluetooth": {
    "format": "",
    "format-disabled": "󰂲",
    "format-connected": "󰂱",
    "tooltip-format": "{controller_alias}\t{controller_address}",
    "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}",
    "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
    "on-click": "swaync-client -t -sw"
  },
  "pulseaudio": {
    // "scroll-step": 1, // %, can be a float
    "format": "{icon} {format_source}",
    "format-bluetooth": "{icon} {format_source}",
    "format-bluetooth-muted": " {icon} {format_source}",
    "format-muted": "󰸈 {format_source}",
    "format-source": "",
    "format-source-muted": "",
    "format-icons": {
      "headphone": "",
      "hands-free": "",
      "headset": "",
      "phone": "",
      "portable": "",
      "car": "",
      "default": [
        "",
        "",
        ""
      ]
    },
    "on-click": "swaync-client -t -sw",
    "on-click-right": "pavucontrol"
  },
  "custom/notification": {
    "tooltip": false,
    "format": "{icon}",
    "format-icons": {
      "notification": "󰂟",
      "none": "",
      "dnd-notification": "󰺁",
      "dnd-none": "",
      "inhibited-notification": "󰂟",
      "inhibited-none": "",
      "dnd-inhibited-notification": "󰺁",
      "dnd-inhibited-none": ""
    },
    "return-type": "json",
    "exec-if": "which swaync-client",
    "exec": "swaync-client -swb",
    "on-click": "swaync-client -t -sw",
    "on-click-right": "swaync-client -d -sw",
    "escape": true
  },
  "custom/power": {
    "format": "",
    "on-click": "wlogout -b 5 -c 0 -r 0 -T 0 -B 0",
    "interval": 86400, // once every day
    "tooltip": true
  }
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-color-buttons/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

is_swww_daemon_running() {
    if pgrep -x "swww-daemon" > /dev/null
    then
        return 0
    else
	exec swww-daemon &
        return 1
    fi
}

# wait for the swww-daemon
while ! is_swww_daemon_running; do
    echo "wait for swww-daemon"
    sleep 1
done

swww img ~/.config/backgrounds/mocha-mountains.png 

pkill waybar

sassc $HOME/.config/waybar/style-catppuccin-mocha.scss $HOME/.config/waybar/style.css

waybar


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-color-buttons/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";
@import "./catppuccin-mocha-colored-buttons.scss";

* {
  padding: 0;
  margin: 0;
  font-weight: bolder;
}

window#waybar {
  font-size: $font-size;
  /*border-radius: $radii;
  */
  background: transparentize($color: $bar-bg, $amount: 0.2);

}

#cpu,
#memory,
#temperature,
#backlight,
#network,
#bluetooth,
#pulseaudio,
#custom-notification {
  padding-left: $spacing;
  padding-right: $spacing;
  margin-top: $spacing*1.5;
  margin-bottom: $spacing*1.5;
}

#cpu,
#network {
  padding-left: $spacing*2;
  border-top-left-radius: $radii/2;
  border-bottom-left-radius: $radii/2;
}

#backlight,
#custom-notification {
  margin-right: $spacing*2;
  padding-right: $spacing*2;
  border-top-right-radius: $radii/2;
  border-bottom-right-radius: $radii/2;
}

#cpu {
  font-size: 1.1em;
  font-weight: bolder;
  color: $peach;
  transition: 400ms;
  animation: ws_normal 20s ease-out 10;
}

#bluetooth.connected {
  font-size: 1.15em;
  color: darken($color: $blue, $amount: 10);
}

#pulseaudio {
  padding-left: 0;
}

#image,
#workspaces,
#clock,
#battery,
#tray,
#custom-power {
  padding-left: $spacing;
  padding-right: $spacing;
  margin-top: $spacing*1.5;
  margin-bottom: $spacing*1.5;
  margin-right: $spacing*2.0;
  border-radius: $radii/2;
}

#workspaces button {
  font-size: 0;
  min-width: $font-size*0.85;
  min-height: $font-size*0.85;
  margin: $spacing*1.5;
  margin-top: $spacing*1.5;
  margin-bottom: $spacing*1.5;
  border-radius: $spacing*10;
  background-color: $fg_color;
  transition: 100ms;
  animation: ws_normal 20s ease-out 10;
}

#workspaces button.empty {
  background-color: $dark_1;
}

#workspaces button.active {
  min-width: $font-size*2;
  background-color: darken($color: $blue, $amount: 5);
  transition: 100ms;
}

#battery.full {
  font-size: 1.15em;
}

#custom-power {
  color: darken($color: $red, $amount: 10);
  margin-right: $spacing*1.5;
  /*border-top-right-radius: $radii;
  border-bottom-right-radius: $radii;
*/
}

.modules-left {
  margin-left: $spacing;
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-flat-buttons/catppuccin-mocha-flat-buttons.scss
================================================
@import "./catppuccin-mocha.scss";

#cpu,
#memory,
#temperature,
#backlight,
#battery,
#tray,
#network,
#pulseaudio,
#bluetooth,
#custom-notification,
#custom-power,
#clock,
#custom-weather {
  background-color: transparentize($color: $text, $amount: 0.75);
  color: $color-fg;
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-flat-buttons/config.jsonc
================================================
{
	"spacing": 0,
	"margin-left": 0,
	"margin-right": 0,
	"margin-top": 0,
	"layer": "bottom",
	"reload_style_on_change": true,
	"modules-left": [
		"image",
		"hyprland/workspaces"
	],
	"modules-center": [
		"clock"
		//"custom/weather"
	],
	"modules-right": [
		"network#speed",
		"memory",
		"temperature",
		"cpu",
		"backlight",
		"battery",
		"tray",
		"network",
		"bluetooth",
		"pulseaudio",
		"custom/notification",
		"custom/power"
	],
	"image": {
		"path": "/home/martin/Dokumente/Backgrounds/nixos.png",
		"size": 23,
		"interval": 86400, // once every day
		"on-click": "mpc toggle"
	},
	"hyprland/workspaces": {
		"format": "{icon}",
		"tooltip": false,
		"all-outputs": false,
		"current-only": true,
		"sort-by-number": true,
		"persistent-workspaces": {
			"1": "",
			"2": "",
			"3": "",
			"4": "",
			"5": "",
			"6": "",
			"7": "",
			"8": "",
			"9": "",
			"10": ""
		},
		"format-icons": {
			"1": "",
			"2": "",
			"3": "",
			"4": "",
			"5": "",
			"6": "",
			"7": "",
			"8": "",
			"9": "",
			"10": "",
			"active": "",
			"default": ""
		}
	},
	"clock": {
		"format": "{:%a. <span rise=\"1.5pt\">|</span> %H:%M<span rise=\"1.5pt\"></span>}",
		"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
		"format-alt": "{:%a. %d.%m.%y <span rise=\"1.5pt\">|</span> %H:%M <span rise=\"1.5pt\">|</span>}"
	},
	"custom/weather": {
		"exec": "${HOME}/.config/waybar/scripts/get_weather.sh",
		"return-type": "json",
		"format": "{}",
		"tooltip": true,
		"interval": 900
	},
	"cpu": {
		"format": "{icon}",
		"format-icons": [
			"󰝦",
			"󰪞",
			"󰪟",
			"󰪠",
			"󰪡",
			"󰪢",
			"󰪣",
			"󰪤",
			"󰪥"
		],
		"tooltip": false,
		"interval": 1
	},
	"memory": {
		"tooltip": false,
		"format": "  {used:.1f} GiB"
	},
	"temperature": {
		"tooltip": false,
		"thermal-zone": 6,
		"critical-threshold": 90,
		"format": "{temperatureC}°C",
		"interval": 1
	},
	"backlight": {
		"tooltip": false,
		"format": "{icon}{percent}%",
		"format-icons": [
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
		]
	},
	"battery": {
		"states": {
			"warning": 30,
			"critical": 15,
			"full-at": 98
		},
		"format": "{icon}",
		"format-full": "<span foreground=\"#2A995C\">󱐥</span>",
		"format-charging": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
		"format-plugged": "<span foreground=\"#2A995C\">󱐋</span>{capacity}%",
		"format-alt": "{icon} {capacity}%",
		"format-icons": [
			"<span foreground=\"#f38ba8\">󰂎</span>",
			"<span foreground=\"#f38ba8\">󰁺</span>",
			"<span foreground=\"#fab387\">󰁻</span>",
			"<span foreground=\"#fab387\">󰁼</span>",
			"<span foreground=\"#f9e2af\">󰁽</span>",
			"<span foreground=\"#f9e2af\">󰁾</span>",
			"<span foreground=\"#f9e2af\">󰁿</span>",
			"<span foreground=\"#a6e3a1\">󰂀</span>",
			"<span foreground=\"#a6e3a1\">󰂁</span>",
			"<span foreground=\"#a6e3a1\">󰂂</span>",
			"<span foreground=\"#a6e3a1\">󰁹</span>"
		],
		"interval": 1
	},
	"tray": {
		"spacing": 6
	},
	"network": {
		"format-wifi": "",
		"format-ethernet": "󰈀",
		"tooltip-format": "{ifname} ({ipaddr}) via {gwaddr} at\n{essid}",
		"format-linked": "{ifname} (No IP) ",
		"format-disconnected": "󰖪",
		"on-click": "swaync-client -t -sw"
	},
	"network#speed": {
		"format": "<span line_height=\"0.75\" size=\"9pt\"> {bandwidthUpBytes}\n {bandwidthDownBytes}</span>",
		"interval": 1
	},
	"bluetooth": {
		"format": "",
		"format-disabled": "󰂲",
		"format-connected": "󰂱",
		"tooltip-format": "{controller_alias}\t{controller_address}",
		"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}",
		"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
		"on-click": "swaync-client -t -sw"
	},
	"pulseaudio": {
		"format": "{icon} {format_source}",
		"format-bluetooth": "{icon} {format_source}",
		"format-bluetooth-muted": " {icon} {format_source}",
		"format-muted": "󰸈 {format_source}",
		"format-source": "",
		"format-source-muted": "",
		"format-icons": {
			"headphone": "",
			"hands-free": "",
			"headset": "",
			"phone": "",
			"portable": "",
			"car": "",
			"default": [
				"",
				"",
				" "
			]
		},
		"on-click": "swaync-client -t -sw",
		"on-click-right": "pavucontrol"
	},
	"custom/notification": {
		"tooltip": false,
		"format": "{icon}",
		"format-icons": {
			"notification": "󰂟",
			"none": "",
			"dnd-notification": "󰺁",
			"dnd-none": "",
			"inhibited-notification": "󰂟",
			"inhibited-none": "",
			"dnd-inhibited-notification": "󰺁",
			"dnd-inhibited-none": ""
		},
		"return-type": "json",
		"exec-if": "which swaync-client",
		"exec": "swaync-client -swb",
		"on-click": "swaync-client -t -sw",
		"on-click-right": "swaync-client -d -sw",
		"escape": true
	},
	"custom/power": {
		"format": "",
		"on-click": "wlogout -b 5 -c 0 -r 0 -T 0 -B 0",
		"interval": 86400, // once every day
		"tooltip": true
	}
}


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-flat-buttons/launch.sh
================================================
#!/usr/bin/env sh

# Catppuccin-Mocha

is_swww_daemon_running() {
    if pgrep -x "swww-daemon" > /dev/null
    then
        return 0
    else
	exec swww-daemon &
        return 1
    fi
}

# wait for the swww-daemon
while ! is_swww_daemon_running; do
    echo "wait for swww-daemon"
    sleep 1
done

swww img ~/.config/backgrounds/mocha-mountains.png 

pkill waybar

sassc $HOME/.config/waybar/style-catppuccin-mocha.scss $HOME/.config/waybar/style.css

waybar


================================================
FILE: cfg/waybar/catppuccin-mocha-docked-flat-buttons/style-catppuccin-mocha.scss
================================================
@import "./catppuccin-mocha.scss";
@import "./catppuccin-mocha-flat-buttons.scss";

* {
	padding: 0;
	margin: 0;
	font-weight: bolder;
}

window#waybar {
	font-size: $font-size;
	/*border-radius: $radii;
   */
	background: transparentize($color: $bar-bg, $amount: 0.2);

}

#clock,
#custom-weather,
#cpu,
#memory,
#temperature,
#backlight,
#network,
#network.speed,
#bluetooth,
#pulseaudio,
#custom-notification {
	padding-left: $spacing;
	padding-right: $spacing;
	margin-top: $spacing*1.5;
	margin-bottom: $spacing*1.5;
}

#clock,
#network {
	padding-left: $spacing*2;
	border-top-left-radius: $radii/2;
	border-bottom-left-radius: $radii/2;
}

#clock,
#backlight,
#custom-notification {
	margin-right: $spacing*2;
	padding-right: $spacing*2;
	border-top-right-radius: $radii/2;
	border-bottom-right-radius: $radii/2;
}

#cpu {
	font-size: 1.1em;
	font-weight: bolder;
	color: $peach;
	transition: 400ms;
	animation: ws_normal 20s ease-out 10;
}

#bluetooth.connected {
	font-size: 1.15em;
	color: darken($color: $blue, $amount: 10);
}

#pulseaudio {
	padding-left: 0;
}

#image,
#workspaces,
#battery,
#tray,
#custom-power {
	padding-left: $spacing*1.5;
	padding-right: $spacing*1.5;
	margin-top: $spacing*1.5;
	margin-bottom: $spacing*1.5;
	margin-right: $spacing*2.0;
	border-radius: $radii/2;
}

#workspaces {
	padding-left: 0;
}

#workspaces button {
	font-size: 0;
	min-width: $font-size*0.95;
	min-height: $font-size*0.95;
	margin: $spacing*1.5;
	margin-top: $spacing*1.5;
	margin-bottom: $spacing*1.5;
	border-radius: $spacing*10;
	background-color: $fg_color;
	transition: 100ms;
	animation: ws_normal 20s ease-out 10;
}

#workspaces button.empty {
	background-color: $dark_1;
}

#workspaces button.active {
	min-width: $font-size*2;
	background-color: darken($color: $blue, $amount: 5);
	transition: 100ms;
}

#battery.full {
	font-size: 1.15em;
}

#custom-power {
	color: darken($color: $red, $amount: 10);
	margin-right: $spacing*1.5;
}

.modules-left {
	margin-left: $spacing;
}


================================================
FILE: cfg/waybar/scripts/get_weather.sh
================================================
#!/usr/bin/env bash
for i in {1..5}; do
	text=$(curl -s "de.wttr.in/Chemnitz?nonce=$RANDOM\&format=1")

	if [[ $? == 0 ]]; then
		text=$(echo "$text" | sed -E "s|[+ ]||g")
		tooltip=$(curl -s "de.wttr.in/~50.8322608,12.9252977?nonce=$RANDOM\&format=4")
		if [[ $? == 0 ]]; then
			tooltip=$(echo "$tooltip" | sed -E "s/\s+/ /g")
			echo "{\"text\":\"$text\", \"tooltip\":\"$tooltip\"}"
			exit
		fi
	fi
	sleep 2
done
echo "{\"text\":\"error\", \"tooltip\":\"error\"}"


================================================
FILE: installers/install
================================================
#!/bin/bash

# Check if the system is an Arch Linux-based distribution
if [ -f /etc/os-release ]; then
  source /etc/os-release
  if [ "$ID" != "arch" ]; then
    echo "This script is intended for Arch Linux or Arch-based distributions only."
    read -p "Do you want to run this script anyway? (y/n): " run_script
    if [ "$run_script" != "y" ]; then
      exit 1
    fi
  fi
else
  echo "Unable to determine the distribution. Proceeding with the script..."
fi

git_dir=~/git

if [ -d "$git_dir" ]; then
  echo "$git_dir exists."
  cd "$git_dir"
else
  echo "$git_dir does not exist."
  echo "Creating $git_dir..."
  mkdir -p "$git_dir"
  cd "$git_dir"
  echo "$git_dir was created."
fi

# Check if Yay is installed
if [ -n "$(command -v yay)" ]; then
  echo "Yay (AUR Helper) is already installed."
else
  # Prompt the user to install Yay
  read -p "Yay (AUR Helper) is required. Do you want to install Yay? (y/n): " install_yay
  if [ "$install_yay" == "y" ]; then
    sudo pacman -S --needed git base-devel
    git clone https://aur.archlinux.org/yay.git
    cd yay
    makepkg -si
  else
    echo "Yay is required for this script. Exiting."
    exit 1
  fi
fi

if [ -d "$git_dir" ]; then
  echo "$git_dir exists."
  cd "$git_dir"
else
  echo "$git_dir does not exist."
  echo "Creating $git_dir..."
  mkdir -p "$git_dir"
  cd "$git_dir"
  echo "$git_dir was created."
fi

# needed packages
needed_pacman_packages=(
  "wget" "hyprland" "nano" "lshw" "bluez" "bluez-utils" "brightnessctl" "file-roller" "grim" "imagemagick"
  "gvfs" "inotify-tools" "libinput" "lm_sensors" "pavucontrol" "python-pam" "slurp" "swayidle" "playerctl"
  "wl-clipboard" "tracker3" "tracker3-miners" "qt5-base" "qt6-base" "gnome-bluetooth" "gnome-control-center"
  "kitty" "sassc"
)

needed_aur_packages=(
  "aylurs-gtk-shell-git" "grimblast-git" "gtklock" "gtklock-userinfo-module" 
  "hyprpicker" "ttf-ubuntu-nerd" "ttf-ubuntu-mono-nerd"
  "sway-audio-idle-inhibit-git" "swww-git" "pywal-16-colors" "xdg-desktop-portal-hyprland"
  "wf-recorder" "wl-clip-persist-git" "wayshot-bin"
)

# optional packages
optional_pacman_packages=(
  "discord" "btop" "firefox" "flatpak" "fprintd" "fwupd" "cifs-utils" "gdm" "gimp" "gnome-calculator" 
  "gnome-disk-utility" "gnome-keyring" "gnome-software" "gnome-sound-recorder" "gnome-tweaks"
  "intel-gpu-tools" "gvfs-smb" "libgnome-keyring" "mpv" "neofetch" "network-manager-applet"
  "nextcloud-client" "obs-studio" "smbclient" "seahorse" "polkit-gnome" "nautilus" "thunar" "tlp"
  "obsidian" "neovim" "neovide" "fzf" "wireguard-tools"
)

optional_aur_packages=(
  "spotify" "gdm-settings" "wev" "tlpui" "git-credential-manager-core" "overskride "
)

# print packages
echo "Available packages:"
echo "1) Install only needed packages (both offical Arch and AUR)"
echo "2) Install needed and optional packages (both offical Arch and AUR)"

read -p "Enter the number of your choice: " choice

if [ "$choice" == "1" ]; then
  # Installation of needed packages (Pacman)
  for package in "${needed_pacman_packages[@]}"; do
    sudo pacman -S --needed --noconfirm "$package"
  done

  # Installation of needd packages (AUR)
  for package in "${needed_aur_packages[@]}"; do
    yay -S --noconfirm "$package"
  done
elif [ "$choice" == "2" ]; then
  # Installation of needed packages (Pacman)
  for package in "${needed_pacman_packages[@]}"; do
    sudo pacman -S --needed --noconfirm "$package"
  done

  # Installation of needed packages (AUR)
  for package in "${needed_aur_packages[@]}"; do
    yay -S --noconfirm "$package"
  done

  # Installation of optional packages (Pacman)
  for package in "${optional_pacman_packages[@]}"; do
    sudo pacman -S --noconfirm "$package"
  done

  # Installation of packages (AUR)
  for package in "${optional_aur_packages[@]}"; do
    yay -S --noconfirm "$package"
  done
else
  echo "Invalid choice. No packages were installed."
fi

git clone https://github.com/RoccoRakete/hyprland-dots.git
git clone https://github.com/RoccoRakete/hyprland-gtk-themes.git
git clone https://github.com/RoccoRakete/hyprland-icons.git

# Check if the directories exist
if [ -d ~/.config ]; then
  echo "~/.config directory exists."
  echo "Do you want to create a backup of the existing ~/.config directory and copy the new config? (y/n): "
  read create_config_backup
  if [ "$create_config_backup" == "y" ]; then
    mv ~/.config ~/.config_bak
    echo "~/.config_bak was created!"
    mkdir -p ~/.config
    mkdir -p ~/.dots
    echo "~/.config was created!"
    cp -r ./hyprland-dots/* ~/.dots
    ln -s ~/.dots/* ~/.config
  fi
else
  echo "~/.config directory does not exist."
  echo "Do you want to create it and copy the new config? (y/n): "
  read create_config
  if [ "$create_config" == "y" ]; then
    mkdir -p ~/.config
    mkdir -p ~/.dots
    echo "~/.config was created!"
    cp -r ./hyprland-dots/* ~/.dots
    ln -s ~/.dots/* ~/.config
  fi
fi

if [ -d ~/.icons ]; then
  echo "~/.icons directory exists."
  echo "Do you want to create a backup of the existing ~/.icons directory and copy the new icons? (y/n): "
  read create_icons_backup
  if [ "$create_icons_backup" == "y" ]; then
    mv ~/.icons ~/.icons_bak
    echo "~/.icons_bak was created!"
    mkdir -p ~/.icons
    echo "~/.icons was created!"
    cp -r ./hyprland-icons/* ~/.icons
  fi
else
  echo "~/.icons directory does not exist."
  echo "Do you want to create it and copy the new icons? (y/n): "
  read create_icons
  if [ "$create_icons" == "y" ]; then
    mkdir -p ~/.icons
    echo "~/.icons was created!"
    cp -r ./hyprland-icons/* ~/.icons
  fi
fi

if [ -d ~/.themes ]; then
  echo "~/.themes directory exists."
  echo "Do you want to create a backup of the existing ~/.themes directory and copy the new themes? (y/n): "
  read create_themes_backup
  if [ "$create_themes_backup" == "y" ]; then
    mv ~/.themes ~/.themes_bak
    echo "~/.themes_bak was created!"
    mkdir -p ~/.themes
    echo "~/.themes was created!"
    cp -r ./hyprland-gtk-themes/* ~/.themes
  fi
else
  echo "~/.themes directory does not exist."
  echo "Do you want to create it and copy the new themes? (y/n): "
  read create_themes
  if [ "$create_themes" == "y" ]; then
    mkdir -p ~/.themes
    echo "~/.themes was created!"
    cp -r ./hyprland-gtk-themes/* ~/.themes
  fi
fi

# install git version of Hyprland
read -p "Do you want to install the Git-Version of Hyprland? (Y/n): " choice

if [[ $choice == "n" || $choice == "N" ]]; then
  echo "hyprland-git was not installed!"
else
  echo "installing 'hyprland-git' ..."
  yay -S hyprland-git --noconfirm
  if [ $? -eq 0 ]; then
    echo "hyprland-git was installed!"
  else
    echo "Installation was aborted! Make sure you have 'yay' installed! "
  fi
fi

# install libadwaita-without-adwaita-git
read -p "Install libadwaita-without-adwaita? This is needed to run GTK4/Adwaita applications with a GTK3 theme... (Y/n): " choice

if [[ $choice == "n" || $choice == "N" ]]; then
  echo "libadwaita-without-adwaita-git was not installed!"
else
  echo "installing 'libadwaita-without-adwaita-git' ..."
  yay -S libadwaita-without-adwaita-git --noconfirm
  if [ $? -eq 0 ]; then
    echo "libadwaita-without-adwaita-git was installed!"
  else
    echo "Installation was aborted! Make sure you have 'yay' installed! "
  fi
fi

# install nvChad
read -p "Install nvChad? (Y/n): " choice

if [[ $choice == "n" || $choice == "N" ]]; then
  echo "nvChad was not installed!"
else
  echo "installing 'nvChad' ..."
  git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1
  if [ $? -eq 0 ]; then
    echo "nvChad was installed ... to set it up start 'neovim'"
  else
    echo "Installation was aborted!"
  fi
fi

# Download and install Hermit Nerd Font
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/Hermit.zip
unzip Hermit.zip -d Hermit
sudo cp -r ./Hermit /usr/share/fonts

# Edit monitors example config
example_conf_file="$HOME/.dots/hypr/presets/monitors.exampleconf"
conf_file="$HOME/.dots/hypr/monitors.conf"

# Check if file exists
if [ -e "$example_conf_file" ]; then
    read -p "Do you want so edit the monitors config now? Hyprland wouldn't work correctly otherwise! (y/n): " choice

    if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
        nano "$example_conf_file"
        if [ -e "$example_conf_file" ]; then
            cp "$example_conf_file" "$conf_file"
            echo "The file has been edited and copied to $conf_file successfully."
        else
            echo "The file doesn't exist!?"
        fi
    else
        echo "The file hasn't be edited!"
    fi
else
    echo "The exampleconfig doesn't exist!"
fi

sudo systemctl enable --now tlp.service

# Prompt the user to restart the computer
read -p "Installation has now completed. Do you want to reboot now? (y/n): " restart_pc
if [ "$restart_pc" == "y" ]; then
  reboot
fi


================================================
FILE: installers/thinkfan
================================================
#!/bin/bash

# Hardware detect
hardware_info=$(sudo lshw 2>/dev/null)

if [[ $hardware_info == *"Lenovo"* ]]; then
  echo "Lenovo-Laptop detected."
  
  echo "Do you want to install thinkfan? (y/n): "
  read install_thinkfan
  if [ "$install_thinkfan" == "y" ]; then
    yay -S thinkfan
    echo "Thinkfan has been installed."
    
    if [ -e /etc/thinkfan.yaml ]; then
      echo "Do you want to rename the existing thinkfan.yaml to thinkfan.bak? (y/n): "
      read rename_config
      if [ "$rename_config" == "y" ]; then
        sudo mv /etc/thinkfan.yaml /etc/thinkfan.bak
        echo "Existing thinkfan.yaml has been renamed to thinkfan.bak."
      fi
    fi

    echo "Do you want to copy the new thinkfan configuration? (y/n): "
    read copy_config
    if [ "$copy_config" == "y" ]; then
      sudo cp ~/.dots/scriptsnstuff/thinkfan.yaml /etc/thinkfan.yaml
      echo "New thinkfan configuration has been copied."
    fi
  else
    echo "Thinkfan config has not been copied."
  fi
else
  echo "No Lenovo-Laptop detected..."
fi

if [ -n "$(command -v thinkfan)" ]; then
  echo "Thinkfan is installed."
  read -p "Do you want to enable and start Thinkfan now? (y/n): " enable_thinkfan
  if [ "$enable_thinkfan" == "y" ]; then
    sudo systemctl enable thinkfan
    sudo systemctl start thinkfan
    echo "Thinkfan has been enabled and started."
  fi
fi

================================================
FILE: installers/zsh
================================================
#!/bin/bash

echo "Do you want to install ZSH and related extensions and configure Oh My Zsh? (y/n): "
read install_zsh

if [ "$install_zsh" == "y" ]; then
  sudo pacman --noconfirm -S zsh
  yay -S --noconfirm -S zsh-theme-powerlevel10k-git
  sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  sudo git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
  sudo git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
  sudo git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting
  sudo git clone --depth 1 -- https://github.com/marlonrichert/zsh-autocomplete.git $ZSH_CUSTOM/plugins/zsh-autocomplete
  cp ./hyprland-dots/.zshrc ~/.zshrc
  echo "ZSH and related extensions have been installed and configured."
else
  echo "ZSH and related extensions have not been installed."
fi

================================================
FILE: nixos/configs/home-configs/kitty.nix
================================================
{ ... }:

{
  programs.kitty = {
    enable = true;
    theme = "Catppuccin-Mocha";
    settings = {
      font_family = "Hurmit Nerd Font";
      font_size = "14.0";
      #background = "#1E1E1E";
      background_opacity = "0.9";
      #foreground = "#DEDDDA";
      #tab_bar_background = "#1E1E1E";
      scrollback_lines = 10000;
      show_hyperlink_targets = "yes";
      focus_follows_mouse = "no";
      enable_audio_bell = false;
      tab_bar_min_tabs = 1;
      tab_bar_edge = "bottom";
      tab_bar_style = "powerline";
      tab_powerline_style = "slanted";
      tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
      url_style = "none";
      underline_hyperlinks = "never";
    };
    extraConfig =
      "modify_font underline_position 3" + "\n" +
      "modify_font underline_thickness 300%" + "\n" +
      "modify_font strikethrough_position 2px";
  };
}


================================================
FILE: nixos/configs/home-configs/styling.nix
================================================
{ pkgs, ... }:

{
  imports = [
    ../../pkgs
  ];

  home = {

    # Cursor
    pointerCursor = {
      gtk.enable = true;
      package = pkgs.bibata-cursors;
      name = "Bibata-Modern-Classic";
      size = 24;
    };
  };

  gtk = {
    enable = true;

    # GTK-Icons
    # Yaru
    #iconTheme.package = pkgs.yaru-theme;
    #iconTheme.name = "Yaru";

    # MoreWaita
    iconTheme.package = pkgs.morewaita-icon-theme;
    iconTheme.name = "MoreWaita";

    # GTK-Colors
    # Catppuccin
    theme.name = "Catppuccin-Mocha-Standard-Blue-Dark";
    theme.package = pkgs.catppuccin-gtk.override {
      accents = [ "blue" ];
      size = "standard";
      variant = "mocha";
    };

    # Kanagawa
    #theme.name = "Kanagawa-B";
    #theme.package = pkgs.kanagawa-gtk-theme.override { };

    # Fonts
    font = {
      name = "Ubuntu Nerd Font";
      size = 13;
    };
  };

  # QT
  qt = {
    enable = true;
    platformTheme = "gtk";
    style.name = "Catppuccin-Mocha-Standard-Blue-Dark";
  };
}


================================================
FILE: nixos/configs/home-configs/waybar.nix
================================================
{ inputs, pkgs, ... }:

{
  programs = {
    waybar = {
      enable = true;
      package = inputs.waybar.packages.${pkgs.system}.waybar;
    };
  };
}


================================================
FILE: nixos/configs/home-configs/zsh.nix
================================================
{ pkgs, lib, config, ... }:

{
  programs.zsh = {
    enable = true;
    initExtraFirst =
      #"wal -R" + "\n" +
      "clear";

    initExtra =
      "source ~/.p10k.zsh" + "\n" +
      "neofetch" + "\n" +
      "export TERM=xterm" + "\n" +
      "export EDITOR=nvim" + "\n" +
      "bindkey '^[[A' menu-complete"
    ;

    shellAliases = {
      #ll = "ls -lah";
      ll = "eza -loah --icons=always --no-permissions --git";
      v = "nvim";

      editd = "nvim ~/.dots";

      pushd = "cd ~/.dots && git add -A && git commit && git push --repo https://github.com/RoccoRakete/hyprland-dots.git && cd ~";
      addd = "cd ~/.dots && git add -A && cd ~";

      update = "sudo nixos-rebuild switch";
      flake-update = "nix flake update ~/.dots/nixos";
      fwup = "sudo fwupdmgr refresh --force && sudo fwupdmgr get-updates && sudo fwupdmgr update";

      upgrade-desktop = "sudo nixos-rebuild switch --upgrade --flake ~/.dots/nixos#OptiPlex3060";
      home-upgrade-desktop = "home-manager switch --flake ~/.dots/nixos#OptiPlex3060";
      news-desktop = "home-manager news --flake ~/.dots/nixos#OptiPlex3060";

      upgrade-laptop = "nh os switch -H ThinkPad";
      home-upgrade-laptop = "nh home switch -c ThinkPad";
      news-laptop = "home-manager news --flake ~/.dots/nixos#ThinkPad";
    };

    enableCompletion = false;
    syntaxHighlighting.enable = true;
    autosuggestion.enable = true;

    historySubstringSearch = {
      enable = true;
      searchUpKey = [ "\\eOA" ];
      searchDownKey = [ "\\eOB" ];
    };
    history.size = 10000;
    history.path = "${config.xdg.dataHome}/zsh/history";

    zplug = {
      enable = true;
      plugins = [
        { name = "zsh-users/zsh-autosuggestions"; }
        { name = "marlonrichert/zsh-autocomplete"; }
        { name = "romkatv/powerlevel10k"; tags = [ as:theme depth:1 ]; }
      ];
    };

    oh-my-zsh = {
      enable = false;
      plugins = [
        "git"
        "colored-man-pages"
      ];
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/bluetooth.nix
================================================
{ ... }:

{
  hardware = {
    bluetooth.enable = true;
    bluetooth.powerOnBoot = true;
    bluetooth = {
      settings = {
        General = {
          ControllerMode = "dual";
          FastConnectable = "true";
          Experimental = "true";
        };
        Policy = {
          AutoEnable = "true";
        };
      };
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/autopairs.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.nvim-autopairs = {
    enable = true;
    settings = {
      checkTs = true;
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/bufferline.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.bufferline = {
    enable = true;
    mode = "buffers";
    diagnostics = "nvim_lsp";
    indicator.style = null;

    #separatorStyle = "slant";
    closeIcon = "󰅚";
    bufferCloseIcon = "󰅙";
    modifiedIcon = "󰀨";

    offsets = [
      {
        filetype = "neo-tree";
        text = "File Explorer";
        text_align = "center";
        separator = false;
      }
    ];

    highlights =
      {
        indicatorSelected.fg = "#89b4fa";
        #tabSeparatorSelected.fg = "#89b4fa";
      };

    highlights = rec {
    #  # Tab bar fill
      #fill.bg = "#ffffff";
    #  fill.fg = "#5a5b64";

    #  # Tab fill
    #  background.fg = "#5a5b64";
    #  background.bg = "#000000";
    #  background.sp = fill.bg;

    # Tab separator
    #  separator = background // { fg = fill.bg; };
    #  separatorVisible = background // { fg = fill.bg; };

    #  # Path name
    #  duplicate = background // { fg = "#5a5b64"; };

    #  # buffer = { fg = "#5a5b64"; } // background;
    #  #modified = background // { fg = "#f38ba8"; };
    #  closeButton = background;

    # duplicate.bg = "#21222a";
    #pick.bg = "#89b4fa";
    #  hint.bg = "#000000";
    #error.bg = "#f38ba8";
    #warning.bg = "#eba0ac";
    #info.bg = "#f9e2af";
    # hint.bg = "#21222a";
    #  hintDiagnostic.bg = "#89b4fa";
    #  infoDiagnostic.bg = "#f9e2af";
    #  errorDiagnostic.bg = "#f38ba8";
    #  warningDiagnostic.bg = "#eba0ac";
    # numbers.bg = "#21222a";

    # icon = background;
    #  bufferSelected.fg = "#ecedfa";
    #  separatorSelected.fg = separator.fg;
    # separatorSelected.fg = "#000000";
    #  closeButtonSelected.fg = "#ecedfa";

    # nameVisible.fg = "#ecedfa";
    #  modifiedSelected.fg = "#f38ba8";
    #  modified.bg = "#000000";

    #  bufferVisible.fg = "#5a5b64";
    #  infoVisible.fg = "#eba0ac";
    };
    diagnosticsIndicator = ''
      function(count, level)
        local icon = level:match("error") and " " or ""
        return " " .. icon .. count
      end
    '';
    #extraOptions = {
    #  highlights = {
    #    tab_separator_selected = {
    #      underline = "#89b4fa";
    #    };
    #  };
    #};
  };
}



================================================
FILE: nixos/configs/nixos-configs/nixvim/conform.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.conform-nvim = {
    enable = true;
    formattersByFt = {
      "*" = [ "codespell" ];
      "_" = [ "trim_whitespace" ];
      #go = [ "goimports" "golines" "gofmt" "gofumpt" ];
      javascript =  [ "prettierd" ];
      typescript =  [ "prettierd" ];
      yaml =  [ "prettierd" ];
      json = [ "jq" ];
      lua = [ "stylua" ];
      scss = [ "prettierd" ];
      css = [ "prettierd" ];
      python = [ "isort" "black" ];
      rust = [ "rustfmt" ];
      sh = [ "shfmt" ];
      #terraform = [ "terraform_fmt" ];
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/dashboard.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.dashboard = {
    enable = true;
    header = [
      "███╗   ██╗ ███████╗ ██████╗  ██╗   ██╗ ██╗ ███╗   ███╗"
      "████╗  ██║ ██╔════╝██╔═══██╗ ██║   ██║ ██║ ████╗ ████║"
      "██╔██╗ ██║ █████╗  ██║   ██║ ██║   ██║ ██║ ██╔████╔██║"
      "██║╚██╗██║ ██╔══╝  ██║   ██║ ╚██╗ ██╔╝ ██║ ██║╚██╔╝██║"
      "██║ ╚████║ ███████╗╚██████╔╝  ╚████╔╝  ██║ ██║ ╚═╝ ██║"
      "╚═╝  ╚═══╝ ╚══════╝ ╚═════╝    ╚═══╝   ╚═╝ ╚═╝     ╚═╝"
    ];
  };
}



================================================
FILE: nixos/configs/nixos-configs/nixvim/efmls.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.efmls-configs = {
    enable = false;
    setup.nix.formatter = "nixfmt";
    setup.scss.formatter = "prettier";
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/keymaps.nix
================================================
{ ... }:

{
  programs = {
    nixvim = {
      keymaps = [
        {
          key = "<leader>lf";
          action = "<cmd>lua require('conform').format({ lsp_fallback = true, async = false, timeout_ms = 500 })<CR>";

          options = {
            silent = true;
          };
        }
        {
          key = ".";
          action = ":";
        }

        {
          key = "<leader>bb";
          action = "<CMD>Telescope file_browser<NL>";
        }

        {
          key = "<leader>t";
          action = "<CMD>Neotree<NL>";
        }

        {
          key = "<leader>w";
          action = "<CMD>WhichKey<NL>";
        }

        {
          key = "<Tab>";
          action = "<CMD>:bnext<NL>";
        }

        {
          key = "<leader>c";
          action = "<CMD>:bp | bd #<NL>";
        }
        {
          key = "<leader>c";
          action = "<CMD>:bp | bd #<NL>";
        }
      ];
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/lsp-format.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.lsp-format = {
    enable = false; 
    lspServersToEnable = [
      "nixd"
      "efm"
    ];
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/lsp-servers.nix
================================================
{ ... }:

{
  programs = {
    nixvim = {
      plugins = {
        lsp.servers.nixd.enable = true;
        lsp.servers.cssls.enable = true;
        lsp.servers.java-language-server.enable = true;
        lsp.servers.jsonls.enable = true;
        lsp.servers.lua-ls.enable = true;
        #lsp.servers.pylsp.enable = true;
        lsp.servers.rust-analyzer.enable = true;
        lsp.servers.rust-analyzer.installCargo = true;
        lsp.servers.rust-analyzer.installRustc = true;
        lsp.servers.tsserver.enable = false;
        lsp.servers.yamlls.enable = true;
        lsp.servers.efm.enable = true;
      };
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/lsp.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.lsp = {
    enable = true;
    #keymaps.lspBuf = {
    #  "<leader>fm" = "format";
    #};
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/neo-tree.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.neo-tree = {
    enable = true;
    autoCleanAfterSessionRestore = true;
    closeIfLastWindow = true;

    window = {
      position = "left";
    };

    filesystem = {
      followCurrentFile.enabled = true;
      filteredItems = {
        hideHidden = false;
        hideDotfiles = false;
        forceVisibleInEmptyFolder = true;
        hideGitignored = false;
      };
    };

    window.mappings = {
      "<bs>" = "navigate_up";
      "." = "set_root";
      "f" = "fuzzy_finder";
      "/" = "filter_on_submit";
      "h" = "show_help";
    };

    eventHandlers =
      {
        neo_tree_buffer_enter = ''
            function()
          vim.cmd 'highlight! Cursor blend=100'
          end
        '';
        neo_tree_buffer_leave = ''
            function()
          vim.cmd 'highlight! Cursor guibg=#5f87af blend=0'
          end
        '';
      };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/nvim-cmp.nix
================================================
{ ... }:

{
  programs.nixvim.plugins = {
    cmp = {
      enable = true;
      extraOptions.sources =
        [
          { name = "nvim_lsp"; }
          { name = "path"; }
          { name = "buffer"; }
          { name = "luasnip"; }
          { name = "cmdline"; }
        ];

        settings.mapping = {
          "<CR>" = "cmp.mapping.confirm({ select = true })";
          "<C-Space>" = "cmp.mapping.complete()";
          "<C-d>" = "cmp.mapping.scroll_docs(-4)";
          "<C-e>" = "cmp.mapping.close()";
          "<C-f>" = "cmp.mapping.scroll_docs(4)";
          "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
          "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
        };
        settings.snippet.expand = ''
        function(args)
        require('luasnip').lsp_expand(args.body)
        end
        '';
      };
      cmp-cmdline.enable = true;
    };
  }




================================================
FILE: nixos/configs/nixos-configs/nixvim/nvim.nix
================================================
{ pkgs, ... }:

{
  imports = [
    ./keymaps.nix
    ./nvim-cmp.nix
    ./lsp.nix
    ./bufferline.nix
    ./telescope.nix
    ./neo-tree.nix
    ./prettier.nix
    ./lsp-servers.nix
    ./treesitter.nix
    ./autopairs.nix
    ./whichkey.nix
    ./dashboard.nix
    ./efmls.nix
    ./lsp-format.nix
    ./conform.nix
  ];
  programs = {
    nixvim = {
      enable = true;
      globals.mapleader = " ";
      clipboard.providers.wl-copy.enable = true;

      options = {
        number = true;
        relativenumber = false;
        shiftwidth = 2;
      };
      plugins = {
        nix.enable = true;

        lsp-lines.enable = true;
        lspkind.enable = true;

        neogit.enable = true;
        cmp-zsh.enable = true;
        noice.enable = true;
        nvim-colorizer.enable = true;
        luasnip.enable = true;
        rust-tools.enable = true;

        notify = {
          enable = true;
          #backgroundColour = "#000000";
          timeout = 2000;
          fps = 120;
          stages = "fade";
        };

        airline = {
          enable = true;
          #powerline = true;
          settings = {
            theme = "catppuccin";
          };
        };
      };

      #autoCmd = [
      #  {
      #    event = [ "BufWrite" ];
      #    pattern = [ "" ];
      #    command = "lua require('conform').format({ lsp_fallback = true, async = false, timeout_ms = 500 })<CR>";
      #  }
      #];

      extraPlugins = with pkgs.vimPlugins; [
        telescope-ui-select-nvim
        #vim-autoformat
        vim-jsbeautify

      ];

      extraConfigLua =
        ''if vim.g.neovide then'' + "\n" +
        ''vim.o.guifont = "Hurmit Nerd Font:h14"'' + "\n" +

        ''vim.keymap.set('n', '<C-S-s>', ':w<CR>') -- Save'' + "\n" +
        ''vim.keymap.set('v', '<C-S-c>', '"+y') -- Copy'' + "\n" +
        ''vim.keymap.set('n', '<C-S-v>', '"+P') -- Paste normal mode'' + "\n" +
        ''vim.keymap.set('v', '<C-S-v>', '"+P') -- Paste visual mode'' + "\n" +
        ''vim.keymap.set('c', '<C-S-v>', '<C-R>+') -- Paste command mode'' + "\n" +
        ''vim.keymap.set('i', '<C-S-v>', '<ESC>l"+Pli') -- Paste insert mode'' + "\n" +
        "end";


      #colorschemes.kanagawa = {
      #  enable = true;
      #  terminalColors = true;
      #};

      #colorschemes.ayu = {
      #  enable = true;
      #  mirage = true;
      #};

      colorschemes.catppuccin = {
        enable = true;
        settings = {
          flavour = "mocha";
          transparentBackground = false;
        };
      };

    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/prettier.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.none-ls.sources.formatting.prettier = {
    enable = true;
    disableTsServerFormatter = true;
  };
}



================================================
FILE: nixos/configs/nixos-configs/nixvim/telescope.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.telescope = {
    enable = true;

    enabledExtensions = [ "ui-select" ];
    extensions.ui-select.enable = true;
    extensions.frecency.enable = false;
    extensions.fzf-native.enable = true;

    extensions.file-browser = {
      enable = true;
      settings.hidden = true;
      settings.depth = 9999999999;
      settings.auto_depth = true;
    };
    keymaps = {
      "<leader>ff" = "find_files";
      "<leader>fs" = "grep_string";
      "<leader>fg" = "live_grep";
    };
    settings = {
      pickers = {
        find_files = {
          hidden = true;
        };
      };
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/treesitter.nix
================================================
{ ... }:

{
  programs.nixvim.plugins = {
    cmp-treesitter.enable = true;
    treesitter.enable = true;
    treesitter-refactor = {
      enable = true;
      highlightCurrentScope.enable = true;
      highlightCurrentScope.disable = [
        "nix"
      ];
      highlightDefinitions.enable = true;
      navigation.enable = true;
      smartRename.enable = true;
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/nixvim/whichkey.nix
================================================
{ ... }:

{
  programs.nixvim.plugins.which-key = {
    enable = true;
    icons = {
      separator = "";
      group = "";
    };
    keyLabels = {
     "<leader>" = "SPC"; 
    };
    registrations = {
      "<leader>c" = "󰅙 Close Buffer";
      "<leader>t" = "󰙅 FileExplorer";
      "<leader>f" = " Telescope";
      "<leader>w" = " WhichKey?!";
      "<leader>ff" = " Find Files";
      "<leader>l" = " LSP";
      "<leader>lf" = "󰉡 Format Buffer";
    };
  };
}


================================================
FILE: nixos/configs/nixos-configs/programs.nix
================================================
{ pkgs, inputs, ... }:

{
  programs = {
    hyprland = {
      enable = true;
      package = inputs.hyprland.packages.${pkgs.system}.hyprland;
    };

    thunar = {
      plugins = with pkgs.xfce; [
        thunar-archive-plugin
        thunar-volman
      ];
      enable = true;
    };

    virt-manager = {
      enable = true;
    };

    dconf.enable = true;
    zsh.enable = true;
    direnv.enable = true;
    nano.enable = false;
    ssh.askPassword = "${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass";
  };
}






================================================
FILE: nixos/configs/nixos-configs/services.nix
================================================
{ pkgs, ... }:

{
  imports = [
  ];

  services = {
    blueman.enable = true;
    fwupd.enable = true;
    tumbler.enable = true;
    gvfs.enable = true;
    gnome.core-utilities.enable = true;
    gnome.core-shell.enable = true;
    upower.enable = true;
    xserver.desktopManager.xfce.enable = true;
    power-profiles-daemon.enable = false;
    xserver.displayManager.gdm.enable = true;
    gnome.gnome-keyring.enable = true;
    gnome.tracker.enable = true;
    gnome.tracker-miners.enable = true;
    xserver = {
      enable = true;
      xkb.layout = "de";
      xkb.variant = "";
      excludePackages = [ pkgs.xterm ];
    };
    pipewire = {
      enable = true;
      alsa.enable = true;
      alsa.support32Bit = true;
      pulse.enable = true;
    };
    printing.enable = true;
    acpid.enable = true;
    flatpak.enable = true;
    openssh = {
      enable = true;
      settings = {
        PasswordAuthentication = false;
      };
    };
    udev.extraRules = ''
      # DFU (Internal bootloader for STM32 and AT32 MCUs)
      ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="plugdev"
      ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="plugdev"
    '';
  };
}


================================================
FILE: nixos/configs/nixos-configs/tlp.nix
================================================
{ ... }:

{
  services = {
    tlp.enable = true;
    tlp.settings = {
      PLATFORM_PROFILE_ON_BAT = "low-power";
      CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
      CPU_BOOST_ON_BAT = 1;
      CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
      MEM_SLEEP_ON_BAT = "deep";

      PLATFORM_PROFILE_ON_AC = "performance";
      CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
      CPU_BOOST_ON_AC = 1;
      CPU_SCALING_GOVERNOR_ON_AC = "performance";

      WOL_DISABLE = "Y";
    };
  };
}


================================================
FILE: nixos/flake.nix
================================================
{
  description = "Martin's Nix-Flakes Config";

  inputs = {
    nixpkgs.url = "nixpkgs/nixos-unstable";

    home-manager = {
      url = "github:nix-community/home-manager/master";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nix-software-center = {
      url = "github:snowfallorg/nix-software-center";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nixos-conf-editor = {
      url = "github:snowfallorg/nixos-conf-editor";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nixvim = {
      url = "github:nix-community/nixvim";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    eza = {
      url = "github:eza-community/eza";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nh = {
      url = "github:viperML/nh";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    ags = {
      url = "github:Aylur/ags";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    waybar = {
      url = "github:alexays/waybar";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    anyrun = {
      url = "github:Kirottu/anyrun";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    walker = {
      url = "github:abenz1267/walker";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    hyprland = {
      url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
    };
    hyprlock = {
      url = "github:hyprwm/Hyprlock";
    };
    hypridle = {
      url = "github:hyprwm/Hypridle";
    };
    hyprland-plugins = {
      url = "github:hyprwm/hyprland-plugins";
      inputs.hyprland.follows = "hyprland";
    };
  };

  outputs = { nixpkgs, home-manager, nixvim, ... }@inputs:
  let
    vars = import ./variables.nix;
    system = "x86_64-linux";
    lib = nixpkgs.lib;
    pkgs = nixpkgs.legacyPackages.${system};
  in
  {
      # system configurations
      # desktop
      nixosConfigurations = {
        ${vars.desktop} = lib.nixosSystem {
          inherit system;
          specialArgs = { inherit inputs; };
          modules = [
            ./hosts/desktop/configuration-desktop.nix
            inputs.nixvim.nixosModules.nixvim
          ];
        };

        # laptop
        ${vars.laptop} = lib.nixosSystem {
          inherit system;
          specialArgs = { inherit inputs; };
          modules = [
            ./hosts/laptop/configuration-laptop.nix
            inputs.nixvim.nixosModules.nixvim
          ];
        };
      };

      # home configurations
      # desktop
      homeConfigurations = {
        ${vars.desktop} = home-manager.lib.homeManagerConfiguration {
          extraSpecialArgs = { inherit inputs; };
          inherit pkgs;
          modules = [
            ./hosts/desktop/home-desktop.nix
          ];
        };
      };

      # laptop
      homeConfigurations = {
        ${vars.laptop} = home-manager.lib.homeManagerConfiguration {
          extraSpecialArgs = { inherit inputs; };
          inherit pkgs;
          modules = [
            ./hosts/laptop/home-laptop.nix
          ];
        };
      };
    };
  }


================================================
FILE: nixos/global-dotfiles/gtklock/config.ini
================================================
[main]
modules=/home/martin/.dots/gtklock/userinfo-module.so

[userinfo]
image-size=128
under-clock=true



================================================
FILE: nixos/global-dotfiles/gtklock/style.css
================================================
* {
}

window {
    background-image: url("../backgrounds/last/image_blurred.png");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;
}

box#window-box {
    padding-bottom: 5em;
}

label#clock-label {
    font-size: 5em;
    padding-bottom: 3em;
    color: @theme_fg_color;
}
label#input-label {
    font-size: 0px;
}

entry#input-field {
    color: @theme_fg_color;
    background-color: @theme_bg_color;
}

button {
    color: @theme_fg_color;
    background-color: @theme_bg_color;
}

image#user-image {

}


================================================
FILE: nixos/global-dotfiles/swaylock/config
================================================
#  ____                     _            _     
# / ___|_      ____ _ _   _| | ___   ___| | __ 
# \___ \ \ /\ / / _` | | | | |/ _ \ / __| |/ / 
#  ___) \ V  V / (_| | |_| | | (_) | (__|   <  
# |____/ \_/\_/ \__,_|\__, |_|\___/ \___|_|\_\ 
#                     |___/                    
#  
# ----------------------------------------------------- 

ignore-empty-password
font="Ubuntu Nerd Font"

clock
timestr=%R
datestr=%a, %d. %B

# Add an image as a background 
image=/tmp/hypr/latest_screenshot/latest_blur.png

# Fade in time
fade-in=0

# Show/Hide indicator circle
indicator

# smaller indicator
indicator-radius=150

# bigger indicator
# indicator-radius=300

indicator-thickness=5
indicator-caps-lock

# Define all colors

key-hl-color=00000066
separator-color=00000000

inside-color=00000033
inside-clear-color=ffffff00
inside-caps-lock-color=ffffff00
inside-ver-color=ffffff00
inside-wrong-color=ffffff00

ring-color=ffffff00
ring-clear-color=ffffff
ring-caps-lock-color=CC241D
ring-ver-color=ffffff
ring-wrong-color=ffffff

line-color=00000000
line-clear-color=ffffffFF
line-caps-lock-color=ffffffFF
line-ver-color=ffffffFF
line-wrong-color=ffffffFF

text-color=ffffff
text-clear-color=ffffff
text-ver-color=ffffff
text-wrong-color=ffffff

bs-hl-color=ffffff
caps-lock-key-hl-color=ffffffFF
caps-lock-bs-hl-color=ffffffFF
text-caps-lock-color=ffffff


================================================
FILE: nixos/hosts/desktop/configuration-desktop.nix
================================================
{ lib, ... }:

let
  vars = import ../../variables.nix;
in

{
  imports =
    [
      ./hardware-configuration-desktop.nix
      ../../configs/global-configs/services.nix
      ../../configs/global-configs/programs.nix
      ../../configs/global-configs/bluetooth.nix
      ../../configs/global-configs/tlp.nix
      ../../nixos.nix
      ../../packages.nix
    ];

  # Networking
  networking = {
    hostName = vars.desktop;
    useDHCP = lib.mkDefault true;
    networkmanager.enable = true;
  };
  #networking.interfaces.enp1s0.useDHCP = true;
  #networking.interfaces.br0.useDHCP = false;
  #networking.bridges = {
  #  "br0" = {
  #    interfaces = [ "enp1s0" ];
  #  };
  #};
}


================================================
FILE: nixos/hosts/desktop/hardware-configuration-desktop.nix
================================================
# Do not modify this file!  It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations.  Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:

{
  imports =
    [ (modulesPath + "/installer/scan/not-detected.nix")
    ];

  boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "uas" "sd_mod" ];
  boot.initrd.kernelModules = [ ];
  boot.kernelModules = [ "kvm-intel" ];
  boot.extraModulePackages = [ ];

  fileSystems."/" =
    { device = "/dev/disk/by-uuid/2be747cf-511f-4204-b1ad-73719edac311";
      fsType = "ext4";
    };

  fileSystems."/boot" =
    { device = "/dev/disk/by-uuid/4376-E3AB";
      fsType = "vfat";
    };

  swapDevices =
    [ { device = "/dev/disk/by-uuid/2e974971-b9ed-460b-9e62-696b59bdfb37"; }
    ];

  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
  # (the default) this is the recommended approach. When using systemd-networkd it's
  # still possible to use this option, but it's recommended to use it in conjunction
  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
  networking.useDHCP = lib.mkDefault true;
  # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;

  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
  powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
  hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}


================================================
FILE: nixos/hosts/desktop/home-desktop.nix
================================================
{ pkgs, ... }:

let
  vars = import ../../variables.nix;
in

{
  imports = [
    ../../configs/home-configs/styling.nix
    ../../configs/home-configs/zsh.nix
    ./link-dotfiles-desktop.nix
    ./home-programs-desktop.nix
  ];

  home.username = vars.user1;
  home.homeDirectory = vars.homeDirectoryUser1;

  services.gpg-agent = {
    enable = true;
    defaultCacheTtl = 1800;
    enableSshSupport = true;
  };

  dconf.settings = {
    "org/virt-manager/virt-manager/connections" = {
      autoconnect = [ "qemu:///system" ];
      uris = [ "qemu:///system" ];
    };
  };

  xdg.desktopEntries."org.gnome.Settings" = {
    name = "Settings";
    comment = "Gnome Control Center";
    icon = "org.gnome.Settings";
    exec = "env XDG_CURRENT_DESKTOP=gnome ${pkgs.gnome.gnome-control-center}/bin/gnome-control-center";
    categories = [ "X-Preferences" ];
    terminal = false;
  };

  home.file = { };
  home.sessionVariables = { };

  home.sessionPath = [
    "$HOME/.local/bin"
  ];

  home.stateVersion = "23.11";
}


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/.eslintrc.yml
================================================
env:
  es2021: true
extends: eslint:recommended
overrides: []
parserOptions:
  ecmaVersion: latest
  sourceType: 'module'
rules:
  arrow-parens:
    - error
    - as-needed
  comma-dangle:
    - error
    - always-multiline
  comma-spacing:
    - error
    - before: false
      after: true
  comma-style:
    - error
    - last
  curly:
    - error
    - multi-or-nest
    - consistent
  dot-location:
    - error
    - property
  eol-last: error
  indent:
    - error
    - 4
    - SwitchCase: 1
  keyword-spacing:
    - error
    - before: true
  lines-between-class-members:
    - error
    - always
    - exceptAfterSingleLine: true
  padded-blocks:
    - error
    - never
    - allowSingleLineBlocks: false
  prefer-const: error
  quotes:
    - error
    - single
    - avoidEscape: true
  semi:
    - error
    - always
  nonblock-statement-body-position:
    - error
    - below
  no-trailing-spaces:
    - error
  array-bracket-spacing:
    - error
    - never
  key-spacing:
    - error
    - beforeColon: false
      afterColon: true
  object-curly-spacing: 
    - error
    - always
  no-useless-escape:
    - off
globals:
  pkg: readonly
  ags: readonly
  ARGV: readonly
  imports: readonly
  print: readonly
  console: readonly
  logError: readonly


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/.gitignore
================================================
node_modules
types
package-lock.json
weather_key
setup.sh


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/.stylelintrc.yml
================================================
extends: stylelint-config-standard-scss
ignoreFiles:
  - "**/*.js"
  - "**/*.ts"
rules:
  selector-type-no-unknown: null
  declaration-empty-line-before: null
  no-descending-specificity: null
  selector-pseudo-class-no-unknown: null
  color-function-notation: legacy
  alpha-value-notation: number
  scss/operator-no-unspaced: null
  scss/no-global-function-names: null
  scss/dollar-variable-empty-line-before: null


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/config.js
================================================
import { readFile } from 'resource:///com/github/Aylur/ags/utils.js';
import App from 'resource:///com/github/Aylur/ags/app.js';
const pkgjson = JSON.parse(readFile(App.configDir + '/package.json'));

const v = {
    ags: `v${pkg.version}`,
    expected: `v${pkgjson.version}`,
};

function mismatch() {
    print(`my config expects ${v.expected}, but your ags is ${v.ags}`);
    App.connect('config-parsed', app => app.Quit());
    return {};
}

export default v.ags === v.expected
    ? (await import('./js/main.js')).default
    : mismatch();


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/about/about.js
================================================
import App from 'resource:///com/github/Aylur/ags/app.js';
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import PopupWindow from '../misc/PopupWindow.js';
import icons from '../icons.js';

const pkg = JSON.parse(Utils.readFile(App.configDir + '/package.json'));
const show = JSON.parse(Utils.readFile(Utils.CACHE_DIR + '/show_about') || 'true');
const dontShow = () => Utils.writeFile('false', Utils.CACHE_DIR + '/show_about');
const avatar = App.configDir + '/assets/od_fsociety.png';

/**
 * @param {Object} o
 * @param {string} o.label
 * @param {string} o.link
 */
const LinkButton = ({ label, link }) => Widget.Button({
    on_clicked: () => Utils.execAsync(['xdg-open', link]),
    child: Widget.Box({
        children: [
            Widget.Label({ label, hexpand: true, xalign: 0 }),
            Widget.Icon(icons.ui.link),
        ],
    }),
});

export default () => PopupWindow({
    name: 'about',
    transition: 'slide_down',
    child: Widget.Box({
        vertical: true,
        class_name: 'window-content',
        children: [
            Widget.Box({
                class_name: 'avatar',
                hpack: 'center',
                css: `background-image: url('${avatar}');`,
            }),
            Widget.Box({
                vertical: true,
                class_name: 'labels vertical',
                children: [
                    Widget.Label({
                        class_name: 'title',
                        label: pkg.description,
                    }),
                    Widget.Label({
                        class_name: 'author',
                        label: pkg.author,
                    }),
                    Widget.Label({
                        class_name: 'version',
                        hpack: 'center',
                        label: pkg.version,
                    }),
                ],
            }),
            Widget.Box({
                class_name: 'buttons',
                vertical: true,
                vexpand: true,
                vpack: 'end',
                children: [
                    LinkButton({
                        label: 'Support me on Ko-fi',
                        link: pkg.kofi,
                    }),
                    LinkButton({
                        label: 'Report an Issue',
                        link: pkg.bugs.url,
                    }),
                ],
            }),
            Widget.Button({
                class_name: 'dont-show',
                on_clicked: () => {
                    dontShow();
                    App.toggleWindow('about');
                },
                child: Widget.Box({
                    children: [
                        Widget.Label("Don't show again"),
                        Widget.Box({ hexpand: true }),
                        Widget.Icon(icons.ui.close),
                    ],
                }),
            }),
        ],
    }),
});

export function showAbout(force = false) {
    if (show || force)
        App.toggleWindow('about');
}


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/applauncher/AppItem.js
================================================
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import App from 'resource:///com/github/Aylur/ags/app.js';
import options from '../options.js';
import { lookUpIcon } from 'resource:///com/github/Aylur/ags/utils.js';

/** @param {import('resource:///com/github/Aylur/ags/service/applications.js').Application} app */
export default app => {
    const title = Widget.Label({
        class_name: 'title',
        label: app.name,
        xalign: 0,
        vpack: 'center',
        truncate: 'end',
    });

    const description = Widget.Label({
        class_name: 'description',
        label: app.description || '',
        wrap: true,
        xalign: 0,
        justification: 'left',
        vpack: 'center',
    });

    const icon = Widget.Icon({
        icon: lookUpIcon(app.icon_name || '') ? app.icon_name || '' : '',
        binds: [['size', options.applauncher.icon_size]],
    });

    const textBox = Widget.Box({
        vertical: true,
        vpack: 'center',
        children: app.description ? [title, description] : [title],
    });

    return Widget.Button({
        class_name: 'app-item',
        setup: self => self.app = app,
        on_clicked: () => {
            App.closeWindow('applauncher');
            app.launch();
        },
        child: Widget.Box({
            children: [icon, textBox],
        }),
    });
};


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/applauncher/Applauncher.js
================================================
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import App from 'resource:///com/github/Aylur/ags/app.js';
import Applications from 'resource:///com/github/Aylur/ags/service/applications.js';
import PopupWindow from '../misc/PopupWindow.js';
import AppItem from './AppItem.js';
import icons from '../icons.js';
import { launchApp } from '../utils.js';

const WINDOW_NAME = 'applauncher';

const Applauncher = () => {
    const children = () => [
        ...Applications.query('').flatMap(app => {
            const item = AppItem(app);
            return [
                Widget.Separator({
                    hexpand: true,
                    binds: [['visible', item, 'visible']],
                }),
                item,
            ];
        }),
        Widget.Separator({ hexpand: true }),
    ];

    const list = Widget.Box({
        vertical: true,
        children: children(),
    });

    const entry = Widget.Entry({
        hexpand: true,
        primary_icon_name: icons.apps.search,

        // set some text so on-change works the first time
        text: '-',
        on_accept: ({ text }) => {
            const list = Applications.query(text || '');
            if (list[0]) {
                App.toggleWindow(WINDOW_NAME);
                launchApp(list[0]);
            }
        },
        on_change: ({ text }) => list.children.map(item => {
            if (item.app)
                item.visible = item.app.match(text);
        }),
    });

    return Widget.Box({
        vertical: true,
        children: [
            entry,
            Widget.Scrollable({
                hscroll: 'never',
                child: list,
            }),
        ],
        connections: [[App, (_, name, visible) => {
            if (name !== WINDOW_NAME)
                return;

            entry.text = '';
            if (visible)
                entry.grab_focus();
            else
                list.children = children();
        }]],
    });
};

export default () => PopupWindow({
    name: WINDOW_NAME,
    transition: 'slide_down',
    child: Applauncher(),
});


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/PanelButton.js
================================================
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import App from 'resource:///com/github/Aylur/ags/app.js';

/**
 * @typedef {Object} PanelButtonProps
 * @property {any} content
 * @property {string=} window
 */

/**
 * @param {import('types/widgets/button').ButtonProps & PanelButtonProps} o
 */
export default ({
    class_name,
    content,
    window = '',
    connections = [],
    ...rest
}) => {
    let open = false;

    const connection = [App, (self, win, visible) => {
        if (win !== window)
            return;

        if (open && !visible) {
            open = false;
            self.toggleClassName('active', false);
        }

        if (visible) {
            open = true;
            self.toggleClassName('active');
        }
    }];

    return Widget.Button({
        class_name: `panel-button ${class_name}`,
        child: Widget.Box({ children: [content] }),
        connections: connections.concat([connection]),
        ...rest,
    });
};


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/TopBar.js
================================================
import SystemTray from 'resource:///com/github/Aylur/ags/service/systemtray.js';
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import Variable from 'resource:///com/github/Aylur/ags/variable.js';
import Battery from 'resource:///com/github/Aylur/ags/service/battery.js';
import OverviewButton from './buttons/OverviewButton.js';
import Workspaces from './buttons/Workspaces.js';
import DateButton from './buttons/DateButton.js';
import SysTray from './buttons/SysTray.js';
import ColorPicker from './buttons/ColorPicker.js';
import SystemIndicators from './buttons/SystemIndicators.js';
import PowerMenu from './buttons/PowerMenu.js';
import ScreenRecord from './buttons/ScreenRecord.js';
import BatteryBar from './buttons/BatteryBar.js';
import SubMenu from './buttons/SubMenu.js';
import Recorder from '../services/screenrecord.js';
import options from '../options.js';
import * as vars from '../variables.js';

const submenuItems = Variable(1);
SystemTray.connect('changed', () => {
    submenuItems.setValue(SystemTray.items.length + 1);
});

/**
 * @template T
 * @param {T=} service
 * @param {(self: T) => boolean=} condition
 */
const SeparatorDot = (service, condition) => {
    const visibility = self => {
        if (!options.bar.separators.value)
            return self.visible = false;

        self.visible = condition && service
            ? condition(service)
            : options.bar.separators.value;
    };

    const conn = service ? [[service, visibility]] : [];
    return Widget.Separator({
        connections: [['draw', visibility], ...conn],
        binds: [['visible', options.bar.separators]],
        vpack: 'center',
    });
};

const Start = () => Widget.Box({
    class_name: 'start',
    children: [
        OverviewButton(),
        SeparatorDot(),
        Workspaces(),
        Widget.Box({ hexpand: true }),
    ],
});

const Center = () => Widget.Box({
    class_name: 'center',
    children: [
        DateButton(),
    ],
});

const SysProgress = (type, title, unit) => Widget.Box({
    class_name: `circular-progress-box ${type}`,
    hexpand: false,
    binds: [['tooltipText', vars[type], 'value', v =>
        `${title}: ${Math.floor(v * 100)}${unit}`]],
    child: Widget.CircularProgress({
        hexpand: true,
        inverted: false,
        class_name: `circular-progress ${type}`,
        binds: [['value', vars[type]]],
        start_at: 0.75,
    }),
});

const End = () => Widget.Box({
    class_name: 'end',
    children: [
        Widget.Box({ hexpand: true }),

        SubMenu({
            items: submenuItems,
            children: [
                SysTray(),
                ColorPicker(),
            ],
        }),

        Widget.Box({
            class_name: 'system-info horizontal',
            children: [
                SysProgress('cpu', 'Cpu', '%'),
                SysProgress('ram', 'Ram', '%'),
                SysProgress('temp', 'Temperature', '°'),
            ],
        }),

        SeparatorDot(),
        ScreenRecord(),
        SeparatorDot(Recorder, r => r.recording),
        BatteryBar(Battery, b => b.available),
        SeparatorDot(Battery, b => b.available),
        SystemIndicators(),
        SeparatorDot(),
        PowerMenu(),
    ],
});

/** @param {number} monitor */
export default monitor => Widget.Window({
    name: `bar${monitor}`,
    class_name: 'transparent',
    exclusivity: 'exclusive',
    monitor,
    binds: [['anchor', options.bar.position, 'value', pos => ([
        pos, 'left', 'right',
    ])]],
    child: Widget.CenterBox({
        class_name: 'panel',
        start_widget: Start(),
        center_widget: Center(),
        end_widget: End(),
    }),
});


================================================
FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/BatteryBar.js
================================================
import Widget from 'resource:///com/github/Aylur/ags/widget.js';
import Battery from 'resource:///com/github/Aylur/ags/service/battery.js';
import icons from '../../icons.js';
import F
Download .txt
gitextract_u_p066sk/

├── .gitignore
├── README.md
├── backgrounds/
│   └── last/
│       └── .comments/
│           └── image_blurred.png.xml
├── cfg/
│   ├── anyrun/
│   │   ├── adwaita-dark/
│   │   │   ├── config.ron
│   │   │   ├── launch.sh
│   │   │   └── style-adwaita.scss
│   │   └── catppuccin-mocha/
│   │       ├── config.ron
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   ├── hypr/
│   │   ├── adwaita-dark/
│   │   │   └── Decoration.conf
│   │   └── catppuccin-mocha/
│   │       └── Decoration.conf
│   ├── swaync/
│   │   ├── adwaita-dark/
│   │   │   ├── config.json
│   │   │   ├── configSchema.json
│   │   │   ├── launch.sh
│   │   │   └── style-adwaita.scss
│   │   └── catppuccin-mocha/
│   │       ├── config.json
│   │       ├── configSchema.json
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   ├── themes/
│   │   ├── adwaita.scss
│   │   └── catppuccin-mocha.scss
│   ├── themeswitcher/
│   │   ├── config.jsonc
│   │   └── styles.css
│   ├── walker/
│   │   └── catppuccin-mocha/
│   │       ├── config.json
│   │       ├── launch.sh
│   │       └── style-catppuccin-mocha.scss
│   └── waybar/
│       ├── adwaita-dark/
│       │   ├── adwaita-colored-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-adwaita.scss
│       ├── catppuccin-mocha-docked/
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       ├── catppuccin-mocha-docked-color-buttons/
│       │   ├── catppuccin-mocha-colored-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       ├── catppuccin-mocha-docked-flat-buttons/
│       │   ├── catppuccin-mocha-flat-buttons.scss
│       │   ├── config.jsonc
│       │   ├── launch.sh
│       │   └── style-catppuccin-mocha.scss
│       └── scripts/
│           └── get_weather.sh
├── installers/
│   ├── install
│   ├── thinkfan
│   └── zsh
├── nixos/
│   ├── configs/
│   │   ├── home-configs/
│   │   │   ├── kitty.nix
│   │   │   ├── styling.nix
│   │   │   ├── waybar.nix
│   │   │   └── zsh.nix
│   │   └── nixos-configs/
│   │       ├── bluetooth.nix
│   │       ├── nixvim/
│   │       │   ├── autopairs.nix
│   │       │   ├── bufferline.nix
│   │       │   ├── conform.nix
│   │       │   ├── dashboard.nix
│   │       │   ├── efmls.nix
│   │       │   ├── keymaps.nix
│   │       │   ├── lsp-format.nix
│   │       │   ├── lsp-servers.nix
│   │       │   ├── lsp.nix
│   │       │   ├── neo-tree.nix
│   │       │   ├── nvim-cmp.nix
│   │       │   ├── nvim.nix
│   │       │   ├── prettier.nix
│   │       │   ├── telescope.nix
│   │       │   ├── treesitter.nix
│   │       │   └── whichkey.nix
│   │       ├── programs.nix
│   │       ├── services.nix
│   │       └── tlp.nix
│   ├── flake.nix
│   ├── global-dotfiles/
│   │   ├── gtklock/
│   │   │   ├── config.ini
│   │   │   └── style.css
│   │   └── swaylock/
│   │       └── config
│   ├── hosts/
│   │   ├── desktop/
│   │   │   ├── configuration-desktop.nix
│   │   │   ├── hardware-configuration-desktop.nix
│   │   │   ├── home-desktop.nix
│   │   │   ├── home-dotfiles-desktop/
│   │   │   │   ├── ags/
│   │   │   │   │   ├── .eslintrc.yml
│   │   │   │   │   ├── .gitignore
│   │   │   │   │   ├── .stylelintrc.yml
│   │   │   │   │   ├── config.js
│   │   │   │   │   ├── js/
│   │   │   │   │   │   ├── about/
│   │   │   │   │   │   │   └── about.js
│   │   │   │   │   │   ├── applauncher/
│   │   │   │   │   │   │   ├── AppItem.js
│   │   │   │   │   │   │   └── Applauncher.js
│   │   │   │   │   │   ├── bar/
│   │   │   │   │   │   │   ├── PanelButton.js
│   │   │   │   │   │   │   ├── TopBar.js
│   │   │   │   │   │   │   └── buttons/
│   │   │   │   │   │   │       ├── BatteryBar.js
│   │   │   │   │   │   │       ├── ColorPicker.js
│   │   │   │   │   │   │       ├── DateButton.js
│   │   │   │   │   │   │       ├── FocusedClient.js
│   │   │   │   │   │   │       ├── MediaIndicator.js
│   │   │   │   │   │   │       ├── NotificationIndicator.js
│   │   │   │   │   │   │       ├── OverviewButton.js
│   │   │   │   │   │   │       ├── PowerMenu.js
│   │   │   │   │   │   │       ├── ScreenRecord.js
│   │   │   │   │   │   │       ├── SubMenu.js
│   │   │   │   │   │   │       ├── SysTray.js
│   │   │   │   │   │   │       ├── System.js
│   │   │   │   │   │   │       ├── SystemIndicators.js
│   │   │   │   │   │   │       ├── Taskbar.js
│   │   │   │   │   │   │       └── Workspaces.js
│   │   │   │   │   │   ├── dashboard/
│   │   │   │   │   │   │   ├── Dashboard.js
│   │   │   │   │   │   │   ├── DateColumn.js
│   │   │   │   │   │   │   └── NotificationColumn.js
│   │   │   │   │   │   ├── desktop/
│   │   │   │   │   │   │   ├── Desktop.js
│   │   │   │   │   │   │   └── DesktopMenu.js
│   │   │   │   │   │   ├── dock/
│   │   │   │   │   │   │   ├── Dock.js
│   │   │   │   │   │   │   └── FloatingDock.js
│   │   │   │   │   │   ├── icons.js
│   │   │   │   │   │   ├── lockscreen/
│   │   │   │   │   │   │   ├── Lockscreen.js
│   │   │   │   │   │   │   └── auth.py
│   │   │   │   │   │   ├── main.js
│   │   │   │   │   │   ├── misc/
│   │   │   │   │   │   │   ├── Avatar.js
│   │   │   │   │   │   │   ├── BatteryIcon.js
│   │   │   │   │   │   │   ├── Clock.js
│   │   │   │   │   │   │   ├── FontIcon.js
│   │   │   │   │   │   │   ├── HoverRevealer.js
│   │   │   │   │   │   │   ├── IconBrowser.js
│   │   │   │   │   │   │   ├── Notification.js
│   │   │   │   │   │   │   ├── PopupWindow.js
│   │   │   │   │   │   │   ├── Progress.js
│   │   │   │   │   │   │   ├── RegularWindow.js
│   │   │   │   │   │   │   └── mpris.js
│   │   │   │   │   │   ├── notifications/
│   │   │   │   │   │   │   └── Notifications.js
│   │   │   │   │   │   ├── options.js
│   │   │   │   │   │   ├── osd/
│   │   │   │   │   │   │   └── OSD.js
│   │   │   │   │   │   ├── overview/
│   │   │   │   │   │   │   ├── Client.js
│   │   │   │   │   │   │   ├── Overview.js
│   │   │   │   │   │   │   └── Workspace.js
│   │   │   │   │   │   ├── powermenu/
│   │   │   │   │   │   │   ├── PowerMenu.js
│   │   │   │   │   │   │   ├── ShadedPopup.js
│   │   │   │   │   │   │   └── Verification.js
│   │   │   │   │   │   ├── quicksettings/
│   │   │   │   │   │   │   ├── QuickSettings.js
│   │   │   │   │   │   │   ├── ToggleButton.js
│   │   │   │   │   │   │   └── widgets/
│   │   │   │   │   │   │       ├── AsusProfile.js
│   │   │   │   │   │   │       ├── Bluetooth.js
│   │   │   │   │   │   │       ├── Brightness.js
│   │   │   │   │   │   │       ├── DND.js
│   │   │   │   │   │   │       ├── Header.js
│   │   │   │   │   │   │       ├── Media.js
│   │   │   │   │   │   │       ├── MicMute.js
│   │   │   │   │   │   │       ├── Network.js
│   │   │   │   │   │   │       ├── Theme.js
│   │   │   │   │   │   │       └── Volume.js
│   │   │   │   │   │   ├── screencorner/
│   │   │   │   │   │   │   └── ScreenCorners.js
│   │   │   │   │   │   ├── services/
│   │   │   │   │   │   │   ├── asusctl.js
│   │   │   │   │   │   │   ├── brightness.js
│   │   │   │   │   │   │   ├── colorpicker.js
│   │   │   │   │   │   │   ├── lockscreen.js
│   │   │   │   │   │   │   ├── onScreenIndicator.js
│   │   │   │   │   │   │   ├── powermenu.js
│   │   │   │   │   │   │   └── screenrecord.js
│   │   │   │   │   │   ├── settings/
│   │   │   │   │   │   │   ├── SettingsDialog.js
│   │   │   │   │   │   │   ├── globals.js
│   │   │   │   │   │   │   ├── hyprland.js
│   │   │   │   │   │   │   ├── option.js
│   │   │   │   │   │   │   ├── scss.js
│   │   │   │   │   │   │   ├── setup.js
│   │   │   │   │   │   │   ├── theme.js
│   │   │   │   │   │   │   └── wallpaper.js
│   │   │   │   │   │   ├── themes.js
│   │   │   │   │   │   ├── utils.js
│   │   │   │   │   │   └── variables.js
│   │   │   │   │   ├── package.json
│   │   │   │   │   ├── prepare_background.sh
│   │   │   │   │   ├── scss/
│   │   │   │   │   │   ├── common/
│   │   │   │   │   │   │   ├── a11y-button.scss
│   │   │   │   │   │   │   ├── button-workspaces.scss
│   │   │   │   │   │   │   ├── button.scss
│   │   │   │   │   │   │   ├── floating-widget.scss
│   │   │   │   │   │   │   ├── hidden.scss
│   │   │   │   │   │   │   ├── menu.scss
│   │   │   │   │   │   │   ├── scrollable.scss
│   │   │   │   │   │   │   ├── slider.scss
│   │   │   │   │   │   │   ├── spacing.scss
│   │   │   │   │   │   │   ├── switch.scss
│   │   │   │   │   │   │   ├── text-border.scss
│   │   │   │   │   │   │   ├── tooltip.scss
│   │   │   │   │   │   │   ├── unset.scss
│   │   │   │   │   │   │   └── widget.scss
│   │   │   │   │   │   ├── main.scss
│   │   │   │   │   │   ├── variables.scss
│   │   │   │   │   │   └── widgets/
│   │   │   │   │   │       ├── about.scss
│   │   │   │   │   │       ├── applauncher.scss
│   │   │   │   │   │       ├── bar.scss
│   │   │   │   │   │       ├── dashboard.scss
│   │   │   │   │   │       ├── desktop.scss
│   │   │   │   │   │       ├── dock.scss
│   │   │   │   │   │       ├── lockscreen.scss
│   │   │   │   │   │       ├── media.scss
│   │   │   │   │   │       ├── notifications.scss
│   │   │   │   │   │       ├── osd.scss
│   │   │   │   │   │       ├── overview.scss
│   │   │   │   │   │       ├── powermenu.scss
│   │   │   │   │   │       ├── quicksettings.scss
│   │   │   │   │   │       └── settings.scss
│   │   │   │   │   └── tsconfig.json
│   │   │   │   ├── hypr/
│   │   │   │   │   ├── Autostart.conf
│   │   │   │   │   ├── Decoration.conf
│   │   │   │   │   ├── KeyBinds.conf
│   │   │   │   │   ├── Misc.conf
│   │   │   │   │   ├── WindowRules.conf
│   │   │   │   │   ├── hyprland.conf
│   │   │   │   │   ├── monitors.conf
│   │   │   │   │   ├── presets/
│   │   │   │   │   │   ├── monitors.exampleconf
│   │   │   │   │   │   ├── monitors_external.conf
│   │   │   │   │   │   └── monitors_internal.conf
│   │   │   │   │   └── scripts/
│   │   │   │   │       ├── brightness
│   │   │   │   │       ├── launch_ags.sh
│   │   │   │   │       ├── monitor_attached.sh
│   │   │   │   │       └── monitor_dettached.sh
│   │   │   │   ├── kitty/
│   │   │   │   │   └── kitty.conf
│   │   │   │   └── neofetch/
│   │   │   │       ├── ascii.txt
│   │   │   │       └── config.conf
│   │   │   ├── home-programs-desktop.nix
│   │   │   └── link-dotfiles-desktop.nix
│   │   └── laptop/
│   │       ├── configs-laptop/
│   │       │   └── thinkfan.nix
│   │       ├── configuration-laptop.nix
│   │       ├── hardware-configuration-laptop.nix
│   │       ├── home-dotfiles-laptop/
│   │       │   ├── ags/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── config.js
│   │       │   │   ├── default.nix
│   │       │   │   ├── greeter/
│   │       │   │   │   ├── auth.ts
│   │       │   │   │   ├── greeter.scss
│   │       │   │   │   ├── greeter.ts
│   │       │   │   │   ├── session.ts
│   │       │   │   │   └── statusbar.ts
│   │       │   │   ├── greeter.js
│   │       │   │   ├── lib/
│   │       │   │   │   ├── battery.ts
│   │       │   │   │   ├── experiments.ts
│   │       │   │   │   ├── gtk.ts
│   │       │   │   │   ├── hyprland.ts
│   │       │   │   │   ├── icons.ts
│   │       │   │   │   ├── init.ts
│   │       │   │   │   ├── matugen.ts
│   │       │   │   │   ├── notifications.ts
│   │       │   │   │   ├── option.ts
│   │       │   │   │   ├── session.ts
│   │       │   │   │   ├── swww.ts
│   │       │   │   │   ├── tmux.ts
│   │       │   │   │   ├── utils.ts
│   │       │   │   │   └── variables.ts
│   │       │   │   ├── main.ts
│   │       │   │   ├── options.ts
│   │       │   │   ├── package.json
│   │       │   │   ├── service/
│   │       │   │   │   ├── asusctl.ts
│   │       │   │   │   ├── brightness.ts
│   │       │   │   │   ├── colorpicker.ts
│   │       │   │   │   ├── powermenu.ts
│   │       │   │   │   └── screenrecord.ts
│   │       │   │   ├── style/
│   │       │   │   │   ├── extra.scss
│   │       │   │   │   ├── mixins/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── media.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   └── style.ts
│   │       │   │   ├── tsconfig.json
│   │       │   │   └── widget/
│   │       │   │       ├── PopupWindow.ts
│   │       │   │       ├── RegularWindow.ts
│   │       │   │       ├── applauncher/
│   │       │   │       │   ├── AppItem.ts
│   │       │   │       │   ├── Applauncher.ts
│   │       │   │       │   └── applauncher.scss
│   │       │   │       ├── bar/
│   │       │   │       │   ├── Bar.ts
│   │       │   │       │   ├── PanelButton.ts
│   │       │   │       │   ├── ScreenCorners.ts
│   │       │   │       │   ├── bar.scss
│   │       │   │       │   ├── buttons/
│   │       │   │       │   │   ├── BatteryBar.ts
│   │       │   │       │   │   ├── ColorPicker.ts
│   │       │   │       │   │   ├── Date.ts
│   │       │   │       │   │   ├── Launcher.ts
│   │       │   │       │   │   ├── Media.ts
│   │       │   │       │   │   ├── Messages.ts
│   │       │   │       │   │   ├── PowerMenu.ts
│   │       │   │       │   │   ├── ScreenRecord.ts
│   │       │   │       │   │   ├── SysTray.ts
│   │       │   │       │   │   ├── SystemIndicators.ts
│   │       │   │       │   │   ├── Taskbar.ts
│   │       │   │       │   │   └── Workspaces.ts
│   │       │   │       │   └── screencorner.scss
│   │       │   │       ├── datemenu/
│   │       │   │       │   ├── DateColumn.ts
│   │       │   │       │   ├── DateMenu.ts
│   │       │   │       │   ├── NotificationColumn.ts
│   │       │   │       │   └── datemenu.scss
│   │       │   │       ├── desktop/
│   │       │   │       │   └── Desktop.ts
│   │       │   │       ├── notifications/
│   │       │   │       │   ├── Notification.ts
│   │       │   │       │   ├── NotificationPopups.ts
│   │       │   │       │   └── notifications.scss
│   │       │   │       ├── osd/
│   │       │   │       │   ├── OSD.ts
│   │       │   │       │   ├── Progress.ts
│   │       │   │       │   └── osd.scss
│   │       │   │       ├── overview/
│   │       │   │       │   ├── Overview.ts
│   │       │   │       │   ├── Window.ts
│   │       │   │       │   ├── Workspace.ts
│   │       │   │       │   └── overview.scss
│   │       │   │       ├── powermenu/
│   │       │   │       │   ├── PowerMenu.ts
│   │       │   │       │   ├── Verification.ts
│   │       │   │       │   └── powermenu.scss
│   │       │   │       ├── quicksettings/
│   │       │   │       │   ├── QuickSettings.ts
│   │       │   │       │   ├── ToggleButton.ts
│   │       │   │       │   ├── quicksettings.scss
│   │       │   │       │   └── widgets/
│   │       │   │       │       ├── AsusProfile.ts
│   │       │   │       │       ├── Bluetooth.ts
│   │       │   │       │       ├── Brightness.ts
│   │       │   │       │       ├── DND.ts
│   │       │   │       │       ├── DarkMode.ts
│   │       │   │       │       ├── Header.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── MicMute.ts
│   │       │   │       │       ├── Network.ts
│   │       │   │       │       └── Volume.ts
│   │       │   │       └── settings/
│   │       │   │           ├── Group.ts
│   │       │   │           ├── Page.ts
│   │       │   │           ├── Row.ts
│   │       │   │           ├── Setter.ts
│   │       │   │           ├── SettingsDialog.ts
│   │       │   │           ├── layout.ts
│   │       │   │           └── settingsdialog.scss
│   │       │   ├── ags_js/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── .stylelintrc.yml
│   │       │   │   ├── config.js
│   │       │   │   ├── js/
│   │       │   │   │   ├── about/
│   │       │   │   │   │   └── about.js
│   │       │   │   │   ├── applauncher/
│   │       │   │   │   │   ├── AppItem.js
│   │       │   │   │   │   └── Applauncher.js
│   │       │   │   │   ├── bar/
│   │       │   │   │   │   ├── PanelButton.js
│   │       │   │   │   │   ├── TopBar.js
│   │       │   │   │   │   └── buttons/
│   │       │   │   │   │       ├── BatteryBar.js
│   │       │   │   │   │       ├── ColorPicker.js
│   │       │   │   │   │       ├── DateButton.js
│   │       │   │   │   │       ├── FocusedClient.js
│   │       │   │   │   │       ├── MediaIndicator.js
│   │       │   │   │   │       ├── NotificationIndicator.js
│   │       │   │   │   │       ├── OverviewButton.js
│   │       │   │   │   │       ├── PowerMenu.js
│   │       │   │   │   │       ├── ScreenRecord.js
│   │       │   │   │   │       ├── SubMenu.js
│   │       │   │   │   │       ├── SysTray.js
│   │       │   │   │   │       ├── System.js
│   │       │   │   │   │       ├── SystemIndicators.js
│   │       │   │   │   │       ├── Taskbar.js
│   │       │   │   │   │       └── Workspaces.js
│   │       │   │   │   ├── dashboard/
│   │       │   │   │   │   ├── Dashboard.js
│   │       │   │   │   │   ├── DateColumn.js
│   │       │   │   │   │   └── NotificationColumn.js
│   │       │   │   │   ├── desktop/
│   │       │   │   │   │   ├── Desktop.js
│   │       │   │   │   │   └── DesktopMenu.js
│   │       │   │   │   ├── dock/
│   │       │   │   │   │   ├── Dock.js
│   │       │   │   │   │   └── FloatingDock.js
│   │       │   │   │   ├── icons.js
│   │       │   │   │   ├── lockscreen/
│   │       │   │   │   │   ├── Lockscreen.js
│   │       │   │   │   │   └── auth.py
│   │       │   │   │   ├── main.js
│   │       │   │   │   ├── misc/
│   │       │   │   │   │   ├── Avatar.js
│   │       │   │   │   │   ├── BatteryIcon.js
│   │       │   │   │   │   ├── Clock.js
│   │       │   │   │   │   ├── FontIcon.js
│   │       │   │   │   │   ├── HoverRevealer.js
│   │       │   │   │   │   ├── IconBrowser.js
│   │       │   │   │   │   ├── Notification.js
│   │       │   │   │   │   ├── PopupWindow.js
│   │       │   │   │   │   ├── Progress.js
│   │       │   │   │   │   ├── RegularWindow.js
│   │       │   │   │   │   └── mpris.js
│   │       │   │   │   ├── notifications/
│   │       │   │   │   │   └── Notifications.js
│   │       │   │   │   ├── options.js
│   │       │   │   │   ├── osd/
│   │       │   │   │   │   └── OSD.js
│   │       │   │   │   ├── overview/
│   │       │   │   │   │   ├── Client.js
│   │       │   │   │   │   ├── Overview.js
│   │       │   │   │   │   └── Workspace.js
│   │       │   │   │   ├── powermenu/
│   │       │   │   │   │   ├── PowerMenu.js
│   │       │   │   │   │   ├── ShadedPopup.js
│   │       │   │   │   │   └── Verification.js
│   │       │   │   │   ├── quicksettings/
│   │       │   │   │   │   ├── QuickSettings.js
│   │       │   │   │   │   ├── ToggleButton.js
│   │       │   │   │   │   └── widgets/
│   │       │   │   │   │       ├── AsusProfile.js
│   │       │   │   │   │       ├── Bluetooth.js
│   │       │   │   │   │       ├── Brightness.js
│   │       │   │   │   │       ├── DND.js
│   │       │   │   │   │       ├── Header.js
│   │       │   │   │   │       ├── Media.js
│   │       │   │   │   │       ├── MicMute.js
│   │       │   │   │   │       ├── Network.js
│   │       │   │   │   │       ├── Theme.js
│   │       │   │   │   │       └── Volume.js
│   │       │   │   │   ├── screencorner/
│   │       │   │   │   │   └── ScreenCorners.js
│   │       │   │   │   ├── services/
│   │       │   │   │   │   ├── asusctl.js
│   │       │   │   │   │   ├── brightness.js
│   │       │   │   │   │   ├── colorpicker.js
│   │       │   │   │   │   ├── lockscreen.js
│   │       │   │   │   │   ├── onScreenIndicator.js
│   │       │   │   │   │   ├── powermenu.js
│   │       │   │   │   │   └── screenrecord.js
│   │       │   │   │   ├── settings/
│   │       │   │   │   │   ├── SettingsDialog.js
│   │       │   │   │   │   ├── globals.js
│   │       │   │   │   │   ├── hyprland.js
│   │       │   │   │   │   ├── option.js
│   │       │   │   │   │   ├── scss.js
│   │       │   │   │   │   ├── setup.js
│   │       │   │   │   │   ├── theme.js
│   │       │   │   │   │   └── wallpaper.js
│   │       │   │   │   ├── themes.js
│   │       │   │   │   ├── utils.js
│   │       │   │   │   └── variables.js
│   │       │   │   ├── package.json
│   │       │   │   ├── prepare_background.sh
│   │       │   │   ├── scss/
│   │       │   │   │   ├── common/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button-workspaces.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── menu.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── text-border.scss
│   │       │   │   │   │   ├── tooltip.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   ├── main.scss
│   │       │   │   │   ├── variables.scss
│   │       │   │   │   └── widgets/
│   │       │   │   │       ├── about.scss
│   │       │   │   │       ├── applauncher.scss
│   │       │   │   │       ├── bar.scss
│   │       │   │   │       ├── dashboard.scss
│   │       │   │   │       ├── desktop.scss
│   │       │   │   │       ├── dock.scss
│   │       │   │   │       ├── lockscreen.scss
│   │       │   │   │       ├── media.scss
│   │       │   │   │       ├── notifications.scss
│   │       │   │   │       ├── osd.scss
│   │       │   │   │       ├── overview.scss
│   │       │   │   │       ├── powermenu.scss
│   │       │   │   │       ├── quicksettings.scss
│   │       │   │   │       └── settings.scss
│   │       │   │   └── tsconfig.json
│   │       │   ├── ags_ts_old/
│   │       │   │   ├── .eslintrc.yml
│   │       │   │   ├── .gitignore
│   │       │   │   ├── config.js
│   │       │   │   ├── default.nix
│   │       │   │   ├── lib/
│   │       │   │   │   ├── battery.ts
│   │       │   │   │   ├── experiments.ts
│   │       │   │   │   ├── gtk.ts
│   │       │   │   │   ├── hyprland.ts
│   │       │   │   │   ├── icons.ts
│   │       │   │   │   ├── init.ts
│   │       │   │   │   ├── matugen.ts
│   │       │   │   │   ├── option.ts
│   │       │   │   │   ├── swww.ts
│   │       │   │   │   ├── tmux.ts
│   │       │   │   │   ├── utils.ts
│   │       │   │   │   └── variables.ts
│   │       │   │   ├── main.ts
│   │       │   │   ├── options.ts
│   │       │   │   ├── package.json
│   │       │   │   ├── service/
│   │       │   │   │   ├── asusctl.ts
│   │       │   │   │   ├── brightness.ts
│   │       │   │   │   ├── colorpicker.ts
│   │       │   │   │   ├── powermenu.ts
│   │       │   │   │   └── screenrecord.ts
│   │       │   │   ├── style/
│   │       │   │   │   ├── mixins/
│   │       │   │   │   │   ├── a11y-button.scss
│   │       │   │   │   │   ├── button.scss
│   │       │   │   │   │   ├── floating-widget.scss
│   │       │   │   │   │   ├── hidden.scss
│   │       │   │   │   │   ├── media.scss
│   │       │   │   │   │   ├── scrollable.scss
│   │       │   │   │   │   ├── slider.scss
│   │       │   │   │   │   ├── spacing.scss
│   │       │   │   │   │   ├── switch.scss
│   │       │   │   │   │   ├── unset.scss
│   │       │   │   │   │   └── widget.scss
│   │       │   │   │   ├── style.ts
│   │       │   │   │   └── widget/
│   │       │   │   │       ├── applauncher.scss
│   │       │   │   │       ├── bar.scss
│   │       │   │   │       ├── datemenu.scss
│   │       │   │   │       ├── extra.scss
│   │       │   │   │       ├── notifications.scss
│   │       │   │   │       ├── osd.scss
│   │       │   │   │       ├── overview.scss
│   │       │   │   │       ├── powermenu.scss
│   │       │   │   │       ├── quicksettings.scss
│   │       │   │   │       ├── screencorner.scss
│   │       │   │   │       └── settingsdialog.scss
│   │       │   │   ├── tsconfig.json
│   │       │   │   └── widget/
│   │       │   │       ├── PopupWindow.ts
│   │       │   │       ├── applauncher/
│   │       │   │       │   ├── AppItem.ts
│   │       │   │       │   └── Applauncher.ts
│   │       │   │       ├── bar/
│   │       │   │       │   ├── Bar.ts
│   │       │   │       │   ├── PanelButton.ts
│   │       │   │       │   ├── ScreenCorners.ts
│   │       │   │       │   └── buttons/
│   │       │   │       │       ├── BatteryBar.ts
│   │       │   │       │       ├── ColorPicker.ts
│   │       │   │       │       ├── Date.ts
│   │       │   │       │       ├── Launcher.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── Messages.ts
│   │       │   │       │       ├── PowerMenu.ts
│   │       │   │       │       ├── ScreenRecord.ts
│   │       │   │       │       ├── SysTray.ts
│   │       │   │       │       ├── SystemIndicators.ts
│   │       │   │       │       ├── Taskbar.ts
│   │       │   │       │       └── Workspaces.ts
│   │       │   │       ├── datemenu/
│   │       │   │       │   ├── DateColumn.ts
│   │       │   │       │   ├── DateMenu.ts
│   │       │   │       │   └── NotificationColumn.ts
│   │       │   │       ├── desktop/
│   │       │   │       │   └── Desktop.ts
│   │       │   │       ├── notifications/
│   │       │   │       │   ├── Notification.ts
│   │       │   │       │   └── NotificationPopups.ts
│   │       │   │       ├── osd/
│   │       │   │       │   ├── OSD.ts
│   │       │   │       │   └── Progress.ts
│   │       │   │       ├── overview/
│   │       │   │       │   ├── Overview.ts
│   │       │   │       │   ├── Window.ts
│   │       │   │       │   └── Workspace.ts
│   │       │   │       ├── powermenu/
│   │       │   │       │   ├── PowerMenu.ts
│   │       │   │       │   └── Verification.ts
│   │       │   │       ├── quicksettings/
│   │       │   │       │   ├── QuickSettings.ts
│   │       │   │       │   ├── ToggleButton.ts
│   │       │   │       │   └── widgets/
│   │       │   │       │       ├── AsusProfile.ts
│   │       │   │       │       ├── Bluetooth.ts
│   │       │   │       │       ├── Brightness.ts
│   │       │   │       │       ├── DND.ts
│   │       │   │       │       ├── DarkMode.ts
│   │       │   │       │       ├── Header.ts
│   │       │   │       │       ├── Media.ts
│   │       │   │       │       ├── MicMute.ts
│   │       │   │       │       ├── Network.ts
│   │       │   │       │       └── Volume.ts
│   │       │   │       └── settings/
│   │       │   │           ├── Group.ts
│   │       │   │           ├── Page.ts
│   │       │   │           ├── Row.ts
│   │       │   │           ├── SettingsDialog.ts
│   │       │   │           └── layout.ts
│   │       │   ├── anyrun/
│   │       │   │   └── stylesheet.css
│   │       │   ├── hypr/
│   │       │   │   ├── Autostart.conf
│   │       │   │   ├── KeyBinds.conf
│   │       │   │   ├── Misc.conf
│   │       │   │   ├── WindowRules.conf
│   │       │   │   ├── hypridle.conf
│   │       │   │   ├── hyprland.conf
│   │       │   │   ├── hyprlock.conf
│   │       │   │   ├── monitors.conf
│   │       │   │   ├── presets/
│   │       │   │   │   ├── monitors.exampleconf
│   │       │   │   │   ├── monitors_external.conf
│   │       │   │   │   └── monitors_internal.conf
│   │       │   │   └── scripts/
│   │       │   │       ├── brightness
│   │       │   │       ├── launch_ags.sh
│   │       │   │       ├── logoutlaunch.sh
│   │       │   │       ├── monitor_attached.sh
│   │       │   │       ├── monitor_dettached.sh
│   │       │   │       └── w2m.sh
│   │       │   ├── neofetch/
│   │       │   │   ├── ascii.txt
│   │       │   │   └── config.conf
│   │       │   ├── screenlock/
│   │       │   │   ├── lock.sh
│   │       │   │   ├── lock_config.conf
│   │       │   │   └── lock_screen.sh
│   │       │   └── waybar/
│   │       │       ├── config.jsonc
│   │       │       └── launch.sh
│   │       ├── home-laptop.nix
│   │       ├── home-programs-laptop.nix
│   │       └── link-dotfiles-laptop.nix
│   ├── nixos.nix
│   ├── overlays/
│   │   ├── betaflight-configurator.nix
│   │   ├── blhelisuite32.nix
│   │   ├── default.bkp
│   │   └── test.nix
│   ├── packages.nix
│   ├── pkgs/
│   │   ├── default.nix
│   │   └── kanagawa-gtk-theme.nix
│   └── variables.nix
└── scripts/
    ├── blepower.sh
    ├── sleep.sh
    ├── update.sh
    └── wifipower.sh
Download .txt
SYMBOL INDEX (422 symbols across 132 files)

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/config.js
  function mismatch (line 10) | function mismatch() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/about/about.js
  function showAbout (line 92) | function showAbout(force = false) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/applauncher/Applauncher.js
  constant WINDOW_NAME (line 9) | const WINDOW_NAME = 'applauncher';

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/FontIcon.js
  method constructor (line 10) | constructor(params = '') {
  method icon (line 24) | get icon() { return this.label; }
  method icon (line 25) | set icon(icon) { this.label = icon; }
  method size (line 27) | get size() {
  method vfunc_get_preferred_height (line 33) | vfunc_get_preferred_height() {
  method vfunc_get_preferred_width (line 38) | vfunc_get_preferred_width() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/Notification.js
  method on_hover (line 115) | on_hover() {
  method on_hover_lost (line 118) | on_hover_lost() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/PopupWindow.js
  class PopupWindow (line 7) | class PopupWindow extends AgsWindow {
    method constructor (line 16) | constructor({ name, child, transition = 'none', visible = false, ...re...
    method transition (line 45) | set transition(dir) { this.revealer.transition = dir; }
    method transition (line 46) | get transition() { return this.revealer.transition; }

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/RegularWindow.js
  class RegularWindow (line 5) | class RegularWindow extends AgsWidget(Gtk.Window, 'RegularWindow') {
    method constructor (line 11) | constructor(params) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/mpris.js
  function lengthStr (line 92) | function lengthStr(length) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/overview/Client.js
  constant SCALE (line 9) | const SCALE = 0.08;
  constant TARGET (line 10) | const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/overview/Workspace.js
  constant SCALE (line 8) | const SCALE = 0.08;
  constant TARGET (line 9) | const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/powermenu/ShadedPopup.js
  method setup (line 25) | setup() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/asusctl.js
  class Asusctl (line 4) | class Asusctl extends Service {
    method nextProfile (line 16) | nextProfile() {
    method setProfile (line 26) | setProfile(prof) {
    method nextMode (line 35) | nextMode() {
    method constructor (line 44) | constructor() {
    method profile (line 57) | get profile() { return this.#profile; }
    method mode (line 58) | get mode() { return this.#mode; }

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/brightness.js
  constant KBD (line 6) | const KBD = options.brightnessctlKBD;
  class Brightness (line 8) | class Brightness extends Service {
    method kbd (line 20) | get kbd() { return this.#kbd; }
    method screen (line 21) | get screen() { return this.#screen; }
    method kbd (line 23) | set kbd(value) {
    method screen (line 38) | set screen(percent) {
    method constructor (line 56) | constructor() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/colorpicker.js
  constant COLORS_CACHE (line 7) | const COLORS_CACHE = Utils.CACHE_DIR + '/colorpicker.json';
  class Colors (line 9) | class Colors extends Service {
    method colors (line 18) | get colors() { return this.#colors.value; }
    method constructor (line 22) | constructor() {
    method wlCopy (line 33) | wlCopy(color) {
    method pick (line 38) | async pick() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/lockscreen.js
  class Lockscreen (line 6) | class Lockscreen extends Service {
    method lockscreen (line 14) | lockscreen() { this.emit('lock', true); }
    method auth (line 17) | auth(password) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/onScreenIndicator.js
  class Indicator (line 8) | class Indicator extends Service {
    method popup (line 22) | popup(value, icon) {
    method speaker (line 33) | speaker() {
    method display (line 40) | display() {
    method kbd (line 47) | kbd() {
    method connect (line 54) | connect(event = 'popup', callback) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/powermenu.js
  class PowerMenu (line 4) | class PowerMenu extends Service {
    method title (line 15) | get title() { return this.#title; }
    method cmd (line 16) | get cmd() { return this.#cmd; }
    method action (line 19) | action(action) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/screenrecord.js
  class Recorder (line 9) | class Recorder extends Service {
    method start (line 24) | async start() {
    method stop (line 45) | async stop() {
    method screenshot (line 73) | async screenshot(full = false) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/SettingsDialog.js
  method setup (line 52) | setup(self) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/globals.js
  function globals (line 3) | async function globals() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/hyprland.js
  function sendBatch (line 9) | function sendBatch(batch) {
  function getColor (line 19) | function getColor(scss) {
  function hyprlandInit (line 29) | function hyprlandInit() {
  function setupHyprland (line 42) | async function setupHyprland() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/option.js
  constant CACHE_FILE (line 7) | const CACHE_FILE = CACHE_DIR + '/options.json';
  class Opt (line 29) | class Opt extends Service {
    method constructor (line 61) | constructor(value, config) {
    method scss (line 73) | set scss(scss) { this.#scss = scss; }
    method scss (line 74) | get scss() {
    method #init (line 82) | #init() {
    method value (line 107) | get value() { return this.#value; }
    method value (line 108) | set value(value) { this.setValue(value); }
    method setValue (line 111) | setValue(value, reload = false) {
    method reset (line 130) | reset(reload = false) {
  function Option (line 142) | function Option(value, config) {
  function getOptions (line 147) | function getOptions(object = options, path = '') {
  function resetOptions (line 165) | function resetOptions() {
  function getValues (line 171) | function getValues() {
  function apply (line 182) | function apply(config) {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/scss.js
  function scssWatcher (line 6) | function scssWatcher() {
  function reloadScss (line 26) | async function reloadScss() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/setup.js
  function init (line 15) | function init() {
  function tmux (line 37) | function tmux() {
  function gsettigsColorScheme (line 57) | function gsettigsColorScheme() {
  function gtkFontSettings (line 68) | function gtkFontSettings() {
  function notificationBlacklist (line 84) | function notificationBlacklist() {
  function warnOnLowBattery (line 94) | function warnOnLowBattery() {
  function pywal (line 111) | function pywal() {
  function gtkTheme (line 120) | function gtkTheme() {
  function gtkIcons (line 130) | function gtkIcons() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/theme.js
  function setTheme (line 11) | function setTheme(name) {
  constant HOME (line 27) | const HOME = GLib.get_home_dir() + '/';
  function openSettings (line 53) | async function openSettings() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/wallpaper.js
  function initWallpaper (line 5) | function initWallpaper() {
  function wallpaper (line 13) | function wallpaper() {

FILE: nixos/hosts/desktop/home-dotfiles-desktop/ags/js/utils.js
  function range (line 12) | function range(length, start = 1) {
  function substitute (line 21) | function substitute(collection, item) {
  function forMonitors (line 29) | function forMonitors(widget) {
  function createSurfaceFromWidget (line 38) | function createSurfaceFromWidget(widget) {
  function getAudioTypeIcon (line 55) | function getAudioTypeIcon(icon) {
  function launchApp (line 67) | function launchApp(app) {
  function dependencies (line 73) | function dependencies(bins) {
  function blurImg (line 86) | function blurImg(img) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/config.js
  function mismatch (line 6) | function mismatch() {
  function check (line 12) | function check() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/greeter/auth.ts
  function login (line 9) | async function login(password: string) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/greeter/greeter.ts
  method onConfigParsed (line 35) | onConfigParsed() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/battery.ts
  function init (line 3) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/experiments.ts
  type GObj (line 9) | type GObj = GObject.Object | App
  type B (line 10) | type B<T> = Binding<Variable<T>, any, T>
  function watch (line 16) | function watch<T>(

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/gtk.ts
  function gtk (line 8) | function gtk() {
  function init (line 13) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/hyprland.ts
  function init (line 28) | function init() {
  function activeBorder (line 33) | function activeBorder() {
  function sendBatch (line 41) | function sendBatch(batch: string[]) {
  function setupHyprland (line 50) | async function setupHyprland() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/init.ts
  function init (line 10) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/matugen.ts
  function init (line 4) | function init() {
  function animate (line 9) | function animate(...setters: Array<() => void>) {
  function matugen (line 14) | async function matugen(
  type Colors (line 63) | type Colors = {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/notifications.ts
  function init (line 8) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/option.ts
  type OptProps (line 5) | type OptProps = {
  class Opt (line 9) | class Opt<T = unknown> extends Variable<T> {
    method constructor (line 12) | constructor(initial: T, { persistent = false }: OptProps = {}) {
    method toString (line 21) | toString() { return `${this.value}` }
    method toJSON (line 22) | toJSON() { return `opt:${this.value}` }
    method init (line 24) | init(cacheFile: string) {
    method reset (line 36) | reset() {
  function getOptions (line 49) | function getOptions(object: object, path = ""): Opt[] {
  function mkOptions (line 66) | function mkOptions<T extends object>(cacheFile: string, object: T) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/swww.ts
  function wallpaper (line 7) | async function wallpaper() {
  function init (line 18) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/tmux.ts
  function tmux (line 4) | async function tmux() {
  function init (line 11) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/lib/utils.ts
  function config (line 9) | function config<T extends Gtk.Window>(config: Config<T>) {
  function icon (line 16) | function icon(name: string | null, fallback = name) {
  function bash (line 34) | async function bash(strings: TemplateStringsArray | string, ...values: u...
  function sh (line 48) | async function sh(cmd: string | string[]) {
  function forMonitors (line 55) | function forMonitors(widget: (monitor: number) => Gtk.Window) {
  function range (line 63) | function range(length: number, start = 1) {
  function wait (line 70) | function wait<T>(ms: number, callback: () => T): Promise<T> {
  function dependencies (line 79) | function dependencies(...bins: string[]) {
  function launchApp (line 93) | function launchApp(app: Application) {
  function createSurfaceFromWidget (line 106) | function createSurfaceFromWidget(widget: Gtk.Widget) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/service/asusctl.ts
  type Profile (line 3) | type Profile = "Performance" | "Balanced" | "Quiet"
  type Mode (line 4) | type Mode = "Hybrid" | "Integrated"
  class Asusctl (line 6) | class Asusctl extends Service {
    method nextProfile (line 18) | async nextProfile() {
    method setProfile (line 26) | async setProfile(prof: Profile) {
    method nextMode (line 32) | async nextMode() {
    method constructor (line 38) | constructor() {
    method profiles (line 47) | get profiles(): Profile[] { return ["Performance", "Balanced", "Quiet"] }
    method profile (line 48) | get profile() { return this.#profile }
    method mode (line 49) | get mode() { return this.#mode }

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/service/brightness.ts
  class Brightness (line 10) | class Brightness extends Service {
    method kbd (line 23) | get kbd() { return this.#kbd }
    method screen (line 24) | get screen() { return this.#screen }
    method kbd (line 26) | set kbd(value) {
    method screen (line 36) | set screen(percent) {
    method constructor (line 49) | constructor() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/service/colorpicker.ts
  constant COLORS_CACHE (line 4) | const COLORS_CACHE = Utils.CACHE_DIR + "/colorpicker.json"
  constant MAX_NUM_COLORS (line 5) | const MAX_NUM_COLORS = 10
  class ColorPicker (line 7) | class ColorPicker extends Service {
    method colors (line 17) | get colors() { return [...this.#colors] }
    method colors (line 18) | set colors(colors) {
    method wlCopy (line 24) | async wlCopy(color: string) {
    method pick (line 29) | async pick() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/service/powermenu.ts
  type Action (line 5) | type Action = "sleep" | "reboot" | "logout" | "shutdown"
  class PowerMenu (line 7) | class PowerMenu extends Service {
    method title (line 18) | get title() { return this.#title }
    method cmd (line 19) | get cmd() { return this.#cmd }
    method action (line 21) | action(action: Action) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/service/screenrecord.ts
  class Recorder (line 7) | class Recorder extends Service {
    method start (line 23) | async start() {
    method stop (line 44) | async stop() {
    method screenshot (line 64) | async screenshot(full = false) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/style/style.ts
  function resetCss (line 82) | async function resetCss() {
  function init (line 105) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/PopupWindow.ts
  type Transition (line 7) | type Transition = RevealerProps["transition"]
  type Child (line 8) | type Child = WindowProps["child"]
  type PopupWindowProps (line 10) | type PopupWindowProps = Omit<WindowProps, "name"> & {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/applauncher/Applauncher.ts
  function focus (line 74) | function focus() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/bar/Bar.ts
  type BarWidget (line 18) | type BarWidget = keyof typeof widget

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/bar/PanelButton.ts
  type PanelButtonProps (line 4) | type PanelButtonProps = ButtonProps & {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/bar/buttons/Taskbar.ts
  function sortItems (line 63) | function sortItems<T extends { attribute: { address: string } }>(arr: T[...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/datemenu/DateColumn.ts
  function up (line 3) | function up(up: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/datemenu/DateMenu.ts
  function setupDateMenu (line 30) | function setupDateMenu() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/datemenu/NotificationColumn.ts
  function remove (line 52) | function remove(_: unknown, id: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/notifications/Notification.ts
  method on_hover (line 118) | on_hover() {
  method on_hover_lost (line 122) | on_hover_lost() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/notifications/NotificationPopups.ts
  function Animated (line 9) | function Animated(id: number) {
  function PopupList (line 52) | function PopupList() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/osd/OSD.ts
  constant DELAY (line 11) | const DELAY = 2500
  function OnScreenProgress (line 13) | function OnScreenProgress(vertical: boolean) {
  function MicrophoneMute (line 59) | function MicrophoneMute() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/osd/Progress.ts
  type ProgressProps (line 6) | type ProgressProps = {
  method setValue (line 41) | setValue(value: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/overview/Window.ts
  constant TARGET (line 9) | const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/overview/Workspace.ts
  constant TARGET (line 6) | const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/quicksettings/QuickSettings.ts
  function setupQuickSettings (line 78) | function setupQuickSettings() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/quicksettings/ToggleButton.ts
  type ArrowToggleButtonProps (line 39) | type ArrowToggleButtonProps = {
  type MenuProps (line 92) | type MenuProps = {
  type SimpleToggleButtonProps (line 129) | type SimpleToggleButtonProps = {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/quicksettings/widgets/Header.ts
  function up (line 10) | function up(up: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/quicksettings/widgets/Media.ts
  function lengthStr (line 11) | function lengthStr(length: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/quicksettings/widgets/Volume.ts
  type Type (line 8) | type Type = "microphone" | "speaker"

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/settings/Row.ts
  type RowProps (line 6) | type RowProps<T> = {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/settings/Setter.ts
  function EnumSetter (line 6) | function EnumSetter(opt: Opt<string>, values: string[]) {
  function Setter (line 29) | function Setter<T>({

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags/widget/settings/SettingsDialog.ts
  method setup (line 49) | setup(win) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/config.js
  constant SKIP_CHECK (line 5) | const SKIP_CHECK = 'AGS_SKIP_V_CHECK';
  function mismatch (line 13) | function mismatch() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/about/about.js
  function showAbout (line 89) | function showAbout(force = false) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/applauncher/Applauncher.js
  constant WINDOW_NAME (line 8) | const WINDOW_NAME = 'applauncher';

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/misc/FontIcon.js
  class FontIcon (line 5) | class FontIcon extends AgsLabel {
    method constructor (line 9) | constructor(params = '') {
    method icon (line 23) | get icon() { return this.label; }
    method icon (line 24) | set icon(icon) { this.label = icon; }
    method size (line 26) | get size() {
    method vfunc_get_preferred_height (line 32) | vfunc_get_preferred_height() {
    method vfunc_get_preferred_width (line 37) | vfunc_get_preferred_width() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/misc/Notification.js
  method on_hover (line 116) | on_hover() {
  method on_hover_lost (line 120) | on_hover_lost() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/misc/PopupWindow.js
  class PopupWindow (line 30) | class PopupWindow extends AgsWindow {
    method constructor (line 33) | constructor({ name, child, transition = 'none', visible = false, ...re...
    method transition (line 66) | set transition(dir) { this.revealer.transition = dir; }
    method transition (line 67) | get transition() { return this.revealer.transition; }

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/misc/mpris.js
  function lengthStr (line 90) | function lengthStr(length) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/overview/Client.js
  constant SCALE (line 10) | const SCALE = 0.08;
  constant TARGET (line 11) | const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/overview/Workspace.js
  constant SCALE (line 8) | const SCALE = 0.08;
  constant TARGET (line 9) | const TARGET = [Gtk.TargetEntry.new('text/plain', Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/powermenu/ShadedPopup.js
  method setup (line 26) | setup() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/asusctl.js
  class Asusctl (line 4) | class Asusctl extends Service {
    method nextProfile (line 16) | nextProfile() {
    method setProfile (line 26) | setProfile(prof) {
    method nextMode (line 35) | nextMode() {
    method constructor (line 44) | constructor() {
    method profile (line 57) | get profile() { return this.#profile; }
    method mode (line 58) | get mode() { return this.#mode; }

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/brightness.js
  constant KBD (line 6) | const KBD = options.brightnessctlKBD;
  class Brightness (line 8) | class Brightness extends Service {
    method kbd (line 20) | get kbd() { return this.#kbd; }
    method screen (line 21) | get screen() { return this.#screen; }
    method kbd (line 23) | set kbd(value) {
    method screen (line 38) | set screen(percent) {
    method constructor (line 56) | constructor() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/colorpicker.js
  constant COLORS_CACHE (line 7) | const COLORS_CACHE = Utils.CACHE_DIR + '/colorpicker.json';
  class Colors (line 9) | class Colors extends Service {
    method colors (line 18) | get colors() { return this.#colors.value; }
    method constructor (line 22) | constructor() {
    method wlCopy (line 33) | wlCopy(color) {
    method pick (line 38) | async pick() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/lockscreen.js
  class Lockscreen (line 6) | class Lockscreen extends Service {
    method lockscreen (line 14) | lockscreen() { this.emit('lock', true); }
    method auth (line 17) | auth(password) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/onScreenIndicator.js
  class Indicator (line 8) | class Indicator extends Service {
    method popup (line 22) | popup(value, icon) {
    method speaker (line 33) | speaker() {
    method display (line 40) | display() {
    method kbd (line 47) | kbd() {
    method connect (line 54) | connect(event = 'popup', callback) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/powermenu.js
  class PowerMenu (line 4) | class PowerMenu extends Service {
    method title (line 15) | get title() { return this.#title; }
    method cmd (line 16) | get cmd() { return this.#cmd; }
    method action (line 19) | action(action) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/services/screenrecord.js
  class Recorder (line 9) | class Recorder extends Service {
    method start (line 24) | async start() {
    method stop (line 45) | async stop() {
    method screenshot (line 73) | async screenshot(full = false) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/SettingsDialog.js
  method setup (line 57) | setup(self) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/globals.js
  function globals (line 3) | async function globals() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/hyprland.js
  function sendBatch (line 9) | function sendBatch(batch) {
  function getColor (line 19) | function getColor(scss) {
  function hyprlandInit (line 29) | function hyprlandInit() {
  function setupHyprland (line 42) | async function setupHyprland() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/option.js
  constant CACHE_FILE (line 7) | const CACHE_FILE = CACHE_DIR + '/options.json';
  class Opt (line 29) | class Opt extends Service {
    method constructor (line 61) | constructor(value, config) {
    method scss (line 73) | set scss(scss) { this.#scss = scss; }
    method scss (line 74) | get scss() {
    method #init (line 82) | #init() {
    method value (line 107) | get value() { return this.#value; }
    method value (line 108) | set value(value) { this.setValue(value); }
    method setValue (line 111) | setValue(value, reload = false) {
    method reset (line 130) | reset(reload = false) {
  function Option (line 142) | function Option(value, config) {
  function getOptions (line 147) | function getOptions(object = options, path = '') {
  function resetOptions (line 165) | function resetOptions() {
  function getValues (line 171) | function getValues() {
  function apply (line 182) | function apply(config) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/scss.js
  function scssWatcher (line 6) | function scssWatcher() {
  function reloadScss (line 26) | async function reloadScss() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/setup.js
  function init (line 14) | function init() {
  function dependandOptions (line 35) | function dependandOptions() {
  function tmux (line 42) | function tmux() {
  function gsettigsColorScheme (line 64) | function gsettigsColorScheme() {
  function gtkFontSettings (line 75) | function gtkFontSettings() {
  function notificationBlacklist (line 91) | function notificationBlacklist() {
  function warnOnLowBattery (line 100) | function warnOnLowBattery() {
  function pywal (line 121) | function pywal() {
  function gtkTheme (line 129) | function gtkTheme() {
  function gtkIcons (line 142) | function gtkIcons() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/theme.js
  function setTheme (line 11) | function setTheme(name) {
  constant HOME (line 26) | const HOME = GLib.get_home_dir() + '/';
  function openSettings (line 52) | async function openSettings() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/settings/wallpaper.js
  function initWallpaper (line 6) | function initWallpaper() {
  function wallpaper (line 14) | function wallpaper() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_js/js/utils.js
  function range (line 12) | function range(length, start = 1) {
  function substitute (line 21) | function substitute(collection, item) {
  function forMonitors (line 29) | function forMonitors(widget) {
  function createSurfaceFromWidget (line 38) | function createSurfaceFromWidget(widget) {
  function getAudioTypeIcon (line 55) | function getAudioTypeIcon(icon) {
  function launchApp (line 66) | function launchApp(app) {
  function dependencies (line 72) | function dependencies(bins) {
  function blurImg (line 84) | function blurImg(img) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/battery.ts
  function init (line 3) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/experiments.ts
  type GObj (line 10) | type GObj = GObject.Object | App
  function watch (line 15) | function watch<T>(

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/gtk.ts
  function gtk (line 8) | function gtk() {
  function init (line 13) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/hyprland.ts
  function init (line 26) | function init() {
  function activeBorder (line 31) | function activeBorder() {
  function sendBatch (line 39) | function sendBatch(batch: string[]) {
  function blur (line 48) | function blur(name: string) {
  function setupHyprland (line 65) | function setupHyprland() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/init.ts
  function init (line 9) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/matugen.ts
  function init (line 4) | function init() {
  function animate (line 9) | function animate(...setters: Array<() => void>) {
  function matugen (line 14) | async function matugen(
  type Colors (line 61) | type Colors = {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/option.ts
  class Opt (line 5) | class Opt<T = unknown> extends Variable<T> {
    method constructor (line 8) | constructor(initial: T) {
    method toString (line 15) | toString() {
    method init (line 19) | init(cacheFile: string) {
    method reset (line 31) | reset() {
  function getOptions (line 41) | function getOptions(object: object, path = ""): Opt[] {
  function mkOptions (line 58) | function mkOptions<T extends object>(cacheFile: string, object: T) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/swww.ts
  function wallpaper (line 5) | async function wallpaper() {
  function init (line 17) | async function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/tmux.ts
  function tmux (line 4) | async function tmux() {
  function init (line 11) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/lib/utils.ts
  function config (line 9) | function config<T extends Gtk.Window>(config: Config<T>) {
  function icon (line 16) | function icon(name: string | null, fallback = name) {
  function bash (line 34) | async function bash(strings: TemplateStringsArray | string, ...values: u...
  function sh (line 48) | async function sh(cmd: string | string[]) {
  function forMonitors (line 55) | function forMonitors(widget: (monitor: number) => Gtk.Window) {
  function range (line 63) | function range(length: number, start = 1) {
  function wait (line 70) | function wait<T>(ms: number, callback: () => T): Promise<T> {
  function dependencies (line 79) | function dependencies(...bins: string[]) {
  function launchApp (line 93) | function launchApp(app: Application) {
  function createSurfaceFromWidget (line 102) | function createSurfaceFromWidget(widget: Gtk.Widget) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/service/asusctl.ts
  type Profile (line 3) | type Profile = "Performance" | "Balanced" | "Quiet"
  type Mode (line 4) | type Mode = "Hybrid" | "Integrated"
  class Asusctl (line 6) | class Asusctl extends Service {
    method nextProfile (line 18) | async nextProfile() {
    method setProfile (line 26) | async setProfile(prof: Profile) {
    method nextMode (line 32) | async nextMode() {
    method constructor (line 38) | constructor() {
    method profiles (line 47) | get profiles(): Profile[] { return ["Performance", "Balanced", "Quiet"] }
    method profile (line 48) | get profile() { return this.#profile }
    method mode (line 49) | get mode() { return this.#mode }

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/service/brightness.ts
  class Brightness (line 7) | class Brightness extends Service {
    method kbd (line 20) | get kbd() { return this.#kbd }
    method screen (line 21) | get screen() { return this.#screen }
    method kbd (line 23) | set kbd(value) {
    method screen (line 33) | set screen(percent) {
    method constructor (line 46) | constructor() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/service/colorpicker.ts
  constant COLORS_CACHE (line 4) | const COLORS_CACHE = Utils.CACHE_DIR + "/colorpicker.json"
  constant MAX_NUM_COLORS (line 5) | const MAX_NUM_COLORS = 10
  class ColorPicker (line 7) | class ColorPicker extends Service {
    method colors (line 17) | get colors() { return [...this.#colors] }
    method colors (line 18) | set colors(colors) {
    method wlCopy (line 24) | async wlCopy(color: string) {
    method pick (line 29) | async pick() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/service/powermenu.ts
  type Action (line 5) | type Action = "sleep" | "reboot" | "logout" | "shutdown"
  class PowerMenu (line 7) | class PowerMenu extends Service {
    method title (line 18) | get title() { return this.#title }
    method cmd (line 19) | get cmd() { return this.#cmd }
    method action (line 21) | action(action: Action) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/service/screenrecord.ts
  class Recorder (line 7) | class Recorder extends Service {
    method start (line 23) | async start() {
    method stop (line 45) | async stop() {
    method screenshot (line 65) | async screenshot(full = false) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/style/style.ts
  function resetCss (line 79) | async function resetCss() {
  function init (line 96) | function init() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/PopupWindow.ts
  type Transition (line 7) | type Transition = RevealerProps["transition"]
  type Child (line 8) | type Child = WindowProps["child"]
  type PopupWindowProps (line 10) | type PopupWindowProps = WindowProps & {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/applauncher/Applauncher.ts
  function focus (line 74) | function focus() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/bar/Bar.ts
  type BarWidget (line 18) | type BarWidget = keyof typeof widget;

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/bar/PanelButton.ts
  type PanelButtonProps (line 4) | type PanelButtonProps = ButtonProps & {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/bar/buttons/Taskbar.ts
  function sortItems (line 64) | function sortItems<T extends { attribute: { address: string } }>(arr: T[...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/datemenu/DateColumn.ts
  function up (line 3) | function up(up: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/datemenu/DateMenu.ts
  function setupDateMenu (line 30) | function setupDateMenu() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/datemenu/NotificationColumn.ts
  function remove (line 42) | function remove(_: unknown, id: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/notifications/Notification.ts
  method on_hover (line 118) | on_hover() {
  method on_hover_lost (line 122) | on_hover_lost() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/notifications/NotificationPopups.ts
  function Animated (line 9) | function Animated(id: number) {
  function PopupList (line 52) | function PopupList() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/osd/OSD.ts
  constant DELAY (line 11) | const DELAY = 2500
  function OnScreenProgress (line 13) | function OnScreenProgress(vertical: boolean) {
  function MicrophoneMute (line 59) | function MicrophoneMute() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/osd/Progress.ts
  type ProgressProps (line 6) | type ProgressProps = {
  method setValue (line 41) | setValue(value: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/overview/Window.ts
  constant TARGET (line 9) | const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/overview/Workspace.ts
  constant TARGET (line 6) | const TARGET = [Gtk.TargetEntry.new("text/plain", Gtk.TargetFlags.SAME_A...

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/quicksettings/QuickSettings.ts
  function setupQuickSettings (line 78) | function setupQuickSettings() {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/quicksettings/ToggleButton.ts
  type ArrowToggleButtonProps (line 39) | type ArrowToggleButtonProps = {
  type MenuProps (line 92) | type MenuProps = {
  type SimpleToggleButtonProps (line 129) | type SimpleToggleButtonProps = {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/quicksettings/widgets/Header.ts
  function up (line 10) | function up(up: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/quicksettings/widgets/Media.ts
  function lengthStr (line 11) | function lengthStr(length: number) {

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/quicksettings/widgets/Volume.ts
  type Type (line 8) | type Type = "microphone" | "speaker"

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/settings/Row.ts
  function EnumSetter (line 6) | function EnumSetter(opt: Opt<string>, values: string[]) {
  type RowProps (line 29) | type RowProps<T> = {
  function Setter (line 48) | function Setter<T>({

FILE: nixos/hosts/laptop/home-dotfiles-laptop/ags_ts_old/widget/settings/SettingsDialog.ts
  method setup (line 52) | setup(win) {
Condensed preview — 579 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,286K chars).
[
  {
    "path": ".gitignore",
    "chars": 132,
    "preview": "Backups/\ndependencies..\nbackgrounds/last/image.png\nbackgrounds/last/image_blurred.png\nhypr/monitors.conf\nhypr/Workspaces"
  },
  {
    "path": "README.md",
    "chars": 4209,
    "preview": "![alt text](https://raw.githubusercontent.com/trinib/trinib/82213791fa9ff58d3ca768ddd6de2489ec23ffca/images/footer.svg)\n"
  },
  {
    "path": "backgrounds/last/.comments/image_blurred.png.xml",
    "chars": 142,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<comment version=\"3.0\">\n  <caption>rosé pine</caption>\n  <note/>\n  <place/>\n  <ca"
  },
  {
    "path": "cfg/anyrun/adwaita-dark/config.ron",
    "chars": 390,
    "preview": "Config(\n  x: Fraction(0.500000),\n  y: Fraction(0.300000),\n  width: Fraction(0.250000),\n  height: Absolute(0),\n  hide_ico"
  },
  {
    "path": "cfg/anyrun/adwaita-dark/launch.sh",
    "chars": 115,
    "preview": "#!/usr/bin/env sh\n\n# Adwaita\n\nsassc $HOME/.config/anyrun/style-adwaita.scss $HOME/.config/anyrun/style.css\n\nanyrun\n"
  },
  {
    "path": "cfg/anyrun/adwaita-dark/style-adwaita.scss",
    "chars": 1438,
    "preview": "@import \"./adwaita.scss\";\n\nwindow {\n  background: transparent;\n  /* rgba(0, 0, 0, 0.8);*/\n}\n\n#match,\n#entry,\n#plugin,\n#m"
  },
  {
    "path": "cfg/anyrun/catppuccin-mocha/config.ron",
    "chars": 323,
    "preview": "Config(\n  x: Fraction(0.500000),\n  y: Fraction(0.300000),\n  width: Fraction(0.250000),\n  height: Absolute(0),\n  hide_ico"
  },
  {
    "path": "cfg/anyrun/catppuccin-mocha/launch.sh",
    "chars": 133,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nsassc $HOME/.config/anyrun/style-catppuccin-mocha.scss $HOME/.config/anyrun/style"
  },
  {
    "path": "cfg/anyrun/catppuccin-mocha/style-catppuccin-mocha.scss",
    "chars": 1506,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\nwindow {\n  background: transparent;\n  /* rgba(0, 0, 0, 0.8);*/\n}\n\n#match,\n#entry,\n#p"
  },
  {
    "path": "cfg/hypr/adwaita-dark/Decoration.conf",
    "chars": 3637,
    "preview": "# ############################################################################# #\n#   _   _                  _          "
  },
  {
    "path": "cfg/hypr/catppuccin-mocha/Decoration.conf",
    "chars": 3630,
    "preview": "# ############################################################################# #\n#   _   _                  _          "
  },
  {
    "path": "cfg/swaync/adwaita-dark/config.json",
    "chars": 3188,
    "preview": "{\n  \"$schema\": \"./configSchema.json\",\n  \"positionX\": \"right\",\n  \"positionY\": \"top\",\n  \"control-center-margin-top\": 0,\n  "
  },
  {
    "path": "cfg/swaync/adwaita-dark/configSchema.json",
    "chars": 21952,
    "preview": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"title\": \"SwayNotificationCenter JSON schema\",\n  \"type\""
  },
  {
    "path": "cfg/swaync/adwaita-dark/launch.sh",
    "chars": 160,
    "preview": "#!/usr/bin/env sh\n\n# Adwaita\n\nsassc $HOME/.config/swaync/style-adwaita.scss $HOME/.config/swaync/style.css\n\nswaync-clien"
  },
  {
    "path": "cfg/swaync/adwaita-dark/style-adwaita.scss",
    "chars": 12976,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n.text-button:hover,\n.text-button.control-center-clear-all:hover {\n  color: $color-fg"
  },
  {
    "path": "cfg/swaync/catppuccin-mocha/config.json",
    "chars": 3188,
    "preview": "{\n  \"$schema\": \"./configSchema.json\",\n  \"positionX\": \"right\",\n  \"positionY\": \"top\",\n  \"control-center-margin-top\": 0,\n  "
  },
  {
    "path": "cfg/swaync/catppuccin-mocha/configSchema.json",
    "chars": 21952,
    "preview": "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"title\": \"SwayNotificationCenter JSON schema\",\n  \"type\""
  },
  {
    "path": "cfg/swaync/catppuccin-mocha/launch.sh",
    "chars": 178,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nsassc $HOME/.config/swaync/style-catppuccin-mocha.scss $HOME/.config/swaync/style"
  },
  {
    "path": "cfg/swaync/catppuccin-mocha/style-catppuccin-mocha.scss",
    "chars": 12976,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n.text-button:hover,\n.text-button.control-center-clear-all:hover {\n  color: $color-fg"
  },
  {
    "path": "cfg/themes/adwaita.scss",
    "chars": 4966,
    "preview": "// When color definition differs for dark and light variant\n// it gets @if ed depending on $variant\n\n$variant: 'dark';\n\n"
  },
  {
    "path": "cfg/themes/catppuccin-mocha.scss",
    "chars": 1337,
    "preview": "$variant: \"dark\";\n\n$font-size: 13pt;\n\n$orange: #ff7800;\n$purple: #9141ac;\n$brown: #986a44;\n$dark_1: #77767b;\n$dark_3: #3"
  },
  {
    "path": "cfg/themeswitcher/config.jsonc",
    "chars": 3954,
    "preview": "{\n  \"title\": \"ThemeSwitcher\",\n  \"name\": \"Rocco Rakete\",\n  \"menus\": [\n    {\n      \"name\": \"Waybar Themes\",\n      \"options"
  },
  {
    "path": "cfg/themeswitcher/styles.css",
    "chars": 369,
    "preview": ".menu-label {\n  font-size: 1.2em;\n  font-weight: bolder;\n  padding-left: 20px;\n  padding-right: 20px;\n}\n\n.menu-dropdown "
  },
  {
    "path": "cfg/walker/catppuccin-mocha/config.json",
    "chars": 1361,
    "preview": "{\n\t\"activation_mode\": {\n\t\t\"disabled\": false,\n\t\t\"use_alt\": false\n\t},\n\t\"align\": {\n\t\t\"anchors\": {\n\t\t\t\"bottom\": false,\n\t\t\t\"l"
  },
  {
    "path": "cfg/walker/catppuccin-mocha/launch.sh",
    "chars": 133,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nsassc $HOME/.config/walker/style-catppuccin-mocha.scss $HOME/.config/walker/style"
  },
  {
    "path": "cfg/walker/catppuccin-mocha/style-catppuccin-mocha.scss",
    "chars": 1059,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n* {\n  font-weight: bolder;\n}\n\n#window {\n  border-radius: $widget-radii;\n  border: $w"
  },
  {
    "path": "cfg/waybar/adwaita-dark/adwaita-colored-buttons.scss",
    "chars": 565,
    "preview": "@import \"./adwaita.scss\";\n\n#cpu,\n#memory,\n#temperature,\n#backlight {\n  background-color: transparentize($color: $blue, $"
  },
  {
    "path": "cfg/waybar/adwaita-dark/config.jsonc",
    "chars": 4467,
    "preview": "{\n  \"spacing\": 0,\n  \"margin-left\": 10,\n  \"margin-right\": 10,\n  \"margin-top\": 10,\n  //\"margin-left\": 0,\n  //\"margin-right"
  },
  {
    "path": "cfg/waybar/adwaita-dark/launch.sh",
    "chars": 452,
    "preview": "#!/usr/bin/env sh\n\n# Adwaita-Dark\n\nis_swww_daemon_running() {\n    if pgrep -x \"swww-daemon\" > /dev/null\n    then\n       "
  },
  {
    "path": "cfg/waybar/adwaita-dark/style-adwaita.scss",
    "chars": 2008,
    "preview": "@import \"./adwaita.scss\";\n@import \"./adwaita-colored-buttons.scss\";\n\n* {\n  padding: 0;\n  margin: 0;\n  font-weight: bolde"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked/config.jsonc",
    "chars": 4616,
    "preview": "{\n\t\"spacing\": 0,\n\t\"margin-left\": 0,\n\t\"margin-right\": 0,\n\t\"margin-top\": 0,\n\t\"layer\": \"top\",\n\t\"reload_style_on_change\": tr"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked/launch.sh",
    "chars": 463,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nis_swww_daemon_running() {\n    if pgrep -x \"swww-daemon\" > /dev/null\n    then\n   "
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked/style-catppuccin-mocha.scss",
    "chars": 2034,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n* {\n  padding: 0;\n  margin: 0;\n  font-weight: bolder;\n}\n\nwindow#waybar {\n  font-size"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-color-buttons/catppuccin-mocha-colored-buttons.scss",
    "chars": 528,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n#cpu,\n#memory,\n#temperature,\n#backlight {\n  background-color: darken($color: $blue, "
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-color-buttons/config.jsonc",
    "chars": 4467,
    "preview": "{\n  \"spacing\": 0,\n  //\"margin-left\": 10,\n  //\"margin-right\": 10,\n  //\"margin-top\": 10,\n  \"margin-left\": 0,\n  \"margin-rig"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-color-buttons/launch.sh",
    "chars": 463,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nis_swww_daemon_running() {\n    if pgrep -x \"swww-daemon\" > /dev/null\n    then\n   "
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-color-buttons/style-catppuccin-mocha.scss",
    "chars": 2037,
    "preview": "@import \"./catppuccin-mocha.scss\";\n@import \"./catppuccin-mocha-colored-buttons.scss\";\n\n* {\n  padding: 0;\n  margin: 0;\n  "
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-flat-buttons/catppuccin-mocha-flat-buttons.scss",
    "chars": 280,
    "preview": "@import \"./catppuccin-mocha.scss\";\n\n#cpu,\n#memory,\n#temperature,\n#backlight,\n#battery,\n#tray,\n#network,\n#pulseaudio,\n#bl"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-flat-buttons/config.jsonc",
    "chars": 4897,
    "preview": "{\n\t\"spacing\": 0,\n\t\"margin-left\": 0,\n\t\"margin-right\": 0,\n\t\"margin-top\": 0,\n\t\"layer\": \"bottom\",\n\t\"reload_style_on_change\":"
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-flat-buttons/launch.sh",
    "chars": 463,
    "preview": "#!/usr/bin/env sh\n\n# Catppuccin-Mocha\n\nis_swww_daemon_running() {\n    if pgrep -x \"swww-daemon\" > /dev/null\n    then\n   "
  },
  {
    "path": "cfg/waybar/catppuccin-mocha-docked-flat-buttons/style-catppuccin-mocha.scss",
    "chars": 1994,
    "preview": "@import \"./catppuccin-mocha.scss\";\n@import \"./catppuccin-mocha-flat-buttons.scss\";\n\n* {\n\tpadding: 0;\n\tmargin: 0;\n\tfont-w"
  },
  {
    "path": "cfg/waybar/scripts/get_weather.sh",
    "chars": 468,
    "preview": "#!/usr/bin/env bash\nfor i in {1..5}; do\n\ttext=$(curl -s \"de.wttr.in/Chemnitz?nonce=$RANDOM\\&format=1\")\n\n\tif [[ $? == 0 ]"
  },
  {
    "path": "installers/install",
    "chars": 8846,
    "preview": "#!/bin/bash\n\n# Check if the system is an Arch Linux-based distribution\nif [ -f /etc/os-release ]; then\n  source /etc/os-"
  },
  {
    "path": "installers/thinkfan",
    "chars": 1361,
    "preview": "#!/bin/bash\n\n# Hardware detect\nhardware_info=$(sudo lshw 2>/dev/null)\n\nif [[ $hardware_info == *\"Lenovo\"* ]]; then\n  ech"
  },
  {
    "path": "installers/zsh",
    "chars": 1025,
    "preview": "#!/bin/bash\n\necho \"Do you want to install ZSH and related extensions and configure Oh My Zsh? (y/n): \"\nread install_zsh\n"
  },
  {
    "path": "nixos/configs/home-configs/kitty.nix",
    "chars": 914,
    "preview": "{ ... }:\n\n{\n  programs.kitty = {\n    enable = true;\n    theme = \"Catppuccin-Mocha\";\n    settings = {\n      font_family ="
  },
  {
    "path": "nixos/configs/home-configs/styling.nix",
    "chars": 1009,
    "preview": "{ pkgs, ... }:\n\n{\n  imports = [\n    ../../pkgs\n  ];\n\n  home = {\n\n    # Cursor\n    pointerCursor = {\n      gtk.enable = t"
  },
  {
    "path": "nixos/configs/home-configs/waybar.nix",
    "chars": 153,
    "preview": "{ inputs, pkgs, ... }:\n\n{\n  programs = {\n    waybar = {\n      enable = true;\n      package = inputs.waybar.packages.${pk"
  },
  {
    "path": "nixos/configs/home-configs/zsh.nix",
    "chars": 1998,
    "preview": "{ pkgs, lib, config, ... }:\n\n{\n  programs.zsh = {\n    enable = true;\n    initExtraFirst =\n      #\"wal -R\" + \"\\n\" +\n     "
  },
  {
    "path": "nixos/configs/nixos-configs/bluetooth.nix",
    "chars": 346,
    "preview": "{ ... }:\n\n{\n  hardware = {\n    bluetooth.enable = true;\n    bluetooth.powerOnBoot = true;\n    bluetooth = {\n      settin"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/autopairs.nix",
    "chars": 129,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.nvim-autopairs = {\n    enable = true;\n    settings = {\n      checkTs = true;\n    }"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/bufferline.nix",
    "chars": 2191,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.bufferline = {\n    enable = true;\n    mode = \"buffers\";\n    diagnostics = \"nvim_ls"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/conform.nix",
    "chars": 573,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.conform-nvim = {\n    enable = true;\n    formattersByFt = {\n      \"*\" = [ \"codespel"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/dashboard.nix",
    "chars": 479,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.dashboard = {\n    enable = true;\n    header = [\n      \"███╗   ██╗ ███████╗ ██████╗"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/efmls.nix",
    "chars": 158,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.efmls-configs = {\n    enable = false;\n    setup.nix.formatter = \"nixfmt\";\n    setu"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/keymaps.nix",
    "chars": 931,
    "preview": "{ ... }:\n\n{\n  programs = {\n    nixvim = {\n      keymaps = [\n        {\n          key = \"<leader>lf\";\n          action = \""
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/lsp-format.nix",
    "chars": 140,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.lsp-format = {\n    enable = false; \n    lspServersToEnable = [\n      \"nixd\"\n      "
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/lsp-servers.nix",
    "chars": 631,
    "preview": "{ ... }:\n\n{\n  programs = {\n    nixvim = {\n      plugins = {\n        lsp.servers.nixd.enable = true;\n        lsp.servers."
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/lsp.nix",
    "chars": 136,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.lsp = {\n    enable = true;\n    #keymaps.lspBuf = {\n    #  \"<leader>fm\" = \"format\";"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/neo-tree.nix",
    "chars": 913,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.neo-tree = {\n    enable = true;\n    autoCleanAfterSessionRestore = true;\n    close"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/nvim-cmp.nix",
    "chars": 926,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins = {\n    cmp = {\n      enable = true;\n      extraOptions.sources =\n        [\n      "
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/nvim.nix",
    "chars": 2554,
    "preview": "{ pkgs, ... }:\n\n{\n  imports = [\n    ./keymaps.nix\n    ./nvim-cmp.nix\n    ./lsp.nix\n    ./bufferline.nix\n    ./telescope."
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/prettier.nix",
    "chars": 142,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.none-ls.sources.formatting.prettier = {\n    enable = true;\n    disableTsServerForm"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/telescope.nix",
    "chars": 639,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.telescope = {\n    enable = true;\n\n    enabledExtensions = [ \"ui-select\" ];\n    ext"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/treesitter.nix",
    "chars": 382,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins = {\n    cmp-treesitter.enable = true;\n    treesitter.enable = true;\n    treesitter"
  },
  {
    "path": "nixos/configs/nixos-configs/nixvim/whichkey.nix",
    "chars": 473,
    "preview": "{ ... }:\n\n{\n  programs.nixvim.plugins.which-key = {\n    enable = true;\n    icons = {\n      separator = \"\";\n      group "
  },
  {
    "path": "nixos/configs/nixos-configs/programs.nix",
    "chars": 525,
    "preview": "{ pkgs, inputs, ... }:\n\n{\n  programs = {\n    hyprland = {\n      enable = true;\n      package = inputs.hyprland.packages."
  },
  {
    "path": "nixos/configs/nixos-configs/services.nix",
    "chars": 1296,
    "preview": "{ pkgs, ... }:\n\n{\n  imports = [\n  ];\n\n  services = {\n    blueman.enable = true;\n    fwupd.enable = true;\n    tumbler.ena"
  },
  {
    "path": "nixos/configs/nixos-configs/tlp.nix",
    "chars": 497,
    "preview": "{ ... }:\n\n{\n  services = {\n    tlp.enable = true;\n    tlp.settings = {\n      PLATFORM_PROFILE_ON_BAT = \"low-power\";\n    "
  },
  {
    "path": "nixos/flake.nix",
    "chars": 2979,
    "preview": "{\n  description = \"Martin's Nix-Flakes Config\";\n\n  inputs = {\n    nixpkgs.url = \"nixpkgs/nixos-unstable\";\n\n    home-mana"
  },
  {
    "path": "nixos/global-dotfiles/gtklock/config.ini",
    "chars": 106,
    "preview": "[main]\nmodules=/home/martin/.dots/gtklock/userinfo-module.so\n\n[userinfo]\nimage-size=128\nunder-clock=true\n\n"
  },
  {
    "path": "nixos/global-dotfiles/gtklock/style.css",
    "chars": 556,
    "preview": "* {\n}\n\nwindow {\n    background-image: url(\"../backgrounds/last/image_blurred.png\");\n    background-size: cover;\n    back"
  },
  {
    "path": "nixos/global-dotfiles/swaylock/config",
    "chars": 1362,
    "preview": "#  ____                     _            _     \n# / ___|_      ____ _ _   _| | ___   ___| | __ \n# \\___ \\ \\ /\\ / / _` | |"
  },
  {
    "path": "nixos/hosts/desktop/configuration-desktop.nix",
    "chars": 685,
    "preview": "{ lib, ... }:\n\nlet\n  vars = import ../../variables.nix;\nin\n\n{\n  imports =\n    [\n      ./hardware-configuration-desktop.n"
  },
  {
    "path": "nixos/hosts/desktop/hardware-configuration-desktop.nix",
    "chars": 1509,
    "preview": "# Do not modify this file!  It was generated by ‘nixos-generate-config’\n# and may be overwritten by future invocations. "
  },
  {
    "path": "nixos/hosts/desktop/home-desktop.nix",
    "chars": 1024,
    "preview": "{ pkgs, ... }:\n\nlet\n  vars = import ../../variables.nix;\nin\n\n{\n  imports = [\n    ../../configs/home-configs/styling.nix\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/.eslintrc.yml",
    "chars": 1264,
    "preview": "env:\n  es2021: true\nextends: eslint:recommended\noverrides: []\nparserOptions:\n  ecmaVersion: latest\n  sourceType: 'module"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/.gitignore",
    "chars": 58,
    "preview": "node_modules\ntypes\npackage-lock.json\nweather_key\nsetup.sh\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/.stylelintrc.yml",
    "chars": 418,
    "preview": "extends: stylelint-config-standard-scss\nignoreFiles:\n  - \"**/*.js\"\n  - \"**/*.ts\"\nrules:\n  selector-type-no-unknown: null"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/config.js",
    "chars": 546,
    "preview": "import { readFile } from 'resource:///com/github/Aylur/ags/utils.js';\nimport App from 'resource:///com/github/Aylur/ags/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/about/about.js",
    "chars": 3107,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport * as Utils from 'resource:///com/github/Aylur/ags/util"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/applauncher/AppItem.js",
    "chars": 1366,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/applauncher/Applauncher.js",
    "chars": 2105,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/PanelButton.js",
    "chars": 989,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/TopBar.js",
    "chars": 3698,
    "preview": "import SystemTray from 'resource:///com/github/Aylur/ags/service/systemtray.js';\nimport Widget from 'resource:///com/git"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/BatteryBar.js",
    "chars": 2619,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Battery from 'resource:///com/github/Aylur/ags/s"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/ColorPicker.js",
    "chars": 902,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Colors from '../../services/colorpicker.js';\nimp"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/DateButton.js",
    "chars": 373,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Clock from '../../misc/Clock.js';\nimport PanelButton f"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/FocusedClient.js",
    "chars": 1472,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Hyprland from 'resource:///com/github/Aylur/ags/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/MediaIndicator.js",
    "chars": 2260,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Mpris from 'resource:///com/github/Aylur/ags/ser"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/NotificationIndicator.js",
    "chars": 1556,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Widget from 'resource:///com/github/Aylur/ags/widget.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/OverviewButton.js",
    "chars": 545,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport PanelButton from '../PanelButton.js';\nimport FontIcon "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/PowerMenu.js",
    "chars": 377,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/ScreenRecord.js",
    "chars": 765,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport PanelButton from '../PanelButton.js';\nimport Rec"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/SubMenu.js",
    "chars": 2096,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/SysTray.js",
    "chars": 1342,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport SystemTray from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/System.js",
    "chars": 1495,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport PanelButton from '../PanelButton.js';\nimport * a"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/SystemIndicators.js",
    "chars": 3822,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Widget from 'resource:///com/github/Aylur/ags/widget.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/Taskbar.js",
    "chars": 1227,
    "preview": "import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';\nimport Applications from 'resource:///com/g"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/bar/buttons/Workspaces.js",
    "chars": 1680,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Hyprland from 'resource:///com/github/Aylur/ags/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/dashboard/Dashboard.js",
    "chars": 640,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport DateColumn from './DateColumn.js';\nimport Notifi"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/dashboard/DateColumn.js",
    "chars": 855,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Clock from '../misc/Clock.js';\nimport * as vars "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/dashboard/NotificationColumn.js",
    "chars": 2266,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Notifications from 'resource:///com/github/Aylur"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/desktop/Desktop.js",
    "chars": 2024,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Clock from '../misc/Clock.js';\nimport DesktopMen"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/desktop/DesktopMenu.js",
    "chars": 1846,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/dock/Dock.js",
    "chars": 4285,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Hyprland from 'resource:///com/github/Aylur/ags/servic"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/dock/FloatingDock.js",
    "chars": 1577,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Hyprland from 'resource:///com/github/Aylur/ags/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/icons.js",
    "chars": 3401,
    "preview": "export default {\n    lock: 'system-lock-screen-symbolic',\n    fallback: {\n        executable: 'application-x-executable-"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/lockscreen/Lockscreen.js",
    "chars": 1751,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Avatar from '../misc/Avatar.js';\nimport Lockscre"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/lockscreen/auth.py",
    "chars": 119,
    "preview": "#! /usr/bin/env python\n\nimport pam\nimport sys\nimport getpass\n\nprint(pam.authenticate(getpass.getuser(), sys.argv[1]));\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/main.js",
    "chars": 1491,
    "preview": "import Applauncher from './applauncher/Applauncher.js';\nimport Dashboard from './dashboard/Dashboard.js';\nimport Desktop"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/Avatar.js",
    "chars": 588,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport options from '../options.js';\n\n/** @param {impor"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/BatteryIcon.js",
    "chars": 476,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Battery from 'resource:///com/github/Aylur/ags/s"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/Clock.js",
    "chars": 495,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport GLib from 'gi://GLib';\n\n/**\n * @param {import('t"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/FontIcon.js",
    "chars": 1215,
    "preview": "import Gtk from 'gi://Gtk';\nimport { createCtor } from 'resource:///com/github/Aylur/ags/widget.js';\nimport AgsLabel fro"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/HoverRevealer.js",
    "chars": 1866,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/IconBrowser.js",
    "chars": 1633,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport RegularWindow from './RegularWindow.js';\nimport "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/Notification.js",
    "chars": 4413,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/PopupWindow.js",
    "chars": 1816,
    "preview": "import AgsWindow from 'resource:///com/github/Aylur/ags/widgets/window.js';\nimport App from 'resource:///com/github/Aylu"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/Progress.js",
    "chars": 1567,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/RegularWindow.js",
    "chars": 560,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Gtk from 'gi://Gtk';\nimport AgsWidget from 'reso"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/misc/mpris.js",
    "chars": 7141,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/notifications/Notifications.js",
    "chars": 2200,
    "preview": "import Notifications from 'resource:///com/github/Aylur/ags/service/notifications.js';\nimport Widget from 'resource:///c"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/options.js",
    "chars": 9312,
    "preview": "/**\n * An object holding Options that are Variables with cached values.\n *\n * to update an option at runtime simply run\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/osd/OSD.js",
    "chars": 1916,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport * as Utils from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/overview/Client.js",
    "chars": 1618,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/overview/Overview.js",
    "chars": 1515,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/overview/Workspace.js",
    "chars": 1954,
    "preview": "import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js';\nimport Widget from 'resource:///com/github/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/powermenu/PowerMenu.js",
    "chars": 882,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport icons from '../icons.js';\nimport PowerMenu from "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/powermenu/ShadedPopup.js",
    "chars": 1191,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Widget from 'resource:///com/github/Aylur/ags/widget.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/powermenu/Verification.js",
    "chars": 1538,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/QuickSettings.js",
    "chars": 2009,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Header from './widgets/Header.js';\nimport PopupW"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/ToggleButton.js",
    "chars": 3998,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport App from 'resource:///com/github/Aylur/ags/app.j"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/AsusProfile.js",
    "chars": 1997,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport Widget from 'resource:///com/github/Aylur/ags"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Bluetooth.js",
    "chars": 2422,
    "preview": "import Bluetooth from 'resource:///com/github/Aylur/ags/service/bluetooth.js';\nimport Widget from 'resource:///com/githu"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Brightness.js",
    "chars": 667,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport icons from '../../icons.js';\nimport Brightness f"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/DND.js",
    "chars": 648,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Notifications from 'resource:///com/github/Aylur"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Header.js",
    "chars": 1712,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Battery from 'resource:///com/github/Aylur/ags/s"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Media.js",
    "chars": 2651,
    "preview": "import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';\nimport Widget from 'resource:///com/github/Aylur/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/MicMute.js",
    "chars": 647,
    "preview": "import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';\nimport Widget from 'resource:///com/github/Aylur/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Network.js",
    "chars": 2399,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Network from 'resource:///com/github/Aylur/ags/s"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Theme.js",
    "chars": 1765,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport { ArrowToggleButton, Menu, opened } from '../Tog"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/quicksettings/widgets/Volume.js",
    "chars": 4920,
    "preview": "import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';\nimport Widget from 'resource:///com/github/Aylur/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/screencorner/ScreenCorners.js",
    "chars": 2055,
    "preview": "import Widget from 'resource:///com/github/Aylur/ags/widget.js';\nimport Gtk from 'gi://Gtk';\nimport options from '../opt"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/asusctl.js",
    "chars": 1773,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport Service from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/brightness.js",
    "chars": 1752,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport Service from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/colorpicker.js",
    "chars": 1895,
    "preview": "import Notifications from 'resource:///com/github/Aylur/ags/service/notifications.js';\nimport { Variable } from 'resourc"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/lockscreen.js",
    "chars": 853,
    "preview": "import Service from 'resource:///com/github/Aylur/ags/service.js';\nimport * as Utils from 'resource:///com/github/Aylur/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/onScreenIndicator.js",
    "chars": 1526,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport Service from 'resource:///com/github/Aylur/ag"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/powermenu.js",
    "chars": 973,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Service from 'resource:///com/github/Aylur/ags/service"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/services/screenrecord.js",
    "chars": 3032,
    "preview": "import Service from 'resource:///com/github/Aylur/ags/service.js';\nimport * as Utils from 'resource:///com/github/Aylur/"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/SettingsDialog.js",
    "chars": 9487,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport App from 'resource:///com/github/Aylur/ags/ap"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/globals.js",
    "chars": 1287,
    "preview": "import Mpris from 'resource:///com/github/Aylur/ags/service/mpris.js';\n\nexport async function globals() {\n    try {\n    "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/hyprland.js",
    "chars": 2485,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport Hyprland from 'resource:///com/github/Aylur/ags/servic"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/option.js",
    "chars": 5172,
    "preview": "import { CACHE_DIR, readFile, writeFile } from 'resource:///com/github/Aylur/ags/utils.js';\nimport { exec } from 'resour"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/scss.js",
    "chars": 1948,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport * as Utils from 'resource:///com/github/Aylur/ags/util"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/setup.js",
    "chars": 3983,
    "preview": "import App from 'resource:///com/github/Aylur/ags/app.js';\nimport * as Utils from 'resource:///com/github/Aylur/ags/util"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/theme.js",
    "chars": 1603,
    "preview": "import options from '../options.js';\nimport themes from '../themes.js';\nimport { reloadScss } from './scss.js';\nimport {"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/settings/wallpaper.js",
    "chars": 649,
    "preview": "import options from '../options.js';\nimport { exec, execAsync } from 'resource:///com/github/Aylur/ags/utils.js';\nimport"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/themes.js",
    "chars": 8136,
    "preview": "/**\n * A Theme is a set of options that will be applied\n * ontop of the default values. see options.js for possible opti"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/utils.js",
    "chars": 2815,
    "preview": "import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';\nimport cairo from 'cairo';\nimport icons from './icon"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/js/variables.js",
    "chars": 1660,
    "preview": "import Variable from 'resource:///com/github/Aylur/ags/variable.js';\nimport GLib from 'gi://GLib';\nimport options from '"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/package.json",
    "chars": 1035,
    "preview": "{\n    \"name\": \"ags-dotfiles\",\n    \"version\": \"1.6.3\",\n    \"description\": \"An extensible GTK-Shell\",\n    \"main\": \"config."
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/prepare_background.sh",
    "chars": 149,
    "preview": "#!/usr/bin/env sh\n\nconvert -scale 1920x1080 -blur 0x10 ~/.config/backgrounds/last/image.png ~/.config/backgrounds/last/i"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/a11y-button.scss",
    "chars": 945,
    "preview": "@import './button';\n\n@mixin accs-button($flat: false, $reactive: true){\n    @include button($flat: true, $reactive: fals"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/button-workspaces.scss",
    "chars": 1504,
    "preview": "@mixin button-focus() {\n    box-shadow: inset 0 0 0 $border-width $accent;\n    background-color: $hover;\n    color: $hov"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/button.scss",
    "chars": 1490,
    "preview": "@mixin button-focus() {\n    box-shadow: inset 0 0 0 $border-width $accent;\n    background-color: $hover;\n    color: $hov"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/floating-widget.scss",
    "chars": 305,
    "preview": "@mixin floating-widget {\n    @if $drop-shadow {\n        box-shadow: 0 0 5px 0 $shadow;\n    }\n\n    margin: max($spacing, "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/hidden.scss",
    "chars": 356,
    "preview": "@mixin hidden {\n    background-color: transparent;\n    background-image: none;\n    border-color: transparent;\n    box-sh"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/menu.scss",
    "chars": 564,
    "preview": "window.popup {\n    > * {\n        border: none;\n        box-shadow: none;\n    }\n\n    menu {\n        border-radius: $popov"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/scrollable.scss",
    "chars": 638,
    "preview": "@mixin scrollable {\n    scrollbar, scrollbar * {\n        all: unset;\n    }\n\n    scrollbar.vertical {\n        transition:"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/slider.scss",
    "chars": 1742,
    "preview": "@import './unset';\n\n@mixin slider($width: 0.7em, $slider-width: .5em, $gradient: $active-gradient, $slider: true, $focus"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/spacing.scss",
    "chars": 828,
    "preview": "@mixin spacing($multiplier: 6, $spacing: $spacing, $rec: false) {\n    &.horizontal > * {\n        margin: 0 $spacing * $m"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/switch.scss",
    "chars": 235,
    "preview": "@import './button';\n\n@mixin switch {\n    @include button;\n\n    slider {\n        background-color: $accent-fg;\n        bo"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/text-border.scss",
    "chars": 527,
    "preview": "@mixin text-border{\n    text-shadow:\n        -1 * $border-width -1 * $border-width 0 $border-color,\n        $border-widt"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/tooltip.scss",
    "chars": 344,
    "preview": "tooltip {\n    * { all: unset; }\n\n    background-color: transparent;\n    border: none;\n\n    > * > *{\n        background-c"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/unset.scss",
    "chars": 93,
    "preview": "@mixin unset($rec: false){\n    all: unset;\n\n    @if $rec {\n        * { all: unset };\n    }\n}\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/common/widget.scss",
    "chars": 150,
    "preview": "@mixin widget{\n    transition: $transition;\n    border-radius: $radii;\n    color: $fg-color;\n    background-color: $widg"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/main.scss",
    "chars": 972,
    "preview": "@import '/tmp/ags/scss/options';\n@import './variables';\n\n// common\n@import './common/unset';\n@import './common/widget';\n"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/variables.scss",
    "chars": 820,
    "preview": "// variables are defined in options.js\n// these ones are derived from those\n\n$hover: transparentize($_widget-bg, ($widge"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/about.scss",
    "chars": 1178,
    "preview": "window#about {\n    @include unset;\n\n    .window-content {\n        @include floating-widget;\n        min-width: 300px;\n  "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/applauncher.scss",
    "chars": 1390,
    "preview": "window#applauncher .window-content {\n    @include floating_widget;\n\n    entry {\n        @include button;\n        padding"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/bar.scss",
    "chars": 8984,
    "preview": "$bar-spacing: $spacing / 2;\n$button-radius: if($bar-style == \"floating\", max(0, $radii - $bar-spacing), $radii);\n\n@mixin"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/dashboard.scss",
    "chars": 2535,
    "preview": "@mixin calendar {\n    @include widget;\n    padding: $padding*2 $padding*2 0;\n\n    calendar{\n        all: unset;\n\n       "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/desktop.scss",
    "chars": 1702,
    "preview": "window.corner .corner {\n    background-color: $bg-color;\n    border-radius: $radii * 2;\n    min-width: 2px;\n    min-heig"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/dock.scss",
    "chars": 1024,
    "preview": "@mixin dock($spacing: $spacing * 0.7) {\n    separator {\n        border-radius: $radii;\n        background-color: transpa"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/lockscreen.scss",
    "chars": 473,
    "preview": "window.lockscreen {\n    background-color: rgba(0, 0, 0, 0.25);\n\n    .avatar {\n        @include widget;\n        border-ra"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/media.scss",
    "chars": 2124,
    "preview": "@mixin player-color($color) {\n    button {\n        .shuffle.enabled {\n            color: $color;\n        }\n\n        .loo"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/notifications.scss",
    "chars": 1611,
    "preview": "@mixin notification() {\n    &.critical > box {\n        box-shadow: inset 0 0 .5em 0 $red;\n    }\n\n    &:hover button.clos"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/osd.scss",
    "chars": 395,
    "preview": "window.indicator .progress {\n    @include floating-widget;\n    padding: $padding / 2;\n    border-radius: if($radii == 0,"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/overview.scss",
    "chars": 581,
    "preview": "window#overview .window-content {\n    @include floating-widget;\n    @include spacing;\n\n    .workspace {\n        &.active"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/powermenu.scss",
    "chars": 1450,
    "preview": "window#powermenu, window#verification {\n    .shader {\n        background-color: rgba(0, 0, 0, 0.05);\n    }\n}\n\nwindow#ver"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/quicksettings.scss",
    "chars": 3372,
    "preview": "window#quicksettings .window-content {\n    @include floating-widget;\n    @include spacing;\n\n    .avatar {\n        @inclu"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/scss/widgets/settings.scss",
    "chars": 2886,
    "preview": "window#settings-dialog {\n    background-color: $bg-color;\n\n    .page {\n        @include scrollable;\n    }\n\n    .page-con"
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/ags/tsconfig.json",
    "chars": 450,
    "preview": "{\n    \"compilerOptions\": {\n        \"target\": \"ES2022\",\n        \"module\": \"ES2022\",\n        \"lib\": [\n            \"ES2022\""
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/hypr/Autostart.conf",
    "chars": 2252,
    "preview": "#################################################################################\n#   _   _                  _          "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/hypr/Decoration.conf",
    "chars": 3419,
    "preview": "#################################################################################\n#   _   _                  _          "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/hypr/KeyBinds.conf",
    "chars": 5307,
    "preview": "#################################################################################\n#   _   _                  _          "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/hypr/Misc.conf",
    "chars": 2224,
    "preview": "#################################################################################\n#   _   _                  _          "
  },
  {
    "path": "nixos/hosts/desktop/home-dotfiles-desktop/hypr/WindowRules.conf",
    "chars": 3802,
    "preview": "#################################################################################\n#   _   _                  _          "
  }
]

// ... and 379 more files (download for full content)

About this extraction

This page contains the full source code of the RoccoRakete/hyprland-dots GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 579 files (1.1 MB), approximately 320.9k tokens, and a symbol index with 422 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!