commit 96c6f790fc532c2a06e67055d17418f254abd1eb Author: Nick Date: Sat Mar 29 23:08:26 2025 -0500 feat: init diff --git a/.envrc b/.envrc new file mode 100755 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..c985cdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.direnv +.vscode +.pre-commit-config.yaml +result diff --git a/.sops.yaml b/.sops.yaml new file mode 100755 index 0000000..ed567de --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,7 @@ +keys: + - &user0 age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0 +creation_rules: + - path_regex: secrets/secrets.yaml$ + key_groups: + - age: + - *user0 diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100755 index 0000000..50ad50b --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,15 @@ +{ + "languages": { + "nix": { + "enable_language_server": true + } + }, + "formatter": { + "external": { + "command": "nixfmt", + "arguments": ["-"], + "standalone": true + } + }, + "format_on_save": "on" + } diff --git a/README.md b/README.md new file mode 100755 index 0000000..81b5dae --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# My NixOS Dotfiles + +This is my current multi-system NixOS configuration. + +## File Structure + +### `lib/` + +This defines two helper functions that make it easier to create configurations in the `flake`: + +1. `mkHome`: Creates a Home Manager configuration (for managing user-specific settings and packages) +2. `mkLinuxSystem`: Creates a NixOS system configuration (for managing system-wide settings) + +Both functions take some modules (configuration files) as input and set up the necessary environment with some default settings, like allowing unfree packages and passing through important variables (inputs, config, etc.). + +### `modules/config/` + +This defines a configuration schema or template for managing various aspects of the system: + +1. `people`: Creates records for user accounts, their SSH keys, emails, etc. +2. `services`: Creates records for various services with their domains, hostnames, SSL certificates, etc. +3. `machines`: Creates records for different devices with their mount points, IP addresses, and storage configurations +4. `aesthetics`: Creates records for visual appearance settings like fonts, colours, and cursor properties + +It's essentially creating a structured way to organize abstracted configuration data that is declared in multiple places throughout the system configuration. + +### `modules/home/` + +This defines home environment configurations for different users across different machines in a multi-user, multi-device setup. It's using NixOS's home-manager functionality to manage user-specific configurations. Essentially, this is a configuration file that determines which software and configurations each user gets on each machine, allowing for personalized but reproducible user environments across the system. + +### `modules/nixos/` + +This defines a set of NixOS modules that are used to configure different systems. Each system has its own set of module imports that define what features or services are enabled on that system, as well as some shared modules. The file uses a helper function `directoryImport` (imported from ../helpers.nix) to import all the module definitions from the current directory. This allows for modular system configuration where different machines can easily inherit different sets of features and services. These modules are used in the `flake`. + +### `parts/` + +This defines the development environment configuration for the project, which includes: + +1. `devshells`: Creates a default development shell with several development tools. +2. `pre-commit`: Creates pre-commit hooks that run before git commits. + +This setup ensures that anyone working on this project has access to the same development tools and follows the same code formatting and commit message standards. + +### `profiles/` + +This defines NIxOS user configurations and their respective homes. Each profile is designed to be imported into each system configuration via the `flake`, with different settings and tools based on the user's needs and preferences. It also uses `systemd.tmpfiles` to declare custom home folder structures. + +### `secrets/` + +This contains encrypted secrets and credentials using `sops-nix`. This is a security-sensitive file that should be handled carefully as it contains encrypted credentials for multiple services and systems. + +### `systems/` + +This defines the system configurations for different machines. Each machine has similar configuration structure but with specific customizations. The system naming schema follows a celestial convention, with desktops being named after planets, laptops after moons, and servers after dwarf planets. The `fileSystems` configurations include helper functions for easily configuring mounts for internal storage, Synology, and samba drives. + +### `templates/` + +This defines flake-based development environment templates for projects written in different programming languages, such as Elm and Haskell. This setup also makes use of `devshells` and is designed for developers who want to quickly bootstrap projects with a complete development environment using Nix for reproducibility and dependency management. + +### `flake.nix` + +This defines the core of the NixOS configuration using helper functions from `lib/`, which is organized as a flake-parts-based structure for better modularity: + +1. `inputs`: Declares all external dependencies including, such as core Nix components (`nixpkgs`, `flake-parts`, `systems`) and user environment components (`home-manager`, `sops-nix`). +2. `outputs`: Uses flake-parts to organize system configurations for multiple machines (`mars`, `venus`, `deimos`, `charon`, and `ceres`) and shared modules (`core`, `mantle`, `crust`) imported across systems. + +Each system imports specialized modules and user profiles based on its intended purpose and users, creating a flexible but consistent configuration framework across multiple machines. diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..ed5e69f --- /dev/null +++ b/flake.lock @@ -0,0 +1,1772 @@ +{ + "nodes": { + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1741282631, + "narHash": "sha256-jZE1CmQ53uN1Gq4FjaLFzSSjDqzL0pG4mdRbjBqSmho=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "81498562d0f53e613d30368bb5b076784fa86f80", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, + "buildbot-nix": { + "inputs": { + "flake-parts": "flake-parts_2", + "hercules-ci-effects": "hercules-ci-effects", + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1740474275, + "narHash": "sha256-E1ztdEjkfFOpm6Hu3ZjKbyJyE+vt78ZFmuLcGOxdEqc=", + "owner": "nix-community", + "repo": "buildbot-nix", + "rev": "e09b4c0588ce95fd72993adb5af198d5ba32e752", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "buildbot-nix", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1741481578, + "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", + "owner": "ipetkov", + "repo": "crane", + "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "dream2nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "purescript-overlay": "purescript-overlay", + "pyproject-nix": "pyproject-nix" + }, + "locked": { + "lastModified": 1735160684, + "narHash": "sha256-n5CwhmqKxifuD4Sq4WuRP/h5LO6f23cGnSAuJemnd/4=", + "owner": "nix-community", + "repo": "dream2nix", + "rev": "8ce6284ff58208ed8961681276f82c2f8f978ef4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "dream2nix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1717312683, + "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_7": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_8": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741352980, + "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "ngipkgs", + "buildbot-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1738453229, + "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": [ + "ngipkgs", + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_8" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, + "ghostty": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-unstable": "nixpkgs-unstable", + "zig": "zig", + "zig2nix": "zig2nix" + }, + "locked": { + "lastModified": 1741594465, + "narHash": "sha256-8a/QIgNwV8VGn8JIiACmVVEdue+U3juiMSAO1DEUTC4=", + "owner": "ghostty-org", + "repo": "ghostty", + "rev": "95daca616db5c24d7bb37fd5a3ac2f8762bb4ead", + "type": "github" + }, + "original": { + "owner": "ghostty-org", + "repo": "ghostty", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "helix": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1741815977, + "narHash": "sha256-zRPJMgKBvLBNVlPEMpkjEYtd2jKbHE6AlqT9bL5m/yQ=", + "owner": "helix-editor", + "repo": "helix", + "rev": "1bd7a3901cf73a9219470dafc65f3c7119e96cc0", + "type": "github" + }, + "original": { + "owner": "helix-editor", + "repo": "helix", + "type": "github" + } + }, + "hercules-ci-effects": { + "inputs": { + "flake-parts": [ + "ngipkgs", + "buildbot-nix", + "flake-parts" + ], + "nixpkgs": [ + "ngipkgs", + "buildbot-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1738237977, + "narHash": "sha256-oJN/yvRL7G0WlR/hTkQIjFbPkzCV+sFnNB/38Tb9RL4=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "6d1b6d5d59758b4f5f05745f774fc13cdc59da43", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741791118, + "narHash": "sha256-4Y427uj0eql4yRU5rely3EcOlB9q457UDbG9omPtXiA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "18780912345970e5b546b1b085385789b6935a83", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1738664950, + "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1739049071, + "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", + "hyprland-protocols": "hyprland-protocols", + "hyprland-qtutils": "hyprland-qtutils", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems_3", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1741788549, + "narHash": "sha256-Ot/AuQGw5KJwHjyTMHWmyaduNkcE58bOCmyitZ4VxEQ=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "e86d3a14e46d19d8a47f8ceb6410546715d45f10", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-portal": { + "inputs": { + "hyprland-protocols": "hyprland-protocols_2", + "hyprlang": "hyprlang_2", + "hyprutils": "hyprutils_2", + "hyprwayland-scanner": "hyprwayland-scanner_2", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_4" + }, + "locked": { + "lastModified": 1737634991, + "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1738422629, + "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprland-protocols_2": { + "inputs": { + "nixpkgs": [ + "hyprland-portal", + "nixpkgs" + ], + "systems": [ + "hyprland-portal", + "systems" + ] + }, + "locked": { + "lastModified": 1737556638, + "narHash": "sha256-laKgI3mr2qz6tas/q3tuGPxMdsGhBi/w+HO+hO2f1AY=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "4c75dd5c015c8a0e5a34c6d02a018a650f57feb5", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprland-qt-support": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprland-qtutils", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "hyprland-qtutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-qtutils", + "systems" + ] + }, + "locked": { + "lastModified": 1737634706, + "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "rev": "8810df502cdee755993cb803eba7b23f189db795", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "type": "github" + } + }, + "hyprland-qtutils": { + "inputs": { + "hyprland-qt-support": "hyprland-qt-support", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland-qtutils", + "hyprlang", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1739048983, + "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1741191527, + "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { + "inputs": { + "hyprutils": [ + "hyprland-portal", + "hyprutils" + ], + "nixpkgs": [ + "hyprland-portal", + "nixpkgs" + ], + "systems": [ + "hyprland-portal", + "systems" + ] + }, + "locked": { + "lastModified": 1737634606, + "narHash": "sha256-W7W87Cv6wqZ9PHegI6rH1+ve3zJPiyevMFf0/HwdbCQ=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "f41271d35cc0f370d300413d756c2677f386af9d", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1741123584, + "narHash": "sha256-mprerMlucqtirmbx6L3VoFnF2bGYc2WSUCj7tuc6xTQ=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "6b0154b183f9539097f13af9b5da78ca24da6df2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprutils_2": { + "inputs": { + "nixpkgs": [ + "hyprland-portal", + "nixpkgs" + ], + "systems": [ + "hyprland-portal", + "systems" + ] + }, + "locked": { + "lastModified": 1737632363, + "narHash": "sha256-X9I8POSlHxBVjD0fiX1O2j7U9Zi1+4rIkrsyHP0uHXY=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "006620eb29d54ea9086538891404c78563d1bae1", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1739870480, + "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "hyprwayland-scanner_2": { + "inputs": { + "nixpkgs": [ + "hyprland-portal", + "nixpkgs" + ], + "systems": [ + "hyprland-portal", + "systems" + ] + }, + "locked": { + "lastModified": 1735493474, + "narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1737234286, + "narHash": "sha256-CCKIAE84dzkrnlxJCKFyffAxP3yfsOAbdvydUGqq24g=", + "rev": "2837da71ec1588c1187d2e554719b15904a46c8b", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/2837da71ec1588c1187d2e554719b15904a46c8b.tar.gz?rev=2837da71ec1588c1187d2e554719b15904a46c8b" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/2.92.0.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils_3", + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1737237494, + "narHash": "sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7+b8=", + "rev": "b90bf629bbd835e61f1317b99e12f8c831017006", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/b90bf629bbd835e61f1317b99e12f8c831017006.tar.gz?rev=b90bf629bbd835e61f1317b99e12f8c831017006" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0.tar.gz" + } + }, + "ngipkgs": { + "inputs": { + "buildbot-nix": "buildbot-nix", + "dream2nix": "dream2nix", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable_2", + "pre-commit-hooks": "pre-commit-hooks_2", + "sops-nix": "sops-nix", + "systems": "systems_6", + "yants": "yants" + }, + "locked": { + "lastModified": 1741798076, + "narHash": "sha256-zQh8FysFtZ0QVGNxDkpO50be9N+8lvkUgwpkMua1kK8=", + "owner": "ngi-nix", + "repo": "ngipkgs", + "rev": "ed15bd021f36f9396e4d60664599de187f267b2f", + "type": "github" + }, + "original": { + "owner": "ngi-nix", + "repo": "ngipkgs", + "type": "github" + } + }, + "nixos-cosmic": { + "inputs": { + "flake-compat": "flake-compat_5", + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable_3" + }, + "locked": { + "lastModified": 1741691385, + "narHash": "sha256-Zjs3cBTVm4GLjjLgdi9XS/7nEdjjciKPj2EFOLOrNcE=", + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "rev": "5af413f4e97073783ed2dc11fd134ffc7771414d", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1741037377, + "narHash": "sha256-SvtvVKHaUX4Owb+PasySwZsoc5VUeTf1px34BByiOxw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "02032da4af073d0f6110540c8677f16d4be0117f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1738255539, + "narHash": "sha256-hP2eOqhIO/OILW+3moNWO4GtdJFYCqAe9yJZgvlCoDQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c3511a3b53b482aa7547c9d1626fd7310c1de1c5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "release-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1741048562, + "narHash": "sha256-W4YZ3fvWZiFYYyd900kh8P8wU6DHSiwaH0j4+fai1Sk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6af28b834daca767a7ef99f8a7defa957d0ade6f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { + "locked": { + "lastModified": 1741600792, + "narHash": "sha256-yfDy6chHcM7pXpMF4wycuuV+ILSTG486Z/vLx/Bdi6Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ebe2788eafd539477f83775ef93c3c7e244421d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1738136902, + "narHash": "sha256-pUvLijVGARw4u793APze3j6mU1Zwdtz7hGkGGkD87qw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "9a5db3142ce450045840cc8d832b13b8a2018e0c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1737003892, + "narHash": "sha256-RCzJE9wKByLCXmRBp+z8LK9EgdW+K+W/DXnJS4S/NVo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ae06b9c2d83cb5c8b12d7d0e32692e93d1379713", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1741827850, + "narHash": "sha256-wTZexZxoIi8pvEvYaE0xfDfvq1KQgzk0/BipXumYv8M=", + "owner": "nix-community", + "repo": "NUR", + "rev": "8a38b29f38afb374c33123fd0d0128cab36a1ea4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741379162, + "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat_6", + "gitignore": "gitignore_3", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741379162, + "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_4", + "gitignore": "gitignore_2", + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740915799, + "narHash": "sha256-JvQvtaphZNmeeV+IpHgNdiNePsIpHD5U/7QN5AeY44A=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "42b1ba089d2034d910566bf6b40830af6b8ec732", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "purescript-overlay": { + "inputs": { + "flake-compat": "flake-compat_3", + "nixpkgs": [ + "ngipkgs", + "dream2nix", + "nixpkgs" + ], + "slimlock": "slimlock" + }, + "locked": { + "lastModified": 1728546539, + "narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=", + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "type": "github" + } + }, + "pyproject-nix": { + "flake": false, + "locked": { + "lastModified": 1702448246, + "narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", + "owner": "davhau", + "repo": "pyproject.nix", + "rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", + "type": "github" + }, + "original": { + "owner": "davhau", + "ref": "dream2nix", + "repo": "pyproject.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "ghostty": "ghostty", + "helix": "helix", + "home-manager": "home-manager", + "hyprland": "hyprland", + "hyprland-portal": "hyprland-portal", + "lix-module": "lix-module", + "ngipkgs": "ngipkgs", + "nixos-cosmic": "nixos-cosmic", + "nixpkgs": "nixpkgs_3", + "nur": "nur", + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "sops-nix": "sops-nix_2", + "systems": "systems_7", + "waybar": "waybar", + "yazi": "yazi", + "zed-editor": "zed-editor" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "helix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740623427, + "narHash": "sha256-3SdPQrZoa4odlScFDUHd4CUPQ/R1gtH4Mq9u8CBiK8M=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "d342e8b5fd88421ff982f383c853f0fc78a847ab", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_2": { + "inputs": { + "nixpkgs": [ + "yazi", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1737080704, + "narHash": "sha256-n+J2h9GM9ZpFOQUmtZoCr1+DFF/iO5UlmLJeHIxbZGY=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f9953fe89f8b65401fc4d4a288940bc2cb072949", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_3": { + "inputs": { + "nixpkgs": [ + "zed-editor", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741573199, + "narHash": "sha256-A2sln1GdCf+uZ8yrERSCZUCqZ3JUlOv1WE2VFqqfaLQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "c777dc8a1e35407b0e80ec89817fe69970f4e81a", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "slimlock": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "dream2nix", + "purescript-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688756706, + "narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=", + "owner": "thomashoneyman", + "repo": "slimlock", + "rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "slimlock", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741043164, + "narHash": "sha256-9lfmSZLz6eq9Ygr6cCmvQiiBEaPb54pUBcjvbEMPORc=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "3f2412536eeece783f0d0ad3861417f347219f4d", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "sops-nix_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741644481, + "narHash": "sha256-E0RrMykMtEv15V3QhpsFutgoSKhL1JBhidn+iZajOyg=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "e653d71e82575a43fe9d228def8eddb73887b866", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_7": { + "locked": { + "lastModified": 1680978846, + "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", + "owner": "nix-systems", + "repo": "x86_64-linux", + "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "x86_64-linux", + "type": "github" + } + }, + "systems_8": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "buildbot-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1738953846, + "narHash": "sha256-yrK3Hjcr8F7qS/j2F+r7C7o010eVWWlm4T1PrbKBOxQ=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "4f09b473c936d41582dd744e19f34ec27592c5fd", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "waybar": { + "inputs": { + "flake-compat": "flake-compat_7", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740125099, + "narHash": "sha256-VpT3ePqmo75Ni6/02KFGV6ltnpiV70/ovG/p1f2wKkU=", + "owner": "Alexays", + "repo": "Waybar", + "rev": "8490a1d9b9a5c8770dd63e9faca0a5e01acedcae", + "type": "github" + }, + "original": { + "owner": "Alexays", + "repo": "Waybar", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1737634991, + "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + }, + "yants": { + "flake": false, + "locked": { + "lastModified": 1645270620, + "narHash": "sha256-wwkl3K200UbW9Z7BRlVH8HOEXCaVYP2MqZpsF9EhgZg=", + "ref": "refs/heads/canon", + "rev": "efeb6dc11eb1a1e88d41dc2093fc5aa31f7abd35", + "revCount": 15, + "type": "git", + "url": "https://code.tvl.fyi/depot.git:/nix/yants.git" + }, + "original": { + "type": "git", + "url": "https://code.tvl.fyi/depot.git:/nix/yants.git" + } + }, + "yazi": { + "inputs": { + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_4", + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1741760227, + "narHash": "sha256-5yZ3FQZFG0DSssr8NRa+JWGOojHLDFG2L+icNVnj+tw=", + "owner": "sxyazi", + "repo": "yazi", + "rev": "abfbd1cd9f0dd428d134f257ec89c25dac842b65", + "type": "github" + }, + "original": { + "owner": "sxyazi", + "repo": "yazi", + "type": "github" + } + }, + "zed-editor": { + "inputs": { + "crane": "crane", + "flake-compat": "flake-compat_8", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_3" + }, + "locked": { + "lastModified": 1741823056, + "narHash": "sha256-/NUosorAbmRSwufdk/cY+8h//43gTNxk2W9cSulJ3pc=", + "owner": "zed-industries", + "repo": "zed", + "rev": "0081b816fecf59ae7351a14eb7249e600389d508", + "type": "github" + }, + "original": { + "owner": "zed-industries", + "repo": "zed", + "type": "github" + } + }, + "zig": { + "inputs": { + "flake-compat": [ + "ghostty" + ], + "flake-utils": [ + "ghostty", + "flake-utils" + ], + "nixpkgs": [ + "ghostty", + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1738239110, + "narHash": "sha256-Y5i9mQ++dyIQr+zEPNy+KIbc5wjPmfllBrag3cHZgcE=", + "owner": "mitchellh", + "repo": "zig-overlay", + "rev": "1a8fb6f3a04724519436355564b95fce5e272504", + "type": "github" + }, + "original": { + "owner": "mitchellh", + "repo": "zig-overlay", + "type": "github" + } + }, + "zig2nix": { + "inputs": { + "flake-utils": [ + "ghostty", + "flake-utils" + ], + "nixpkgs": [ + "ghostty", + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1741368279, + "narHash": "sha256-WTaC8HmnIq6O71iK0g9as404BbmS+YyEP5qS85m2JBY=", + "owner": "jcollie", + "repo": "zig2nix", + "rev": "672971b5b6911de21446ad4fc76dee677922eda0", + "type": "github" + }, + "original": { + "owner": "jcollie", + "repo": "zig2nix", + "rev": "672971b5b6911de21446ad4fc76dee677922eda0", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100755 index 0000000..6b73805 --- /dev/null +++ b/flake.nix @@ -0,0 +1,153 @@ +{ + description = "Nick's Big Fat Flakey Sausage"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + lix-module = { + url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0.tar.gz"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + systems.url = "github:nix-systems/x86_64-linux"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + ngipkgs.url = "github:ngi-nix/ngipkgs"; + ghostty = { + url = "github:ghostty-org/ghostty"; + }; + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + pre-commit-hooks-nix = { + url = "github:cachix/pre-commit-hooks.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + yazi.url = "github:sxyazi/yazi"; + helix = { + url = "github:helix-editor/helix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; + hyprland = { + url = "github:hyprwm/Hyprland"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + hyprland-portal = { + url = "github:hyprwm/xdg-desktop-portal-hyprland"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + waybar = { + url = "github:Alexays/Waybar"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + zed-editor = { + url = "github:zed-industries/zed"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = + inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + imports = [ + inputs.pre-commit-hooks-nix.flakeModule + ./lib + ./modules + ./parts + ]; + + flake = + { config, ... }: + { + nixosConfigurations = { + mars = inputs.self.lib.mkLinuxSystem [ + ./systems/mars + ./profiles/user0 + ./profiles/user1 + ./profiles/user3 + config.nixosModules.mars + config.nixosModules.core + config.nixosModules.mantle + config.nixosModules.crust + inputs.nixos-cosmic.nixosModules.default + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.nur.modules.nixos.default + inputs.sops-nix.nixosModules.sops + ]; + venus = inputs.self.lib.mkLinuxSystem [ + ./systems/venus + ./profiles/user2 + config.nixosModules.venus + config.nixosModules.core + config.nixosModules.mantle + config.nixosModules.crust + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.sops-nix.nixosModules.sops + ]; + deimos = inputs.self.lib.mkLinuxSystem [ + ./systems/deimos + ./profiles/user0 + ./profiles/user1 + ./profiles/user2 + config.nixosModules.deimos + config.nixosModules.core + config.nixosModules.mantle + config.nixosModules.crust + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.nur.modules.nixos.default + inputs.sops-nix.nixosModules.sops + ]; + charon = inputs.self.lib.mkLinuxSystem [ + ./systems/charon + ./profiles/user1 + config.nixosModules.charon + config.nixosModules.core + config.nixosModules.crust + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + ]; + ceres = inputs.self.lib.mkLinuxSystem [ + ./systems/ceres + ./profiles/user0 + config.nixosModules.ceres + config.nixosModules.core + config.nixosModules.mantle + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.ngipkgs.nixosModules."services.peertube" + inputs.ngipkgs.nixosModules.default + inputs.sops-nix.nixosModules.sops + ]; + }; + templates = { + elm = { + path = ./templates/elm; + description = "Elm Environment"; + }; + haskell = { + path = ./templates/haskell; + description = "Haskell Environment"; + }; + typst = { + path = ./templates/typst; + description = "Typst Environment"; + }; + }; + }; + + systems = import inputs.systems; + }; +} diff --git a/lib/default.nix b/lib/default.nix new file mode 100755 index 0000000..4847c23 --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,44 @@ +{ + config, + inputs, + self, + ... +}: +{ + flake.lib = { + mkHome = + modules: system: + inputs.home-manager.lib.homeManagerConfiguration { + pkgs = import inputs.nixpkgs { + inherit + system + ; + config.allowUnfree = true; + }; + extraSpecialArgs = { + inherit + inputs + ; + }; + inherit + modules + ; + }; + mkLinuxSystem = + modules: + inputs.nixpkgs.lib.nixosSystem { + specialArgs = { + flake = { + inherit + config + inputs + self + ; + }; + }; + inherit + modules + ; + }; + }; +} diff --git a/modules/config/default.nix b/modules/config/default.nix new file mode 100755 index 0000000..6986997 --- /dev/null +++ b/modules/config/default.nix @@ -0,0 +1,178 @@ +{ lib, ... }: +let + stringType = lib.mkOption { + type = lib.types.str; + }; + intType = lib.mkOption { + type = lib.types.int; + }; + listType = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + attrList = lib.mkOption { + type = lib.types.attrsOf lib.types.str; + }; + + numOptions = 20; + + genOptions = + config: prefix: + builtins.listToAttrs ( + map (i: { + name = "${prefix}${toString i}"; + value = config; + }) (builtins.genList (i: i) numOptions) + ); + + mkOptionsFromDir = + path: + builtins.listToAttrs ( + map + (name: { + name = builtins.substring 0 (builtins.stringLength name - 4) name; + value = stringType; + }) + ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) ( + builtins.attrNames (builtins.readDir path) + ) + ) + ); + + userSubmodule = lib.types.submodule { + options = { + name = stringType; + label = stringType; + sshKeys = listType; + group = stringType; + aliases = genOptions stringType "name"; + email = genOptions stringType "address"; + paths = genOptions stringType "path"; + }; + }; + + instanceSubmodule = lib.types.submodule { + options = { + subdomain = stringType; + label = stringType; + name = stringType; + hostname = stringType; + domains = genOptions stringType "url"; + dns = genOptions stringType "provider"; + localhost = genOptions stringType "address"; + email = genOptions stringType "address"; + sops = genOptions stringType "path"; + paths = genOptions stringType "path"; + ports = genOptions intType "port"; + ssl = { + cert = stringType; + key = stringType; + }; + }; + }; + + deviceSubmodule = lib.types.submodule { + options = + let + mountConfig = { + mount = stringType; + device = stringType; + options = listType; + }; + in + { + boot = mountConfig; + ip = genOptions stringType "address"; + label = stringType; + name = stringType; + sync = genOptions stringType "address"; + } + // genOptions mountConfig "folder" + // genOptions mountConfig "samba" + // genOptions mountConfig "storage"; + }; + + themesSubmodule = lib.types.submodule { + options = { + currentTheme = genOptions stringType "theme"; + fonts = { + names = genOptions stringType "name"; + sizes = { + applications = genOptions intType "size"; + desktop = genOptions intType "size"; + popups = genOptions intType "size"; + terminal = genOptions intType "size"; + }; + }; + cursor = { + name = stringType; + size = intType; + }; + palettes = lib.mkOption { + type = lib.types.attrsOf ( + lib.types.submodule { + options = { + colours = attrList; + font = stringType; + }; + } + ); + }; + + }; + }; +in +{ + options = { + services = lib.mkOption { + type = lib.types.submodule { + options = mkOptionsFromDir ./instances/config // { + instances = lib.mkOption { + type = lib.types.attrsOf instanceSubmodule; + }; + }; + }; + }; + machines = lib.mkOption { + type = lib.types.submodule { + options = + let + devicesPath = ./devices/config; + printerPath = devicesPath + /printers; + in + mkOptionsFromDir devicesPath + // mkOptionsFromDir printerPath + // { + devices = lib.mkOption { + type = lib.types.attrsOf deviceSubmodule; + }; + }; + }; + }; + people = lib.mkOption { + type = lib.types.submodule { + options = mkOptionsFromDir ./users/config // { + users = lib.mkOption { + type = lib.types.attrsOf userSubmodule; + }; + }; + }; + }; + aesthetics = lib.mkOption { + type = lib.types.submodule { + options = mkOptionsFromDir ./themes // { + themes = lib.mkOption { + type = themesSubmodule; + }; + }; + }; + }; + }; + + config = { + people = import ./users; + services = import ./instances; + machines = import ./devices; + aesthetics = import ./themes; + }; +} diff --git a/modules/config/devices/config/ceres.nix b/modules/config/devices/config/ceres.nix new file mode 100755 index 0000000..78e4b1d --- /dev/null +++ b/modules/config/devices/config/ceres.nix @@ -0,0 +1,36 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + fileModeAndDirMode + ownerExclusiveReadWriteMask + readWritePermissions + sambaPermissions + userIdForUser0 + ceresIP + ; + ceresName = "ceres"; + ceresStorageDriveName = "NAS1"; +in +{ + label = "Ceres"; + name = ceresName; + sync = { + address0 = ""; + }; + ip = { + address0 = ceresIP; + }; + boot = { + options = ownerExclusiveReadWriteMask; + }; + storage0 = { + mount = "/mnt/media/${ceresStorageDriveName}"; + device = "/dev/disk/by-label/${ceresStorageDriveName}"; + options = readWritePermissions; + }; + samba0 = { + mount = "/mnt/media/${ceresName}"; + device = "//${ceresIP}"; + options = sambaPermissions ++ fileModeAndDirMode ++ userIdForUser0; + }; +} diff --git a/modules/config/devices/config/charon.nix b/modules/config/devices/config/charon.nix new file mode 100755 index 0000000..ce4fd6b --- /dev/null +++ b/modules/config/devices/config/charon.nix @@ -0,0 +1,20 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + ownerExclusiveReadWriteMask + charonIP + ; +in +{ + label = "Charon"; + name = "charon"; + sync = { + address0 = ""; + }; + ip = { + address0 = charonIP; + }; + boot = { + options = ownerExclusiveReadWriteMask; + }; +} diff --git a/modules/config/devices/config/deimos.nix b/modules/config/devices/config/deimos.nix new file mode 100755 index 0000000..06ee8d4 --- /dev/null +++ b/modules/config/devices/config/deimos.nix @@ -0,0 +1,20 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + ownerWriteOthersReadMask + deimosIP + ; +in +{ + label = "Deimos"; + name = "deimos"; + sync = { + address0 = deimosIP; + }; + ip = { + address0 = deimosIP; + }; + boot = { + options = ownerWriteOthersReadMask; + }; +} diff --git a/modules/config/devices/config/mars.nix b/modules/config/devices/config/mars.nix new file mode 100755 index 0000000..532b5f1 --- /dev/null +++ b/modules/config/devices/config/mars.nix @@ -0,0 +1,31 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + ownerWriteOthersReadMask + readWritePermissions + marsIP + ; +in +{ + label = "Mars"; + name = "mars"; + sync = { + address0 = ""; + }; + ip = { + address0 = marsIP; + }; + boot = { + options = ownerWriteOthersReadMask; + }; + storage0 = { + mount = "/mnt/media/games"; + device = "/dev/disk/by-label/Games"; + options = readWritePermissions; + }; + storage1 = { + mount = "/mnt/media/storage"; + device = "/dev/disk/by-label/Storage"; + options = readWritePermissions; + }; +} diff --git a/modules/config/devices/config/phone.nix b/modules/config/devices/config/phone.nix new file mode 100755 index 0000000..438398a --- /dev/null +++ b/modules/config/devices/config/phone.nix @@ -0,0 +1,18 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + phoneIP + dummy + ; +in +{ + name = "pixel"; + label = dummy; + sync = { + address0 = "RMDKNJY-BTX6FYF-G6SR332-WS6HARI-PF74SC6-VPBSGRQ-MKVQZEQ-KSIB6QV"; # User0 + address1 = "RUKSHY4-UCBYRVG-CVYFCMU-M3NLA3Q-JINRF5V-YPR5W32-TEIBJN6-DNQRCAR"; # User2 + }; + ip = { + address0 = phoneIP; + }; +} diff --git a/modules/config/devices/config/printers/printer0.nix b/modules/config/devices/config/printers/printer0.nix new file mode 100755 index 0000000..9404b98 --- /dev/null +++ b/modules/config/devices/config/printers/printer0.nix @@ -0,0 +1,13 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + dummy + ; +in +{ + name = dummy; + label = "Canon-TR7620a"; + ip = { + address0 = ""; + }; +} diff --git a/modules/config/devices/config/printers/printer1.nix b/modules/config/devices/config/printers/printer1.nix new file mode 100755 index 0000000..a5c5ff6 --- /dev/null +++ b/modules/config/devices/config/printers/printer1.nix @@ -0,0 +1,14 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + brotherIP + dummy + ; +in +{ + name = dummy; + label = "Brother-HL-2170W"; + ip = { + address0 = brotherIP; + }; +} diff --git a/modules/config/devices/config/synology.nix b/modules/config/devices/config/synology.nix new file mode 100755 index 0000000..b1f21b1 --- /dev/null +++ b/modules/config/devices/config/synology.nix @@ -0,0 +1,53 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + sambaPermissions + userIdForUser0 + userIdForUser1 + userIdForUser3 + synologyIP + ; + + user0 = "nick"; + user1 = "garnet"; + user3 = "streaming"; + user0Name = "Nick"; + user1Name = "Garnet"; + user3Name = "Streaming"; + synologyName = "synology"; +in +{ + label = "Synology"; + sync = { + address0 = "MWRGX2V-F5XKE5E-REP6ECT-OOPFBMF-22NHSMW-YFBU6MB-PLFUN63-R3MW2QX"; # User0 + address1 = ""; # User2 + }; + name = synologyName; + ip = { + address0 = synologyIP; + }; + # Nick Home Folder + folder0 = { + mount = "/mnt/media/${synologyName}/${user0}"; + device = "//${synologyIP}/homes/${user0Name}"; + options = sambaPermissions ++ userIdForUser0; + }; + # Garnet Home Folder + folder1 = { + mount = "/mnt/media/${synologyName}/${user1}"; + device = "//${synologyIP}/homes/${user1Name}"; + options = sambaPermissions ++ userIdForUser1; + }; + # Minecraft Worlds + folder2 = { + mount = "/home/${user1}/.local/share/PrismLauncher/instances/1.21/.minecraft/saves"; + device = "//${synologyIP}/homes/${user1Name}/Minecraft"; + options = sambaPermissions ++ userIdForUser1; + }; + # Streaming Folder + folder3 = { + mount = "/mnt/media/${synologyName}/${user3}"; + device = "//${synologyIP}/homes/${user0Name}"; + options = sambaPermissions ++ userIdForUser3; + }; +} diff --git a/modules/config/devices/config/venus.nix b/modules/config/devices/config/venus.nix new file mode 100755 index 0000000..756476b --- /dev/null +++ b/modules/config/devices/config/venus.nix @@ -0,0 +1,33 @@ +{ devicesFunctions }: +let + inherit (devicesFunctions) + readWritePermissions + venusIP + ; + drivePath = "/run/media"; + byLabel = "/dev/disk/by-label"; + +in +{ + label = "Venus"; + name = "venus"; + ip = { + address0 = venusIP; + }; + boot = { + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; + storage0 = { + mount = "${drivePath}/games"; + device = "${byLabel}/Games"; + options = readWritePermissions; + }; + storage1 = { + mount = "${drivePath}/entertainment"; + device = "${byLabel}/Entertainment"; + options = readWritePermissions; + }; +} diff --git a/modules/config/devices/default.nix b/modules/config/devices/default.nix new file mode 100755 index 0000000..b1bdf85 --- /dev/null +++ b/modules/config/devices/default.nix @@ -0,0 +1,87 @@ +let + configPath = ./config; + printerPath = configPath + /printers; + + devicesFunctions = { + ownerWriteOthersReadMask = [ + "fmask=0022" + "dmask=0022" + ]; + ownerExclusiveReadWriteMask = [ + "fmask=0077" + "dmask=0077" + ]; + readWritePermissions = [ + "rw" + ]; + sambaPermissions = [ + "rw" + "gid=100" + "vers=3.0" + "x-systemd.automount" + "x-systemd.requires=network-online.target" + ]; + fileModeAndDirMode = [ + "file_mode=0644" + "dir_mode=0755" + ]; + userIdForUser0 = [ + "uid=1000" + ]; + userIdForUser1 = [ + "uid=1001" + ]; + userIdForUser3 = [ + "uid=1002" + ]; + dummy = [ + ]; + ceresIP = "192.168.50.140"; + charonIP = "192.168.50.42"; + deimosIP = "192.168.50.142"; + marsIP = "192.168.50.196"; + phoneIP = "192.168.50.243"; + synologyIP = "192.168.50.209"; + venusIP = "192.168.58.104"; + brotherIP = "192.168.50.195"; + }; + + deviceswithFunctions = builtins.listToAttrs ( + map + (name: { + name = builtins.substring 0 (builtins.stringLength name - 4) name; + value = import (configPath + "/${name}") { + inherit + devicesFunctions + ; + }; + }) + ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) ( + builtins.attrNames (builtins.readDir configPath) + ) + ) + ); + + devicesPrinters = builtins.listToAttrs ( + map + (name: { + name = builtins.substring 0 (builtins.stringLength name - 4) name; + value = import (printerPath + "/${name}") { + inherit + devicesFunctions + ; + }; + }) + ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) ( + builtins.attrNames (builtins.readDir printerPath) + ) + ) + ); + + devices = deviceswithFunctions // devicesPrinters; +in +{ + devices = devices; +} diff --git a/modules/config/instances/config/acme.nix b/modules/config/instances/config/acme.nix new file mode 100755 index 0000000..9b4a432 --- /dev/null +++ b/modules/config/instances/config/acme.nix @@ -0,0 +1,20 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + sslPath + sopsPath + ; + + acmeLabel = "Acme"; + acmeName = "acme"; +in +{ + label = acmeLabel; + name = acmeName; + paths = { + path0 = sslPath; + }; + sops = { + path0 = "${sopsPath}/${acmeName}"; + }; +} diff --git a/modules/config/instances/config/audiobookshelf.nix b/modules/config/instances/config/audiobookshelf.nix new file mode 100755 index 0000000..0774a7f --- /dev/null +++ b/modules/config/instances/config/audiobookshelf.nix @@ -0,0 +1,30 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + audiobookshelfLabel + audiobookshelfName + domain0 + servicePath + sslPath + sopsPath + ; + audiobookshelfSubdomain = "books"; +in +{ + label = audiobookshelfLabel; + name = audiobookshelfName; + sops = { + path0 = "${sopsPath}/${audiobookshelfName}"; + }; + subdomain = audiobookshelfSubdomain; + paths = { + path0 = "${servicePath}/${audiobookshelfLabel}"; + }; + ports = { + port0 = 8000; + }; + ssl = { + cert = "${sslPath}/${audiobookshelfSubdomain}.${domain0}/fullchain.pem"; + key = "${sslPath}/${audiobookshelfSubdomain}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/caddy.nix b/modules/config/instances/config/caddy.nix new file mode 100755 index 0000000..b8e3362 --- /dev/null +++ b/modules/config/instances/config/caddy.nix @@ -0,0 +1,20 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + sopsPath + ; + + caddyLabel = "Caddy"; + caddyName = "caddy"; +in +{ + label = caddyLabel; + name = caddyName; + sops = { + path0 = "${sopsPath}/${caddyName}"; + }; + ports = { + port0 = 80; + port1 = 443; + }; +} diff --git a/modules/config/instances/config/forgejo.nix b/modules/config/instances/config/forgejo.nix new file mode 100755 index 0000000..79ff43e --- /dev/null +++ b/modules/config/instances/config/forgejo.nix @@ -0,0 +1,34 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain3 + servicePath + sslPath + sopsPath + ; + + forgejoLabel = "Forgejo"; + forgejoName = "forgejo"; + forgejoSubdomain = "source"; +in +{ + label = forgejoLabel; + name = forgejoName; + email = { + address0 = "noreply@${domain3}"; + }; + sops = { + path0 = "${sopsPath}/${forgejoName}"; + }; + subdomain = forgejoSubdomain; + paths = { + path0 = "${servicePath}/${forgejoLabel}"; + }; + ports = { + port0 = 3033; + }; + ssl = { + cert = "${sslPath}/${forgejoSubdomain}.${domain3}/fullchain.pem"; + key = "${sslPath}/${forgejoSubdomain}.${domain3}/key.pem"; + }; +} diff --git a/modules/config/instances/config/jellyfin.nix b/modules/config/instances/config/jellyfin.nix new file mode 100755 index 0000000..477a4a5 --- /dev/null +++ b/modules/config/instances/config/jellyfin.nix @@ -0,0 +1,31 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + jellyfinLabel + jellyfinName + servicePath + sslPath + sopsPath + ; +in +{ + label = jellyfinLabel; + name = jellyfinName; + sops = { + path0 = "${sopsPath}/${jellyfinName}"; + }; + subdomain = jellyfinName; + paths = { + path0 = "${servicePath}/${jellyfinLabel}"; + }; + ports = { + port0 = 5055; # Jellyseer + port1 = 8096; # Jellyfin HTTP + port2 = 8920; # Jellyfin HTTPS + }; + ssl = { + cert = "${sslPath}/${jellyfinName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${jellyfinName}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/mastodon.nix b/modules/config/instances/config/mastodon.nix new file mode 100755 index 0000000..b5afc59 --- /dev/null +++ b/modules/config/instances/config/mastodon.nix @@ -0,0 +1,33 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain3 + servicePath + sslPath + sopsPath + ; + + mastodonLabel = "Mastodon"; + mastodonName = "mastodon"; + mastodonSubdomain = "social"; +in +{ + label = mastodonLabel; + name = mastodonName; + email = { + address0 = "noreply@${domain3}"; + }; + subdomain = mastodonSubdomain; + sops = { + path0 = "${sopsPath}/${mastodonName}"; + }; + paths = { + path0 = "${servicePath}/${mastodonLabel}"; + path1 = ""; + path2 = ""; + }; + ssl = { + cert = "${sslPath}/${mastodonSubdomain}.${domain3}/fullchain.pem"; + key = "${sslPath}/${mastodonSubdomain}.${domain3}/key.pem"; + }; +} diff --git a/modules/config/instances/config/matrix.nix b/modules/config/instances/config/matrix.nix new file mode 100755 index 0000000..60584e1 --- /dev/null +++ b/modules/config/instances/config/matrix.nix @@ -0,0 +1,23 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + servicePath + sopsPath + ; + + matrixLabel = "Matrix"; + matrixName = "matrix"; +in +{ + label = matrixLabel; + name = matrixName; + sops = { + path0 = "${sopsPath}/${matrixName}"; + }; + subdomain = matrixName; + paths = { + path0 = "${servicePath}/${matrixLabel}"; + path1 = ""; + path2 = ""; + }; +} diff --git a/modules/config/instances/config/minecraft.nix b/modules/config/instances/config/minecraft.nix new file mode 100755 index 0000000..a31fda9 --- /dev/null +++ b/modules/config/instances/config/minecraft.nix @@ -0,0 +1,30 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + servicePath + sslPath + sopsPath + ; + + minecraftLabel = "Minecraft"; + minecraftName = "minecraft"; +in +{ + label = minecraftLabel; + name = minecraftName; + sops = { + path0 = "${sopsPath}/${minecraftName}"; + }; + subdomain = minecraftName; + paths = { + path0 = "${servicePath}/${minecraftLabel}"; + }; + ports = { + port0 = 43000; # Minecraft (Brix on Nix) + }; + ssl = { + cert = "${sslPath}/${minecraftName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${minecraftName}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/nextcloud.nix b/modules/config/instances/config/nextcloud.nix new file mode 100755 index 0000000..cedb045 --- /dev/null +++ b/modules/config/instances/config/nextcloud.nix @@ -0,0 +1,30 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain1 + servicePath + sslPath + sopsPath + ; + + nextcloudLabel = "Nextcloud"; + nextcloudName = "nextcloud"; +in +{ + label = nextcloudLabel; + name = nextcloudName; + sops = { + path0 = "${sopsPath}/${nextcloudName}"; + }; + subdomain = nextcloudName; + paths = { + path0 = "${servicePath}/${nextcloudLabel}"; + }; + ports = { + port0 = 8354; # Nextcloud + }; + ssl = { + cert = "${sslPath}/${nextcloudName}.${domain1}/fullchain.pem"; + key = "${sslPath}/${nextcloudName}.${domain1}/key.pem"; + }; +} diff --git a/modules/config/instances/config/ollama.nix b/modules/config/instances/config/ollama.nix new file mode 100755 index 0000000..0edf75d --- /dev/null +++ b/modules/config/instances/config/ollama.nix @@ -0,0 +1,32 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + servicePath + sslPath + sopsPath + ; + + ollamaLabel = "Ollama"; + ollamaName = "ollama"; +in +{ + label = ollamaLabel; + name = ollamaName; + sops = { + path0 = "${sopsPath}/${ollamaName}"; + }; + subdomain = ollamaName; + paths = { + path0 = "${servicePath}/${ollamaLabel}"; + path1 = "/mnt/media/storage/${ollamaName}"; + }; + ports = { + port0 = 8088; # Open-WebUI (Ollama Front End) + port1 = 11434; # Ollama API + }; + ssl = { + cert = "${sslPath}/${ollamaName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${ollamaName}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/owncast.nix b/modules/config/instances/config/owncast.nix new file mode 100755 index 0000000..3c9310a --- /dev/null +++ b/modules/config/instances/config/owncast.nix @@ -0,0 +1,33 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain1 + servicePath + sslPath + sopsPath + ; + + owncastLabel = "Owncast"; + owncastName = "owncast"; + owncastSubdomain = "stream"; +in +{ + label = owncastLabel; + name = owncastName; + sops = { + path0 = "${sopsPath}/${owncastName}"; + }; + subdomain = owncastSubdomain; + paths = { + path0 = "${servicePath}/${owncastLabel}"; + path1 = "/mnt/media/storage/${owncastName}"; + }; + ports = { + port0 = 9454; + port1 = 1935; + }; + ssl = { + cert = "${sslPath}/${owncastSubdomain}.${domain1}/fullchain.pem"; + key = "${sslPath}/${owncastSubdomain}.${domain1}/key.pem"; + }; +} diff --git a/modules/config/instances/config/peertube.nix b/modules/config/instances/config/peertube.nix new file mode 100755 index 0000000..ff2489c --- /dev/null +++ b/modules/config/instances/config/peertube.nix @@ -0,0 +1,38 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain3 + servicePath + sslPath + sopsPath + ; + + peertubeLabel = "PeerTube"; + peertubeName = "peertube"; + peertubeSubdomain = "video"; +in +{ + label = peertubeLabel; + name = peertubeName; + email = { + address0 = "noreply@${domain3}"; + }; + sops = { + path0 = "${sopsPath}/${peertubeName}"; + }; + subdomain = peertubeSubdomain; + paths = { + path0 = "${servicePath}/${peertubeLabel}"; + }; + ports = { + port0 = 9000; # HTTP + port1 = 1935; + port2 = 1936; + port3 = 5432; + port4 = 52800; + }; + ssl = { + cert = "${sslPath}/${peertubeSubdomain}.${domain3}/fullchain.pem"; + key = "${sslPath}/${peertubeSubdomain}.${domain3}/key.pem"; + }; +} diff --git a/modules/config/instances/config/postfix.nix b/modules/config/instances/config/postfix.nix new file mode 100755 index 0000000..399b7f4 --- /dev/null +++ b/modules/config/instances/config/postfix.nix @@ -0,0 +1,27 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain3 + servicePath + sslPath + sopsPath + ; + + postfixLabel = "Postfix"; + postfixName = "postfix"; +in +{ + label = postfixLabel; + name = postfixName; + sops = { + path0 = "${sopsPath}/${postfixName}"; + }; + subdomain = postfixName; + paths = { + path0 = "${servicePath}/${postfixLabel}"; + }; + ssl = { + cert = "${sslPath}/${domain3}/fullchain.pem"; + key = "${sslPath}/${domain3}/key.pem"; + }; +} diff --git a/modules/config/instances/config/postgresql.nix b/modules/config/instances/config/postgresql.nix new file mode 100755 index 0000000..b03a623 --- /dev/null +++ b/modules/config/instances/config/postgresql.nix @@ -0,0 +1,23 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + servicePath + sopsPath + ; + + postgresLabel = "PostgreSQL"; + postgresName = "postgres"; +in +{ + label = postgresLabel; + name = postgresName; + sops = { + path0 = "${sopsPath}/${postgresName}"; + }; + paths = { + path0 = "${servicePath}/${postgresLabel}"; + }; + ports = { + port0 = 5432; + }; +} diff --git a/modules/config/instances/config/samba.nix b/modules/config/instances/config/samba.nix new file mode 100755 index 0000000..f364d9c --- /dev/null +++ b/modules/config/instances/config/samba.nix @@ -0,0 +1,21 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + sopsPath + ; + + sambaLabel = "Samba"; + sambaName = "samba"; +in +{ + label = sambaLabel; + name = sambaName; + sops = { + path0 = "${sopsPath}/${sambaName}"; + }; + paths = { + }; + ports = { + port0 = 445; # Samba + }; +} diff --git a/modules/config/instances/config/searx.nix b/modules/config/instances/config/searx.nix new file mode 100755 index 0000000..3fa6244 --- /dev/null +++ b/modules/config/instances/config/searx.nix @@ -0,0 +1,34 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + servicePath + sslPath + sopsPath + ; + + searxLabel = "SearXNG"; + searxName = "searx"; + searxSubdomain = "search"; +in +{ + label = searxLabel; + name = searxName; + email = { + address0 = "noreply@${domain0}"; + }; + sops = { + path0 = "${sopsPath}/${searxName}"; + }; + subdomain = searxSubdomain; + paths = { + path0 = "${servicePath}/${searxLabel}"; + }; + ports = { + port0 = 8888; + }; + ssl = { + cert = "${sslPath}/${searxSubdomain}.${domain0}/fullchain.pem"; + key = "${sslPath}/${searxSubdomain}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/smtp.nix b/modules/config/instances/config/smtp.nix new file mode 100755 index 0000000..863b785 --- /dev/null +++ b/modules/config/instances/config/smtp.nix @@ -0,0 +1,13 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + dummy + ; +in +{ + hostname = "mail.smtp2go.com"; + name = dummy; + ports = { + port0 = 2525; + }; +} diff --git a/modules/config/instances/config/syncthing.nix b/modules/config/instances/config/syncthing.nix new file mode 100755 index 0000000..1ca9d66 --- /dev/null +++ b/modules/config/instances/config/syncthing.nix @@ -0,0 +1,28 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + sslPath + sopsPath + ; + + syncthingLabel = "Syncthing"; + syncthingName = "syncthing"; +in +{ + label = syncthingLabel; + name = syncthingName; + sops = { + path0 = "${sopsPath}/${syncthingName}"; + }; + subdomain = syncthingName; + ports = { + port0 = 8388; # Syncthing (WebUI) + port1 = 21027; # Syncthing (Discovery) + port2 = 22000; # Syncthing (Transfer) + }; + ssl = { + cert = "${sslPath}/${syncthingName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${syncthingName}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/synology.nix b/modules/config/instances/config/synology.nix new file mode 100755 index 0000000..48d4c11 --- /dev/null +++ b/modules/config/instances/config/synology.nix @@ -0,0 +1,19 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + sopsPath + ; + + synologyLabel = "Synology"; + synologyName = "synology"; +in +{ + label = synologyLabel; + name = synologyName; + sops = { + path0 = "${sopsPath}/${synologyName}"; + }; + ports = { + port0 = 5001; # Synology HTTPS + }; +} diff --git a/modules/config/instances/config/upRootNutrition.nix b/modules/config/instances/config/upRootNutrition.nix new file mode 100755 index 0000000..059f8f0 --- /dev/null +++ b/modules/config/instances/config/upRootNutrition.nix @@ -0,0 +1,33 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain3 + sslPath + sopsPath + ; + + upRootNutritionLabel = "upRootNutrition"; + upRootNutritionName = "uprootnutrition"; +in +{ + label = upRootNutritionLabel; + name = upRootNutritionName; + email = { + address0 = "nick@${domain3}"; + }; + sops = { + path0 = "${sopsPath}/${upRootNutritionName}"; + }; + paths = { + path0 = "/var/lib/website/dist"; + path1 = ""; + path2 = ""; + }; + ports = { + port0 = 1234; + }; + ssl = { + cert = "${sslPath}/${domain3}/fullchain.pem"; + key = "${sslPath}/${domain3}/key.pem"; + }; +} diff --git a/modules/config/instances/config/vaultwarden.nix b/modules/config/instances/config/vaultwarden.nix new file mode 100755 index 0000000..801f3d4 --- /dev/null +++ b/modules/config/instances/config/vaultwarden.nix @@ -0,0 +1,33 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + servicePath + sslPath + sopsPath + ; + + vaultwardenLabel = "Vaultwarden"; + vaultwardenName = "vaultwarden"; +in +{ + label = vaultwardenLabel; + name = vaultwardenName; + email = { + address0 = "noreply@${vaultwardenName}.${domain0}"; + }; + sops = { + path0 = "${sopsPath}/${vaultwardenName}"; + }; + subdomain = vaultwardenName; + paths = { + path0 = "${servicePath}/${vaultwardenLabel}/BackupDir"; + }; + ports = { + port0 = 8085; # Vaultwarden WebUI + }; + ssl = { + cert = "${sslPath}/${vaultwardenName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${vaultwardenName}.${domain0}/key.pem"; + }; +} diff --git a/modules/config/instances/config/web.nix b/modules/config/instances/config/web.nix new file mode 100755 index 0000000..369a7e1 --- /dev/null +++ b/modules/config/instances/config/web.nix @@ -0,0 +1,26 @@ +{ instancesFunctions }: +let + inherit (instancesFunctions) + domain0 + domain1 + domain2 + domain3 + ; +in +{ + domains = { + url0 = domain0; + url1 = domain1; + url2 = domain2; + url3 = domain3; + }; + dns = { + provider0 = "namecheap"; + }; + localhost = { + address0 = "127.0.0.1"; # Local + address1 = "0.0.0.0"; # All + address2 = "192.168.50.1"; # Router + address3 = "192.168.50.0"; # Router + }; +} diff --git a/modules/config/instances/default.nix b/modules/config/instances/default.nix new file mode 100755 index 0000000..bfd67c3 --- /dev/null +++ b/modules/config/instances/default.nix @@ -0,0 +1,39 @@ +let + configPath = ./config; + + instancesFunctions = { + jellyfinLabel = "Jellyfin"; + jellyfinName = "jellyfin"; + audiobookshelfLabel = "Audiobookshelf"; + audiobookshelfName = "audiobookshelf"; + domain0 = "cloudbert.fun"; + domain1 = "the-nutrivore.social"; + domain2 = "the-nutrivore.com"; + domain3 = "uprootnutrition.com"; + servicePath = "/mnt/media/NAS1"; + sopsPath = "/var/lib/secrets"; + sslPath = "/var/lib/acme"; + varLib = "/var/lib"; + dummy = ""; + }; + + instances = builtins.listToAttrs ( + map + (name: { + name = builtins.substring 0 (builtins.stringLength name - 4) name; + value = import (configPath + "/${name}") { + inherit + instancesFunctions + ; + }; + }) + ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) ( + builtins.attrNames (builtins.readDir configPath) + ) + ) + ); +in +{ + instances = instances; +} diff --git a/modules/config/themes/default.nix b/modules/config/themes/default.nix new file mode 100755 index 0000000..1df9fc5 --- /dev/null +++ b/modules/config/themes/default.nix @@ -0,0 +1,92 @@ +let + currentTheme0 = catppuccin-mocha; # User0 Theme + currentTheme1 = catppuccin-mocha; # User1 Theme + currentTheme2 = catppuccin-mocha; # User2 Theme + + brogrammer = "brogrammer"; + catppuccin-frappe = "catppuccin-frappe"; + catppuccin-latte = "catppuccin-latte"; + catppuccin-macchiato = "catppuccin-macchiato"; + catppuccin-mocha = "catppuccin-mocha"; + chalk = "chalk"; + deep-oceanic-next = "deep-oceanic-next"; + dracula = "dracula"; + espresso = "espresso"; + flat = "flat"; + framer = "framer"; + github = "github"; + hardcore = "hardcore"; + one-black = "one-black"; + one-dark = "one-dark"; + one-light = "one light"; + sparky = "sparky"; + +in +{ + themes = { + currentTheme = { + theme0 = currentTheme0; # User0 Theme + theme1 = currentTheme1; # User1 Theme + theme2 = currentTheme2; # User2 Theme + }; + cursor = { + name = ""; + size = 18; + }; + fonts = { + names = { + name0 = "MonaspiceNe Nerd Font"; # User0 Font + name1 = ""; # User1 Font + name2 = ""; # User2 Font + }; + sizes = { + applications = { + size0 = 14; # User0 Size + size1 = 14; # User1 Size + size2 = 14; # User2 Size + }; + desktop = { + size0 = 12; # User0 Size + size1 = 12; # User1 Size + size2 = 12; # User2 Size + }; + popups = { + size0 = 10; # User0 Size + size1 = 10; # User1 Size + size2 = 10; # User2 Size + }; + terminal = { + size0 = 10; # User0 Size + size1 = 10; # User1 Size + size2 = 10; # User2 Size + }; + }; + }; + palettes = + let + palettePath = ./palettes; + catppuccinPath = /catppuccin; + onePath = /one; + in + { + ${brogrammer} = import (palettePath + /brogrammer); + ${catppuccin-frappe} = import (palettePath + catppuccinPath + /frappe); + ${catppuccin-latte} = import (palettePath + catppuccinPath + /latte); + ${catppuccin-macchiato} = import (palettePath + catppuccinPath + /macchiato); + ${catppuccin-mocha} = import (palettePath + catppuccinPath + /mocha); + ${chalk} = import (palettePath + /chalk); + ${deep-oceanic-next} = import (palettePath + /deep-oceanic-next); + ${dracula} = import (palettePath + /dracula); + ${espresso} = import (palettePath + /espresso); + ${flat} = import (palettePath + /flat); + ${framer} = import (palettePath + /framer); + ${github} = import (palettePath + /github); + ${hardcore} = import (palettePath + /hardcore); + ${one-black} = import (palettePath + onePath + /black); + ${one-dark} = import (palettePath + onePath + /dark); + ${one-light} = import (palettePath + onePath + /light); + ${sparky} = import (palettePath + /sparky); + + }; + }; +} diff --git a/modules/config/themes/palettes/brogrammer/default.nix b/modules/config/themes/palettes/brogrammer/default.nix new file mode 100755 index 0000000..db55050 --- /dev/null +++ b/modules/config/themes/palettes/brogrammer/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "131313"; + base01 = "1f1f1f"; + base02 = "2a3141"; + base03 = "343d50"; + base04 = "d6dae4"; + base05 = "c1c8d7"; + base06 = "e3e6ed"; + base07 = "ffffff"; + base08 = "f71118"; + base09 = "ecb90f"; + base0A = "0f80d5"; + base0B = "2cc55d"; + base0C = "0f80d5"; + base0D = "2a84d2"; + base0E = "4e59b7"; + base0F = "7b080c"; + base10 = "0a0a0a"; + base11 = "020202"; + base12 = "de342e"; + base13 = "f2bd09"; + base14 = "1dd260"; + base15 = "289af0"; + base16 = "509bdc"; + base17 = "524fb9"; + }; +} diff --git a/modules/config/themes/palettes/catppuccin/frappe/default.nix b/modules/config/themes/palettes/catppuccin/frappe/default.nix new file mode 100755 index 0000000..596230a --- /dev/null +++ b/modules/config/themes/palettes/catppuccin/frappe/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "303446"; # base + base01 = "292c3c"; # mantle + base02 = "414559"; # surface0 + base03 = "51576d"; # surface1 + base04 = "626880"; # surface2 + base05 = "c6d0f5"; # text + base06 = "f2d5cf"; # rosewater label + base07 = "babbf1"; # lavender + base08 = "e78284"; # red + base09 = "ef9f76"; # peach + base0A = "e5c890"; # yellow + base0B = "a6d189"; # green + base0C = "81c8be"; # teal character + base0D = "8caaee"; # blue function + base0E = "ca9ee6"; # mauve + base0F = "eebebe"; # flamingo + base10 = "292c3c"; # mantle - darker background + base11 = "232634"; # crust - darkest background + base12 = "ea999c"; # maroon - bright red parameter + base13 = "f2d5cf"; # rosewater - bright yellow + base14 = "a6d189"; # green - bright green + base15 = "99d1db"; # sky - bright cyan operator + base16 = "85c1dc"; # sapphire - bright blue constructor + base17 = "f4b8e4"; # pink - bright purple + }; +} diff --git a/modules/config/themes/palettes/catppuccin/latte/default.nix b/modules/config/themes/palettes/catppuccin/latte/default.nix new file mode 100755 index 0000000..ed5c979 --- /dev/null +++ b/modules/config/themes/palettes/catppuccin/latte/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "eff1f5"; # base + base01 = "e6e9ef"; # mantle + base02 = "ccd0da"; # surface0 + base03 = "bcc0cc"; # surface1 + base04 = "acb0be"; # surface2 + base05 = "4c4f69"; # text + base06 = "dc8a78"; # rosewater + base07 = "7287fd"; # lavender + base08 = "d20f39"; # red + base09 = "fe640b"; # peach + base0A = "df8e1d"; # yellow + base0B = "40a02b"; # green + base0C = "179299"; # teal + base0D = "1e66f5"; # blue + base0E = "8839ef"; # mauve + base0F = "dd7878"; # flamingo + base10 = "e6e9ef"; # mantle - darker background + base11 = "dce0e8"; # crust - darkest background + base12 = "e64553"; # maroon - bright red + base13 = "dc8a78"; # rosewater - bright yellow + base14 = "40a02b"; # green - bright green + base15 = "04a5e5"; # sky - bright cyan + base16 = "209fb5"; # sapphire - bright blue + base17 = "ea76cb"; # pink - bright purple + }; +} diff --git a/modules/config/themes/palettes/catppuccin/macchiato/default.nix b/modules/config/themes/palettes/catppuccin/macchiato/default.nix new file mode 100755 index 0000000..22513a4 --- /dev/null +++ b/modules/config/themes/palettes/catppuccin/macchiato/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "24273a"; # base + base01 = "1e2030"; # mantle + base02 = "363a4f"; # surface0 + base03 = "494d64"; # surface1 + base04 = "5b6078"; # surface2 + base05 = "cad3f5"; # text + base06 = "f4dbd6"; # rosewater + base07 = "b7bdf8"; # lavender + base08 = "ed8796"; # red + base09 = "f5a97f"; # peach + base0A = "eed49f"; # yellow + base0B = "a6da95"; # green + base0C = "8bd5ca"; # teal + base0D = "8aadf4"; # blue + base0E = "c6a0f6"; # mauve + base0F = "f0c6c6"; # flamingo + base10 = "1e2030"; # mantle - darker background + base11 = "181926"; # crust - darkest background + base12 = "ee99a0"; # maroon - bright red + base13 = "f4dbd6"; # rosewater - bright yellow + base14 = "a6da95"; # green - bright green + base15 = "91d7e3"; # sky - bright cyan + base16 = "7dc4e4"; # sapphire - bright blue + base17 = "f5bde6"; # pink - bright purple + }; +} diff --git a/modules/config/themes/palettes/catppuccin/mocha/default.nix b/modules/config/themes/palettes/catppuccin/mocha/default.nix new file mode 100755 index 0000000..3f0b04d --- /dev/null +++ b/modules/config/themes/palettes/catppuccin/mocha/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "1e1e2e"; # base + base01 = "181825"; # mantle + base02 = "313244"; # surface0 + base03 = "45475a"; # surface1 + base04 = "585b70"; # surface2 + base05 = "cdd6f4"; # text + base06 = "f5e0dc"; # rosewater + base07 = "b4befe"; # lavender + base08 = "f38ba8"; # red + base09 = "fab387"; # peach + base0A = "f9e2af"; # yellow + base0B = "a6e3a1"; # green + base0C = "94e2d5"; # teal + base0D = "89b4fa"; # blue + base0E = "cba6f7"; # mauve + base0F = "f2cdcd"; # flamingo + base10 = "181825"; # mantle - darker background + base11 = "11111b"; # crust - darkest background + base12 = "eba0ac"; # maroon - bright red + base13 = "f5e0dc"; # rosewater - bright yellow + base14 = "a6e3a1"; # green - bright green + base15 = "89dceb"; # sky - bright cyan + base16 = "74c7ec"; # sapphire - bright blue + base17 = "f5c2e7"; # pink - bright purple + }; +} diff --git a/modules/config/themes/palettes/chalk/default.nix b/modules/config/themes/palettes/chalk/default.nix new file mode 100755 index 0000000..124f2ca --- /dev/null +++ b/modules/config/themes/palettes/chalk/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "151515"; + base01 = "202020"; + base02 = "303030"; + base03 = "505050"; + base04 = "b0b0b0"; + base05 = "d0d0d0"; + base06 = "e0e0e0"; + base07 = "f5f5f5"; + base08 = "fa859c"; + base09 = "ea9971"; + base0A = "ddb26f"; + base0B = "a1bb54"; + base0C = "10bcad"; + base0D = "5ab9ed"; + base0E = "db8fea"; + base0F = "deaf8f"; + base10 = "0b0b0b"; + base11 = "060606"; + base12 = "fb9fb1"; + base13 = "eda987"; + base14 = "acc267"; + base15 = "12cfc0"; + base16 = "6fc2ef"; + base17 = "e1a3ee"; + }; +} diff --git a/modules/config/themes/palettes/deep-oceanic-next/default.nix b/modules/config/themes/palettes/deep-oceanic-next/default.nix new file mode 100755 index 0000000..b392d7f --- /dev/null +++ b/modules/config/themes/palettes/deep-oceanic-next/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "001c1f"; + base01 = "002931"; + base02 = "003640"; + base03 = "004852"; + base04 = "0093a3"; + base05 = "d4e1e8"; + base06 = "e0e9ef"; + base07 = "f2f7f9"; + base08 = "d3464d"; + base09 = "e37552"; + base0A = "f3b863"; + base0B = "63b784"; + base0C = "4fb7ae"; + base0D = "568ccf"; + base0E = "8b66d6"; + base0F = "d0658e"; + base10 = "1f2628"; + base11 = "2a2f30"; + base12 = "ff6670"; + base13 = "ffe08a"; + base14 = "72e1a6"; + base15 = "4de3e3"; + base16 = "5caeff"; + base17 = "b788ff"; + }; +} diff --git a/modules/config/themes/palettes/dracula/default.nix b/modules/config/themes/palettes/dracula/default.nix new file mode 100755 index 0000000..10ead0b --- /dev/null +++ b/modules/config/themes/palettes/dracula/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "282a36"; + base01 = "363447"; + base02 = "44475a"; + base03 = "6272a4"; + base04 = "9ea8c7"; + base05 = "f8f8f2"; + base06 = "f0f1f4"; + base07 = "ffffff"; + base08 = "ff5555"; + base09 = "ffb86c"; + base0A = "f1fa8c"; + base0B = "50fa7b"; + base0C = "8be9fd"; + base0D = "80bfff"; + base0E = "ff79c6"; + base0F = "bd93f9"; + base10 = "1e2029"; + base11 = "16171d"; + base12 = "f28c8c"; + base13 = "eef5a3"; + base14 = "a3f5b8"; + base15 = "baedf7"; + base16 = "a3ccf5"; + base17 = "f5a3d2"; + }; +} diff --git a/modules/config/themes/palettes/espresso/default.nix b/modules/config/themes/palettes/espresso/default.nix new file mode 100755 index 0000000..62279d6 --- /dev/null +++ b/modules/config/themes/palettes/espresso/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "262626"; + base01 = "343434"; + base02 = "535353"; + base03 = "797979"; + base04 = "a0a09f"; + base05 = "c7c7c5"; + base06 = "eeeeec"; + base07 = "ffffff"; + base08 = "d25151"; + base09 = "ffc66d"; + base0A = "8ab7d9"; + base0B = "a5c261"; + base0C = "bed6ff"; + base0D = "6c99bb"; + base0E = "d197d9"; + base0F = "692828"; + base10 = "373737"; + base11 = "1b1b1b"; + base12 = "f00c0c"; + base13 = "e1e38b"; + base14 = "c2e075"; + base15 = "dcf3ff"; + base16 = "8ab7d9"; + base17 = "efb5f7"; + }; +} diff --git a/modules/config/themes/palettes/flat/default.nix b/modules/config/themes/palettes/flat/default.nix new file mode 100755 index 0000000..57ca250 --- /dev/null +++ b/modules/config/themes/palettes/flat/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "082845"; + base01 = "1d2845"; + base02 = "2e2e45"; + base03 = "444e5b"; + base04 = "68717b"; + base05 = "8c939a"; + base06 = "b0b6ba"; + base07 = "e7eced"; + base08 = "a82320"; + base09 = "e58d11"; + base0A = "3c7dd2"; + base0B = "2d9440"; + base0C = "2c9370"; + base0D = "3167ac"; + base0E = "781aa0"; + base0F = "541110"; + base10 = "002240"; + base11 = "001629"; + base12 = "d4312e"; + base13 = "e5be0c"; + base14 = "32a548"; + base15 = "35b387"; + base16 = "3c7dd2"; + base17 = "8230a7"; + }; +} diff --git a/modules/config/themes/palettes/framer/default.nix b/modules/config/themes/palettes/framer/default.nix new file mode 100755 index 0000000..ddd3d79 --- /dev/null +++ b/modules/config/themes/palettes/framer/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "111111"; + base01 = "141414"; + base02 = "414141"; + base03 = "636363"; + base04 = "868686"; + base05 = "a9a9a9"; + base06 = "cccccc"; + base07 = "ffffff"; + base08 = "ff5555"; + base09 = "ffcc33"; + base0A = "33bbff"; + base0B = "98ec65"; + base0C = "88ddff"; + base0D = "00aaff"; + base0E = "aa88ff"; + base0F = "7f2a2a"; + base10 = "2b2b2b"; + base11 = "151515"; + base12 = "ff8888"; + base13 = "ffd966"; + base14 = "b6f292"; + base15 = "bbecff"; + base16 = "33bbff"; + base17 = "cebbff"; + }; +} diff --git a/modules/config/themes/palettes/github/default.nix b/modules/config/themes/palettes/github/default.nix new file mode 100755 index 0000000..422b1cb --- /dev/null +++ b/modules/config/themes/palettes/github/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "f4f4f4"; + base01 = "3e3e3e"; + base02 = "666666"; + base03 = "8c8c8c"; + base04 = "b2b2b2"; + base05 = "d8d8d8"; + base06 = "ffffff"; + base07 = "ffffff"; + base08 = "970b16"; + base09 = "f8eec7"; + base0A = "2e6cba"; + base0B = "07962a"; + base0C = "89d1ec"; + base0D = "003e8a"; + base0E = "e94691"; + base0F = "4b050b"; + base10 = "444444"; + base11 = "222222"; + base12 = "de0000"; + base13 = "f1d007"; + base14 = "87d5a2"; + base15 = "1cfafe"; + base16 = "2e6cba"; + base17 = "ffa29f"; + }; +} diff --git a/modules/config/themes/palettes/hardcore/default.nix b/modules/config/themes/palettes/hardcore/default.nix new file mode 100755 index 0000000..de2486c --- /dev/null +++ b/modules/config/themes/palettes/hardcore/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "111111"; + base01 = "141414"; + base02 = "414141"; + base03 = "636363"; + base04 = "868686"; + base05 = "a9a9a9"; + base06 = "cccccc"; + base07 = "ffffff"; + base08 = "ff5555"; + base09 = "ffcc33"; + base0A = "33bbff"; + base0B = "98ec65"; + base0C = "88ddff"; + base0D = "00aaff"; + base0E = "aa88ff"; + base0F = "7f2a2a"; + base10 = "0a0a0a"; + base11 = "060606"; + base12 = "ff8888"; + base13 = "ffd966"; + base14 = "b6f292"; + base15 = "bbecff"; + base16 = "33bbff"; + base17 = "cebbff"; + }; +} diff --git a/modules/config/themes/palettes/one/black/default.nix b/modules/config/themes/palettes/one/black/default.nix new file mode 100755 index 0000000..61c9801 --- /dev/null +++ b/modules/config/themes/palettes/one/black/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "000000"; + base01 = "000000"; + base02 = "4f5666"; + base03 = "545862"; + base04 = "9196a1"; + base05 = "abb2bf"; + base06 = "e6e6e6"; + base07 = "ffffff"; + base08 = "e05561"; + base09 = "d18f52"; + base0A = "e6b965"; + base0B = "8cc265"; + base0C = "42b3c2"; + base0D = "4aa5f0"; + base0E = "c162de"; + base0F = "bf4034"; + base10 = "000000"; + base11 = "000000"; + base12 = "ff616e"; + base13 = "f0a45d"; + base14 = "a5e075"; + base15 = "4cd1e0"; + base16 = "4dc4ff"; + base17 = "de73ff"; + }; +} diff --git a/modules/config/themes/palettes/one/dark/default.nix b/modules/config/themes/palettes/one/dark/default.nix new file mode 100755 index 0000000..6665b22 --- /dev/null +++ b/modules/config/themes/palettes/one/dark/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "282c34"; + base01 = "3f4451"; + base02 = "4f5666"; + base03 = "545862"; + base04 = "9196a1"; + base05 = "abb2bf"; + base06 = "e6e6e6"; + base07 = "ffffff"; + base08 = "e05561"; + base09 = "d18f52"; + base0A = "e6b965"; + base0B = "8cc265"; + base0C = "42b3c2"; + base0D = "4aa5f0"; + base0E = "c162de"; + base0F = "bf4034"; + base10 = "21252b"; + base11 = "181a1f"; + base12 = "ff616e"; + base13 = "f0a45d"; + base14 = "a5e075"; + base15 = "4cd1e0"; + base16 = "4dc4ff"; + base17 = "de73ff"; + }; +} diff --git a/modules/config/themes/palettes/one/light/default.nix b/modules/config/themes/palettes/one/light/default.nix new file mode 100755 index 0000000..8c2230a --- /dev/null +++ b/modules/config/themes/palettes/one/light/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "e7e7e9"; + base01 = "dfdfe1"; + base02 = "cacace"; + base03 = "a0a1a7"; + base04 = "696c77"; + base05 = "383a42"; + base06 = "202227"; + base07 = "090a0b"; + base08 = "ca1243"; + base09 = "c18401"; + base0A = "febb2a"; + base0B = "50a14f"; + base0C = "0184bc"; + base0D = "4078f2"; + base0E = "a626a4"; + base0F = "986801"; + base10 = "f0f0f1"; + base11 = "fafafa"; + base12 = "ec2258"; + base13 = "f4a701"; + base14 = "6db76c"; + base15 = "01a7ef"; + base16 = "709af5"; + base17 = "d02fcd"; + }; +} diff --git a/modules/config/themes/palettes/sparky/default.nix b/modules/config/themes/palettes/sparky/default.nix new file mode 100755 index 0000000..d89284d --- /dev/null +++ b/modules/config/themes/palettes/sparky/default.nix @@ -0,0 +1,29 @@ +{ + font = ""; + colours = { + base00 = "072B31"; + base01 = "00313C"; + base02 = "003C46"; + base03 = "003B49"; + base04 = "00778B"; + base05 = "F4F5F0"; + base06 = "F5F5F1"; + base07 = "FFFFFF"; + base08 = "FF585D"; + base09 = "FF8F1C"; + base0A = "FBDD40"; + base0B = "78D64B"; + base0C = "2DCCD3"; + base0D = "4698CB"; + base0E = "D59ED7"; + base0F = "9B704D"; + base10 = "4B4F54"; + base11 = "212322"; + base12 = "FF7276"; + base13 = "F6EB61"; + base14 = "8EDD65"; + base15 = "00C1D5"; + base16 = "69B3E7"; + base17 = "F99FC9"; + }; +} diff --git a/modules/config/users/config/user0.nix b/modules/config/users/config/user0.nix new file mode 100755 index 0000000..e68fd70 --- /dev/null +++ b/modules/config/users/config/user0.nix @@ -0,0 +1,27 @@ +{ user0 }: +let + inherit + user0 + ; +in +{ + name = "Nick"; + aliases = { + name0 = "BRBWaffles"; + name1 = "brbwaffles"; + name2 = "Nutrivore"; + name3 = "nutrivore"; + name4 = "upRootNutrition"; + }; + email = { + address0 = "nickjhiebert@proton.me"; + address1 = "thenutrivore@proton.me"; + address2 = "nick@uprootnutrition.com"; + }; + paths = { + path0 = "/home/${user0}/Files/Projects"; # Git path + }; + sshKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop" + ]; +} diff --git a/modules/config/users/config/user1.nix b/modules/config/users/config/user1.nix new file mode 100755 index 0000000..c646b64 --- /dev/null +++ b/modules/config/users/config/user1.nix @@ -0,0 +1,15 @@ +{ user1 }: +let + inherit + user1 + ; +in +{ + name = "Garnet"; + email = { + address0 = "ninaeffler@gmail.com"; + }; + paths = { + path0 = "/home/${user1}/Files/Projects"; # Git path + }; +} diff --git a/modules/config/users/config/user2.nix b/modules/config/users/config/user2.nix new file mode 100755 index 0000000..50145a2 --- /dev/null +++ b/modules/config/users/config/user2.nix @@ -0,0 +1,19 @@ +{ user2 }: +let + inherit + user2 + ; +in +{ + name = "Stacie"; + email = { + address0 = "staciesimonson@gmail.com"; + }; + paths = { + path0 = "/home/${user2}"; # Git path + }; + sshKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILQQDw0NigCC76G/GlHWIMunckaBmfgqbfJXFGWB+8fe stacie@desktop" + ]; + +} diff --git a/modules/config/users/config/user3.nix b/modules/config/users/config/user3.nix new file mode 100755 index 0000000..c3bba16 --- /dev/null +++ b/modules/config/users/config/user3.nix @@ -0,0 +1,20 @@ +{ user3 }: +let + inherit + user3 + ; +in +{ + name = "Streaming"; + aliases = { + }; + email = { + address0 = "nick@upRootNutrition.com"; + }; + paths = { + path0 = "/home/${user3}/Files/Projects"; # Git path + }; + sshKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop" + ]; +} diff --git a/modules/config/users/default.nix b/modules/config/users/default.nix new file mode 100755 index 0000000..60996ff --- /dev/null +++ b/modules/config/users/default.nix @@ -0,0 +1,22 @@ +let + configPath = ./config; + + user0 = "nick"; + user1 = "garnet"; + user2 = "fallaryn"; + user3 = "streaming"; +in +{ + inherit + user0 + user1 + user2 + user3 + ; + users = { + "${user0}" = import (configPath + /user0.nix) { inherit user0; }; + "${user1}" = import (configPath + /user1.nix) { inherit user1; }; + "${user2}" = import (configPath + /user2.nix) { inherit user2; }; + "${user3}" = import (configPath + /user3.nix) { inherit user3; }; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/helpers.nix b/modules/helpers.nix new file mode 100755 index 0000000..b6a664b --- /dev/null +++ b/modules/helpers.nix @@ -0,0 +1,23 @@ +{ + directoryImport = + let + collectDirs = + path: + let + content = builtins.readDir path; + subdirs = builtins.filter (name: content.${name} == "directory") (builtins.attrNames content); + buildPath = name: path + "/${name}"; + + thisDirs = map buildPath subdirs; + subDirs = builtins.concatMap collectDirs thisDirs; + in + [ path ] ++ subDirs; + in + path: + builtins.listToAttrs ( + map (dir: { + name = baseNameOf (toString dir); + value = import dir; + }) (collectDirs path) + ); +} diff --git a/modules/home/cli/android/androidFileTransfer/default.nix b/modules/home/cli/android/androidFileTransfer/default.nix new file mode 100755 index 0000000..0b25158 --- /dev/null +++ b/modules/home/cli/android/androidFileTransfer/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + android-file-transfer + ; + }; +} +# requires that users be part of the adbusers group diff --git a/modules/home/cli/android/androidTools/default.nix b/modules/home/cli/android/androidTools/default.nix new file mode 100755 index 0000000..7b44aa6 --- /dev/null +++ b/modules/home/cli/android/androidTools/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + android-tools + ; + }; +} +# requires that users be part of the adbusers group diff --git a/modules/home/cli/android/default.nix b/modules/home/cli/android/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/android/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/android/simpleMtpfs/default.nix b/modules/home/cli/android/simpleMtpfs/default.nix new file mode 100755 index 0000000..eea80bd --- /dev/null +++ b/modules/home/cli/android/simpleMtpfs/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + simple-mtpfs + ; + }; +} diff --git a/modules/home/cli/default.nix b/modules/home/cli/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/development/default.nix b/modules/home/cli/development/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/development/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/development/editing/default.nix b/modules/home/cli/development/editing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/development/editing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/development/editing/helix/config/languages.nix b/modules/home/cli/development/editing/helix/config/languages.nix new file mode 100755 index 0000000..b0bc3d0 --- /dev/null +++ b/modules/home/cli/development/editing/helix/config/languages.nix @@ -0,0 +1,44 @@ +{ + language = [ + { + auto-format = true; + formatter.command = "nixfmt"; + name = "nix"; + } + { + auto-format = true; + formatter.command = "cssfmt"; + name = "css"; + } + { + auto-format = true; + language-servers = [ + "elm-language-server" + ]; + name = "elm"; + } + { + auto-format = true; + formatter.command = "haskell"; + name = "haskell"; + } + { + auto-format = true; + formatter.command = "yamlfmt"; + name = "yaml"; + } + { + auto-format = true; + formatter.command = "yuck"; + name = "yuck"; + } + ]; + language-server = { + elm-language-server = { + config.elmLS = { + disableElmLSDiagnostics = true; + elmReviewDiagnostics = "warning"; + }; + }; + }; +} diff --git a/modules/home/cli/development/editing/helix/config/settings.nix b/modules/home/cli/development/editing/helix/config/settings.nix new file mode 100755 index 0000000..f666f1c --- /dev/null +++ b/modules/home/cli/development/editing/helix/config/settings.nix @@ -0,0 +1,62 @@ +{ + editor = { + mouse = true; + auto-format = true; + soft-wrap.enable = true; + auto-save = true; + line-number = "relative"; + cursorline = true; + indent-guides = { + character = "╎"; + skip-levels = 1; + render = true; + }; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + }; + + keys = { + normal = { + f = ":format"; + tab = "indent"; + S-tab = "unindent"; + ret = [ + "add_newline_below" + "move_line_down" + ]; + S-ret = [ + "add_newline_above" + "move_line_up" + ]; + S-up = [ + "extend_to_line_bounds" + "delete_selection" + "move_line_up" + "paste_before" + ]; + + S-down = [ + "extend_to_line_bounds" + "delete_selection" + "paste_after" + ]; + S-g = [ + ":write-all" + ":new" + ":insert-output lazygit" + ":buffer-close!" + ":redraw" + ":reload-all" + ]; + Y = "yank_main_selection_to_primary_clipboard"; + R = "replace_selections_with_primary_clipboard"; + space = { + q = ":q"; + w = ":w"; + }; + }; + }; + theme = "catppuccin_macchiato"; +} diff --git a/modules/home/cli/development/editing/helix/default.nix b/modules/home/cli/development/editing/helix/default.nix new file mode 100755 index 0000000..bf25a9f --- /dev/null +++ b/modules/home/cli/development/editing/helix/default.nix @@ -0,0 +1,19 @@ +{ + pkgs, + flake, + ... +}: +{ + programs.helix = + let + configPath = ./config; + settingsPath = import (configPath + /settings.nix); + languagesPath = import (configPath + /languages.nix); + in + { + enable = true; + package = flake.inputs.helix.packages.${pkgs.system}.default; + languages = languagesPath; + settings = settingsPath; + }; +} diff --git a/modules/home/cli/development/tooling/default.nix b/modules/home/cli/development/tooling/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/development/tooling/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/development/tooling/elm/default.nix b/modules/home/cli/development/tooling/elm/default.nix new file mode 100755 index 0000000..f114fe0 --- /dev/null +++ b/modules/home/cli/development/tooling/elm/default.nix @@ -0,0 +1,16 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.elmPackages) + elm + elm-format + elm-land + elm-language-server + elm-review + elm-test + ; + }; +} diff --git a/modules/home/cli/development/tooling/javascript/default.nix b/modules/home/cli/development/tooling/javascript/default.nix new file mode 100755 index 0000000..65279aa --- /dev/null +++ b/modules/home/cli/development/tooling/javascript/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.nodePackages) + nodejs + ; + }; +} diff --git a/modules/home/cli/development/versioning/default.nix b/modules/home/cli/development/versioning/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/development/versioning/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/development/versioning/git/default.nix b/modules/home/cli/development/versioning/git/default.nix new file mode 100755 index 0000000..6be6b72 --- /dev/null +++ b/modules/home/cli/development/versioning/git/default.nix @@ -0,0 +1,16 @@ +{ + config, + flake, + ... +}: +let + user = config.home.username; + userConfig = flake.config.people.users.${user}; +in +{ + programs.git = { + enable = true; + userName = userConfig.name; + userEmail = userConfig.email.address0; + }; +} diff --git a/modules/home/cli/development/versioning/lazygit/default.nix b/modules/home/cli/development/versioning/lazygit/default.nix new file mode 100755 index 0000000..26dd88b --- /dev/null +++ b/modules/home/cli/development/versioning/lazygit/default.nix @@ -0,0 +1,7 @@ +{ + programs.lazygit = { + enable = true; + settings = { + }; + }; +} diff --git a/modules/home/cli/files/default.nix b/modules/home/cli/files/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/files/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/files/fileRoller/default.nix b/modules/home/cli/files/fileRoller/default.nix new file mode 100755 index 0000000..3e8046c --- /dev/null +++ b/modules/home/cli/files/fileRoller/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + file-roller + ; + }; +} diff --git a/modules/home/cli/files/ncdu/default.nix b/modules/home/cli/files/ncdu/default.nix new file mode 100755 index 0000000..da8a812 --- /dev/null +++ b/modules/home/cli/files/ncdu/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ncdu + ; + }; +} diff --git a/modules/home/cli/files/samba/default.nix b/modules/home/cli/files/samba/default.nix new file mode 100755 index 0000000..cef8189 --- /dev/null +++ b/modules/home/cli/files/samba/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + samba + ; + }; +} diff --git a/modules/home/cli/files/unrar/default.nix b/modules/home/cli/files/unrar/default.nix new file mode 100755 index 0000000..f68860b --- /dev/null +++ b/modules/home/cli/files/unrar/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + unrar + ; + }; +} diff --git a/modules/home/cli/files/unzip/default.nix b/modules/home/cli/files/unzip/default.nix new file mode 100755 index 0000000..1fad41f --- /dev/null +++ b/modules/home/cli/files/unzip/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + unzip + ; + }; +} diff --git a/modules/home/cli/files/yazi/config/keymap.nix b/modules/home/cli/files/yazi/config/keymap.nix new file mode 100755 index 0000000..b35618c --- /dev/null +++ b/modules/home/cli/files/yazi/config/keymap.nix @@ -0,0 +1,16 @@ +{ + keymap.manager.prepend_keymap = [ + { + on = [ + "Q" + ]; + run = "quit"; + } + { + on = [ + "q" + ]; + run = "quit --no-cwd-file"; + } + ]; +} diff --git a/modules/home/cli/files/yazi/config/settings.nix b/modules/home/cli/files/yazi/config/settings.nix new file mode 100755 index 0000000..96bb9fb --- /dev/null +++ b/modules/home/cli/files/yazi/config/settings.nix @@ -0,0 +1,18 @@ +{ + settings = { + log = { + enabled = false; + }; + manager = { + show_hidden = true; + sort_by = "alphabetical"; + sort_dir_first = true; + sort_reverse = false; + }; + preview = { + tab_size = 2; + max_width = 1500; + max_height = 1000; + }; + }; +} diff --git a/modules/home/cli/files/yazi/default.nix b/modules/home/cli/files/yazi/default.nix new file mode 100755 index 0000000..fd7c888 --- /dev/null +++ b/modules/home/cli/files/yazi/default.nix @@ -0,0 +1,22 @@ +{ + flake, + pkgs, + ... +}: +{ + programs.yazi = + let + configPath = ./config; + keymapPath = import (configPath + /keymap.nix); + settingsPath = import (configPath + /settings.nix); + in + { + enable = true; + # package = flake.inputs.yazi.packages.${pkgs.system}.yazi; + enableNushellIntegration = true; + keymap = keymapPath; + settings = settingsPath; + }; + # Keymap + # https://github.com/sxyazi/yazi/blob/main/yazi-config/preset/keymap.toml +} diff --git a/modules/home/cli/files/zip/default.nix b/modules/home/cli/files/zip/default.nix new file mode 100755 index 0000000..96e9218 --- /dev/null +++ b/modules/home/cli/files/zip/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + zip + ; + }; +} diff --git a/modules/home/cli/fun/aniCli/default.nix b/modules/home/cli/fun/aniCli/default.nix new file mode 100755 index 0000000..bd02397 --- /dev/null +++ b/modules/home/cli/fun/aniCli/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ani-cli + ; + }; +} diff --git a/modules/home/cli/fun/default.nix b/modules/home/cli/fun/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/fun/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/fun/fastFetch/config/settings.nix b/modules/home/cli/fun/fastFetch/config/settings.nix new file mode 100755 index 0000000..9465863 --- /dev/null +++ b/modules/home/cli/fun/fastFetch/config/settings.nix @@ -0,0 +1,76 @@ +{ + logo = { + source = "nixos_large"; + padding = { + right = 2; + top = 3; + }; + }; + display = { + size = { + binaryPrefix = "si"; + }; + color = "magenta"; + separator = " → "; + }; + modules = [ + { + type = "separator"; + string = "SYSTEM: "; + } + { + type = "os"; + key = "NixOS Version"; + } + { + type = "kernel"; + key = "Kernel Version"; + } + "shell" + "terminal" + "packages" + "locale" + { + type = "wm"; + key = "Window Manager"; + } + { + type = "separator"; + string = "HARDWARE: "; + } + { + type = "board"; + key = "Motherboard"; + } + { + type = "cpu"; + key = "Processor"; + } + { + type = "gpu"; + key = "Graphics"; + } + "memory" + "disk" + "display" + "gamepad" + { + type = "sound"; + key = "Audio Interface"; + } + { + type = "separator"; + string = "INTERFACE: "; + } + "theme" + "cursor" + "icons" + "font" + "editor" + "player" + { + type = "media"; + key = "Song"; + } + ]; +} diff --git a/modules/home/cli/fun/fastFetch/default.nix b/modules/home/cli/fun/fastFetch/default.nix new file mode 100755 index 0000000..b01f4c7 --- /dev/null +++ b/modules/home/cli/fun/fastFetch/default.nix @@ -0,0 +1,10 @@ +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix); +in +{ + programs.fastfetch = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/cli/fun/libgenCli/default.nix b/modules/home/cli/fun/libgenCli/default.nix new file mode 100755 index 0000000..773e031 --- /dev/null +++ b/modules/home/cli/fun/libgenCli/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + libgen-cli + ; + }; +} diff --git a/modules/home/cli/fun/nyanCat/default.nix b/modules/home/cli/fun/nyanCat/default.nix new file mode 100755 index 0000000..9c6ad8e --- /dev/null +++ b/modules/home/cli/fun/nyanCat/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + nyancat + ; + }; +} diff --git a/modules/home/cli/fun/yaBridge/default.nix b/modules/home/cli/fun/yaBridge/default.nix new file mode 100755 index 0000000..c5ff0de --- /dev/null +++ b/modules/home/cli/fun/yaBridge/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + yabridge + ; + }; +} diff --git a/modules/home/cli/fun/yt-dlp/config/extraConfig.nix b/modules/home/cli/fun/yt-dlp/config/extraConfig.nix new file mode 100755 index 0000000..85ade0a --- /dev/null +++ b/modules/home/cli/fun/yt-dlp/config/extraConfig.nix @@ -0,0 +1,4 @@ +'' + --embed-chapters + --audio-quality 0 +'' diff --git a/modules/home/cli/fun/yt-dlp/config/settings.nix b/modules/home/cli/fun/yt-dlp/config/settings.nix new file mode 100755 index 0000000..aadf2e7 --- /dev/null +++ b/modules/home/cli/fun/yt-dlp/config/settings.nix @@ -0,0 +1,7 @@ +{ + embed-thumbnail = true; + embed-subs = true; + sub-langs = "english"; + downloader = "aria2c"; + downloader-args = "aria2c:'-c -x8 -s8 -k1M'"; +} diff --git a/modules/home/cli/fun/yt-dlp/default.nix b/modules/home/cli/fun/yt-dlp/default.nix new file mode 100755 index 0000000..2033dea --- /dev/null +++ b/modules/home/cli/fun/yt-dlp/default.nix @@ -0,0 +1,13 @@ +{ + programs.yt-dlp = + let + configPath = ./config; + extraConfigPath = import (configPath + /extraConfig.nix); + settingsPath = import (configPath + /settings.nix); + in + { + enable = true; + extraConfig = extraConfigPath; + settings = settingsPath; + }; +} diff --git a/modules/home/cli/shell/default.nix b/modules/home/cli/shell/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/shell/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/shell/nushell/default.nix b/modules/home/cli/shell/nushell/default.nix new file mode 100755 index 0000000..1bc505d --- /dev/null +++ b/modules/home/cli/shell/nushell/default.nix @@ -0,0 +1,15 @@ +{ + programs.nushell = { + enable = true; + configFile.text = '' + sleep 7ms + $env.config = {show_banner: false} + ''; + shellAliases = { + y = "yy"; + lg = "lazygit"; + yt = "yt-dlp --embed-chapters"; + ze = "zellij"; + }; + }; +} diff --git a/modules/home/cli/shell/starship/config/settings.nix b/modules/home/cli/shell/starship/config/settings.nix new file mode 100755 index 0000000..634e39f --- /dev/null +++ b/modules/home/cli/shell/starship/config/settings.nix @@ -0,0 +1,98 @@ +{ + flake, + config, + lib, + ... +}: +let + inherit (flake.config.aesthetics.themes) currentTheme palettes; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; + + makeColor = c: "#" + c; + makeStyle = bg: fg: "bg:" + bg + " fg:" + fg + " bold"; + surround = + fg: text: + "[](fg:" + + makeColor el.base00 + + " bg:" + + fg + + ")" + + "[█](fg:" + + fg + + ")" + + text + + "[█](fg:" + + fg + + ")"; +in +{ + add_newline = false; + character = + let + makeChar = + bg: c: + surround (makeColor bg) ("[" + c + "](" + makeStyle (makeColor bg) (makeColor el.base11) + ")"); + in + { + error_symbol = makeChar el.base12 "⊥"; + format = "$symbol"; + success_symbol = makeChar el.base0C "λ"; + }; + cmd_duration = { + format = surround (makeColor el.base0E) "[ $duration]($style)"; + min_time = 0; + show_milliseconds = true; + style = makeStyle (makeColor el.base0E) (makeColor el.base11); + }; + directory = { + format = surround (makeColor el.base0D) "[󰉋 $path]($style)[$read_only]($read_only_style)"; + read_only = "  "; + read_only_style = makeStyle (makeColor el.base0D) (makeColor el.base11); + style = makeStyle (makeColor el.base0D) (makeColor el.base11); + truncation_length = 1; + truncate_to_repo = false; + }; + git_branch = { + format = surround (makeColor el.base09) "[$symbol $branch]($style)"; + style = makeStyle (makeColor el.base09) (makeColor el.base11); + symbol = ""; + }; + git_status = { + format = "[ \\[$all_status$ahead_behind\\]]($style)"; + style = makeStyle (makeColor el.base0A) (makeColor el.base11); + }; + hostname = { + format = surround (makeColor el.base16) "[$ssh_symbol$hostname]($style)"; + ssh_symbol = "󰖟 "; + style = makeStyle (makeColor el.base16) (makeColor el.base11); + }; + pijul_channel = { + disabled = false; + format = surround (makeColor el.base09) "[$symbol $channel]($style)"; + style = makeStyle (makeColor el.base09) (makeColor el.base11); + symbol = ""; + }; + format = lib.concatStrings [ + "$hostname" + "$directory" + "$pijul_channel" + "$git_branch" + "$cmd_duration" + "$character " + ]; +} diff --git a/modules/home/cli/shell/starship/default.nix b/modules/home/cli/shell/starship/default.nix new file mode 100755 index 0000000..44bcb8d --- /dev/null +++ b/modules/home/cli/shell/starship/default.nix @@ -0,0 +1,16 @@ +{ + flake, + config, + lib, + ... +}: +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { inherit config flake lib; }; +in +{ + programs.starship = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/cli/shell/zellij/default.nix b/modules/home/cli/shell/zellij/default.nix new file mode 100755 index 0000000..18001b7 --- /dev/null +++ b/modules/home/cli/shell/zellij/default.nix @@ -0,0 +1,6 @@ +{ + programs.zellij = { + enable = true; + settings.theme = "catppuccin-macchiato"; + }; +} diff --git a/modules/home/cli/shell/zoxide/default.nix b/modules/home/cli/shell/zoxide/default.nix new file mode 100755 index 0000000..a9ff9f0 --- /dev/null +++ b/modules/home/cli/shell/zoxide/default.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: +{ + programs.zoxide = { + enable = true; + enableNushellIntegration = true; + package = pkgs.zoxide; + options = [ + ]; + }; +} diff --git a/modules/home/cli/utilities/alsaUtils/default.nix b/modules/home/cli/utilities/alsaUtils/default.nix new file mode 100755 index 0000000..7477265 --- /dev/null +++ b/modules/home/cli/utilities/alsaUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + alsa-utils + ; + }; +} diff --git a/modules/home/cli/utilities/bottom/config/settings.nix b/modules/home/cli/utilities/bottom/config/settings.nix new file mode 100755 index 0000000..0aa5968 --- /dev/null +++ b/modules/home/cli/utilities/bottom/config/settings.nix @@ -0,0 +1,67 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.aesthetics.themes) + currentTheme + palettes + ; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + colors = { + tableHeaderColor = el.base06; + allCpuColor = el.base06; + avgCpuColor = el.base12; + cpuCoreColors = [ + el.base07 + el.base16 + el.base09 + el.base0A + el.base0B + el.base15 + el.base0E + ]; + ramColor = el.base0B; + swapColor = el.base09; + rxColor = el.base0B; + txColor = el.base08; + widgetTitleColor = el.base0F; + borderColor = el.base04; + highlightedBorderColor = el.base17; + textColor = el.base05; + graphColor = el.base05; + cursorColor = el.base17; + selectedTextColor = el.base11; + selectedBgColor = el.base0E; + highBatteryColor = el.base0B; + mediumBatteryColor = el.base0A; + lowBatteryColor = el.base08; + gpuCoreColors = [ + el.base15 + el.base0E + el.base08 + el.base09 + el.base0A + el.base0B + ]; + arcColor = el.base15; + }; +} diff --git a/modules/home/cli/utilities/bottom/default.nix b/modules/home/cli/utilities/bottom/default.nix new file mode 100755 index 0000000..7dfbba0 --- /dev/null +++ b/modules/home/cli/utilities/bottom/default.nix @@ -0,0 +1,16 @@ +{ + flake, + config, + ... +}: +{ + programs.bottom = + let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { inherit config flake; }; + in + { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/cli/utilities/brightnessCtl/default.nix b/modules/home/cli/utilities/brightnessCtl/default.nix new file mode 100755 index 0000000..7e2366c --- /dev/null +++ b/modules/home/cli/utilities/brightnessCtl/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + brightnessctl + ; + }; +} diff --git a/modules/home/cli/utilities/cifsUtils/default.nix b/modules/home/cli/utilities/cifsUtils/default.nix new file mode 100755 index 0000000..bffcc14 --- /dev/null +++ b/modules/home/cli/utilities/cifsUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + cifs-utils + ; + }; +} diff --git a/modules/home/cli/utilities/default.nix b/modules/home/cli/utilities/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/cli/utilities/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/cli/utilities/direnv/default.nix b/modules/home/cli/utilities/direnv/default.nix new file mode 100755 index 0000000..2b51c9d --- /dev/null +++ b/modules/home/cli/utilities/direnv/default.nix @@ -0,0 +1,6 @@ +{ + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; +} diff --git a/modules/home/cli/utilities/ffmpeg/default.nix b/modules/home/cli/utilities/ffmpeg/default.nix new file mode 100755 index 0000000..52a9171 --- /dev/null +++ b/modules/home/cli/utilities/ffmpeg/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ffmpeg + ; + }; +} diff --git a/modules/home/cli/utilities/flac/default.nix b/modules/home/cli/utilities/flac/default.nix new file mode 100755 index 0000000..41010d0 --- /dev/null +++ b/modules/home/cli/utilities/flac/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + flac + ; + }; +} diff --git a/modules/home/cli/utilities/gLib/default.nix b/modules/home/cli/utilities/gLib/default.nix new file mode 100755 index 0000000..0205272 --- /dev/null +++ b/modules/home/cli/utilities/gLib/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + glib + ; + }; +} diff --git a/modules/home/cli/utilities/hardInfo/default.nix b/modules/home/cli/utilities/hardInfo/default.nix new file mode 100755 index 0000000..4161eb7 --- /dev/null +++ b/modules/home/cli/utilities/hardInfo/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + hardinfo + ; + }; +} diff --git a/modules/home/cli/utilities/homeManager/default.nix b/modules/home/cli/utilities/homeManager/default.nix new file mode 100755 index 0000000..6808670 --- /dev/null +++ b/modules/home/cli/utilities/homeManager/default.nix @@ -0,0 +1 @@ +{ programs.home-manager.enable = true; } diff --git a/modules/home/cli/utilities/inetUtils/default.nix b/modules/home/cli/utilities/inetUtils/default.nix new file mode 100755 index 0000000..38d43a7 --- /dev/null +++ b/modules/home/cli/utilities/inetUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + inetutils + ; + }; +} diff --git a/modules/home/cli/utilities/libnatpmp/default.nix b/modules/home/cli/utilities/libnatpmp/default.nix new file mode 100755 index 0000000..87e7f41 --- /dev/null +++ b/modules/home/cli/utilities/libnatpmp/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + libnatpmp + ; + }; +} diff --git a/modules/home/cli/utilities/ngrrram/default.nix b/modules/home/cli/utilities/ngrrram/default.nix new file mode 100755 index 0000000..ee78d3b --- /dev/null +++ b/modules/home/cli/utilities/ngrrram/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ngrrram + ; + }; +} diff --git a/modules/home/cli/utilities/paMixer/default.nix b/modules/home/cli/utilities/paMixer/default.nix new file mode 100755 index 0000000..a54039b --- /dev/null +++ b/modules/home/cli/utilities/paMixer/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + pamixer + ; + }; +} diff --git a/modules/home/cli/utilities/parted/default.nix b/modules/home/cli/utilities/parted/default.nix new file mode 100755 index 0000000..74443c7 --- /dev/null +++ b/modules/home/cli/utilities/parted/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + parted + ; + }; +} diff --git a/modules/home/cli/utilities/pciUtils/default.nix b/modules/home/cli/utilities/pciUtils/default.nix new file mode 100755 index 0000000..c89c38f --- /dev/null +++ b/modules/home/cli/utilities/pciUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + pciutils + ; + }; +} diff --git a/modules/home/cli/utilities/pinEntry/default.nix b/modules/home/cli/utilities/pinEntry/default.nix new file mode 100755 index 0000000..d7d439e --- /dev/null +++ b/modules/home/cli/utilities/pinEntry/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + pinentry + ; + }; +} diff --git a/modules/home/cli/utilities/playerCtl/default.nix b/modules/home/cli/utilities/playerCtl/default.nix new file mode 100755 index 0000000..d34e69c --- /dev/null +++ b/modules/home/cli/utilities/playerCtl/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + playerctl + ; + }; +} diff --git a/modules/home/cli/utilities/protonVpn/default.nix b/modules/home/cli/utilities/protonVpn/default.nix new file mode 100755 index 0000000..ee18550 --- /dev/null +++ b/modules/home/cli/utilities/protonVpn/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + protonvpn-cli_2 + protonvpn-gui + ; + }; +} diff --git a/modules/home/cli/utilities/speedTest/default.nix b/modules/home/cli/utilities/speedTest/default.nix new file mode 100755 index 0000000..17239fc --- /dev/null +++ b/modules/home/cli/utilities/speedTest/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + speedtest-rs + ; + }; +} diff --git a/modules/home/cli/utilities/sshfs/default.nix b/modules/home/cli/utilities/sshfs/default.nix new file mode 100755 index 0000000..cb6d5d3 --- /dev/null +++ b/modules/home/cli/utilities/sshfs/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + sshfs + ; + }; +} diff --git a/modules/home/cli/utilities/tokei/default.nix b/modules/home/cli/utilities/tokei/default.nix new file mode 100755 index 0000000..bc84f46 --- /dev/null +++ b/modules/home/cli/utilities/tokei/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + tokei + ; + }; +} diff --git a/modules/home/cli/utilities/tomb/default.nix b/modules/home/cli/utilities/tomb/default.nix new file mode 100755 index 0000000..6c6ffb5 --- /dev/null +++ b/modules/home/cli/utilities/tomb/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + tomb + ; + }; +} diff --git a/modules/home/cli/utilities/usbUtils/default.nix b/modules/home/cli/utilities/usbUtils/default.nix new file mode 100755 index 0000000..ac85568 --- /dev/null +++ b/modules/home/cli/utilities/usbUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + usbutils + ; + }; +} diff --git a/modules/home/cli/utilities/wget/default.nix b/modules/home/cli/utilities/wget/default.nix new file mode 100755 index 0000000..08d3d3c --- /dev/null +++ b/modules/home/cli/utilities/wget/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + wget + ; + }; +} diff --git a/modules/home/cli/utilities/wine/default.nix b/modules/home/cli/utilities/wine/default.nix new file mode 100755 index 0000000..093fe8a --- /dev/null +++ b/modules/home/cli/utilities/wine/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + wine + ; + }; +} diff --git a/modules/home/cli/utilities/xdgUtils/default.nix b/modules/home/cli/utilities/xdgUtils/default.nix new file mode 100755 index 0000000..d214120 --- /dev/null +++ b/modules/home/cli/utilities/xdgUtils/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + xdg-utils + ; + }; +} diff --git a/modules/home/cli/utilities/xdoTool/default.nix b/modules/home/cli/utilities/xdoTool/default.nix new file mode 100755 index 0000000..1bb9bf7 --- /dev/null +++ b/modules/home/cli/utilities/xdoTool/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + xdotool + ; + }; +} diff --git a/modules/home/default.nix b/modules/home/default.nix new file mode 100755 index 0000000..1a86e9d --- /dev/null +++ b/modules/home/default.nix @@ -0,0 +1,242 @@ +{ config, ... }: +let + inherit (import ../helpers.nix) directoryImport; + modules = directoryImport ./.; +in +{ + flake.homeModules = + let + inherit (config.machines.devices) + charon + mars + venus + deimos + ceres + ; + inherit (config.people) + user0 + user1 + user2 + user3 + ; + in + { + "${mars.name}-${user0}" = { + imports = builtins.attrValues { + inherit (modules) + cli + brave + floorp + tor + ghostty + prismLauncher + steam + zed + vsCode + feishin + obsidian + libreOffice + okular + zathura + kolourPaint + imageViewing + daVinci + mpv + freetube + dissent + discordCanary + vesktop + element + signal + sharing + bitwarden + emote + flameshot + gnomeCalculator + scrcpy + systemMonitor + usbImager + virtManager + # hypr + # wayland + theming + polychromatic + dolphin + ; + }; + }; + "${mars.name}-${user1}" = { + imports = builtins.attrValues { + inherit (modules) + cli + brave + ghostty + zed + gaming + spotify + docs + mpv + kolourPaint + discord + signal + scrcpy + bitwarden + emote + desktop + ; + }; + }; + "${mars.name}-${user3}" = { + imports = builtins.attrValues { + inherit (modules) + cli + floorp + ghostty + steam + zed + obsidian + okular + kolourPaint + imageViewing + obsStudio + mpv + freetube + vesktop + bitwarden + emote + flameshot + gnomeCalculator + theming + ; + }; + }; + "${venus.name}-${user2}" = { + imports = builtins.attrValues { + inherit (modules) + cli + firefox + brave + code + ghostty + gaming + spotify + audioProduction + wpsOffice + obsidian + okular + images + modeling + obsStudio + kdenlive + videoPlaying + discord + signal + tdesktop + teams + whatsApp + zoom + tools + ; + }; + }; + "${deimos.name}-${user0}" = { + imports = builtins.attrValues { + inherit (modules) + cli + brave + floorp + tor + ghostty + prismLauncher + steam + zed + feishin + obsidian + libreOffice + okular + zathura + kolourPaint + imageViewing + obsStudio + daVinci + mpv + freetube + dissent + discordCanary + vesktop + element + signal + sharing + bitwarden + emote + flameshot + gnomeCalculator + scrcpy + systemMonitor + usbImager + virtManager + # hypr + # wayland + theming + polychromatic + dolphin + ; + }; + }; + "${deimos.name}-${user1}" = { + imports = builtins.attrValues { + inherit (modules) + cli + brave + ghostty + zed + gaming + spotify + docs + mpv + kolourPaint + discord + signal + scrcpy + bitwarden + emote + # hypr + # wayland + theming + ; + }; + }; + "${charon.name}-${user1}" = { + imports = builtins.attrValues { + inherit (modules) + cli + brave + ghostty + zed + gaming + spotify + docs + mpv + jellyfin + kolourPaint + systemMonitor + discord + signal + scrcpy + bitwarden + emote + gnome + theming + ; + }; + }; + "${ceres.name}-${user0}" = { + imports = builtins.attrValues { + inherit (modules) + cli + tooling + ; + }; + }; + }; +} diff --git a/modules/home/gui/apps/browsers/brave/config/extensions.nix b/modules/home/gui/apps/browsers/brave/config/extensions.nix new file mode 100755 index 0000000..a9b45ff --- /dev/null +++ b/modules/home/gui/apps/browsers/brave/config/extensions.nix @@ -0,0 +1,8 @@ +[ + { id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; } # uBlock Origin + { id = "cmpdlhmnmjhihmcfnigoememnffkimlk"; } # Catppuccin Macchiato + { id = "dlnpfhfhmkiebpnlllpehlmklgdggbhn"; } # Don't Close Last Tab + { id = "iplffkdpngmdjhlpjmppncnlhomiipha"; } # Unpaywall + { id = "mnjggcdmjocbbbhaepdhchncahnbgone"; } # SponsorBlock + { id = "ponfpcnoihfmfllpaingbgckeeldkhle"; } # YouTube Enhancer +] diff --git a/modules/home/gui/apps/browsers/brave/default.nix b/modules/home/gui/apps/browsers/brave/default.nix new file mode 100755 index 0000000..8a1b15f --- /dev/null +++ b/modules/home/gui/apps/browsers/brave/default.nix @@ -0,0 +1,11 @@ +{ + programs.brave = + let + configPath = ./config; + extensionsPath = import (configPath + /extensions.nix); + in + { + enable = true; + extensions = extensionsPath; + }; +} diff --git a/modules/home/gui/apps/browsers/chrome/default.nix b/modules/home/gui/apps/browsers/chrome/default.nix new file mode 100755 index 0000000..906f10e --- /dev/null +++ b/modules/home/gui/apps/browsers/chrome/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + google-chrome + ; + }; +} diff --git a/modules/home/gui/apps/browsers/default.nix b/modules/home/gui/apps/browsers/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/browsers/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/browsers/edge/default.nix b/modules/home/gui/apps/browsers/edge/default.nix new file mode 100755 index 0000000..3e2d72e --- /dev/null +++ b/modules/home/gui/apps/browsers/edge/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + microsoft-edge + ; + }; +} diff --git a/modules/home/gui/apps/browsers/epiphany/default.nix b/modules/home/gui/apps/browsers/epiphany/default.nix new file mode 100755 index 0000000..252f968 --- /dev/null +++ b/modules/home/gui/apps/browsers/epiphany/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + epiphany + ; + }; +} diff --git a/modules/home/gui/apps/browsers/firefox/default.nix b/modules/home/gui/apps/browsers/firefox/default.nix new file mode 100755 index 0000000..bc96b62 --- /dev/null +++ b/modules/home/gui/apps/browsers/firefox/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + firefox + ; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/academic.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/academic.nix new file mode 100755 index 0000000..d7ab060 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/academic.nix @@ -0,0 +1,54 @@ +{ + name = "Academic"; + toolbar = false; + bookmarks = [ + { + name = "PubMed"; + url = "https://pubmed.ncbi.nlm.nih.gov"; + tags = [ + "pub" + "pubmed" + "science" + "research" + "academic" + ]; + keyword = "Pub"; + } + { + name = "Sci-Hub"; + url = "https://sci-hub.ee"; + tags = [ + "sci" + "sci-hub" + "scihub" + "science" + "research" + "academic" + "torrent" + ]; + keyword = "Sci"; + } + { + name = "Stanford Encyclopedia of Philosophy"; + url = "https://plato.stanford.edu"; + tags = [ + "standford" + "encyclopedia" + "philosophy" + "phil" + ]; + keyword = "Phil"; + } + { + name = "Zotero Bibliography"; + url = "https://zbib.org"; + tags = [ + "votero" + "bibliography" + "bib" + "zbib" + ]; + keyword = "Bib"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/development.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/development.nix new file mode 100755 index 0000000..85f01f0 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/development.nix @@ -0,0 +1,98 @@ +let + gitlabTags = [ + "git" + "gitlab" + ]; + gitlabURL = "https://gitlab.com"; +in +{ + name = "Development"; + toolbar = false; + bookmarks = [ + { + name = "Discord (Development Portal)"; + url = "https://discord.com/developers/applications"; + tags = [ + "discord" + "development" + "portal" + "bot" + ]; + keyword = "Discord"; + } + { + name = "Elm-UI"; + url = "https://package.elm-lang.org/packages/mdgriffith/elm-ui/latest/"; + tags = [ + "elm-ui" + "elm" + "ui" + ]; + keyword = "Elm"; + } + { + name = "Elm Examples"; + url = "https://elm-lang.org/examples"; + tags = [ + "elm" + "elm" + "examples" + ]; + keyword = "Elm"; + } + { + name = "GitHub"; + url = "https://github.com/BRBWaffles"; + tags = [ + "git" + "github" + "brbwaffles" + ]; + keyword = "GitHub"; + } + { + name = "GitLab (Fallaryn)"; + url = "${gitlabURL}/fallaryn/dotfiles"; + tags = [ + "fallaryn" + ] ++ gitlabTags; + keyword = "GitLab"; + } + { + name = "GitLab (Isaac)"; + url = "${gitlabURL}/askyourself/dotfiles"; + tags = [ + "isaac" + "askyourself" + ] ++ gitlabTags; + keyword = "GitLab"; + } + { + name = "GitLab (Nick)"; + url = "${gitlabURL}/upRootNutrition/dotfiles"; + tags = [ + "brbwaffles" + ] ++ gitlabTags; + keyword = "GitLab"; + } + { + name = "Hackage"; + url = "https://hackage.haskell.org"; + tags = [ + "hackage" + "hack" + "haskell" + ]; + keyword = "Hack"; + } + { + name = "Discord-Haskell"; + url = "https://hackage.haskell.org/package/discord-haskell-1.17.1"; + tags = [ + "discord" + "haskell" + ]; + keyword = "Dack"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/finances.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/finances.nix new file mode 100755 index 0000000..d1564f9 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/finances.nix @@ -0,0 +1,154 @@ +{ + name = "Finances"; + toolbar = false; + bookmarks = [ + { + name = "Adsense"; + url = "https://www.google.com/adsense/new/u/0/pub-4524791551954022/payments"; + tags = [ + "google" + "adsense" + "ads" + "money" + ]; + keyword = "Adsense"; + } + { + name = "Canada Revenue Agency"; + url = "https://apps4.ams-sga.cra-arc.gc.ca/gol-ged/awsc/amss/browser/check?program=mima&target=login&lang=en&idp=cms"; + tags = [ + "cra" + "canada" + "money" + ]; + keyword = "CRA"; + } + { + name = "Credit Karma"; + url = "https://www.creditkarma.ca"; + tags = [ + "credit" + "karma" + "bank" + "banking" + ]; + keyword = "Credit"; + } + { + name = "Kijiji"; + url = "https://www.kijiji.ca"; + tags = [ + "kijiji" + "kij" + "ki" + ]; + keyword = "Kij"; + } + { + name = "LiberaPay"; + url = "https://liberapay.com/upRootNutrition"; + tags = [ + "libera" + "liberapay" + "donations" + "bank" + "banking" + "money" + "uprootnutrition" + ]; + keyword = "Libera"; + } + { + name = "Patreon"; + url = "https://www.patreon.com/upRootNutrition"; + tags = [ + "patreon" + "donations" + "bank" + "banking" + "money" + "uprootnutrition" + ]; + keyword = "Patreon"; + } + { + name = "PayPal"; + url = "https://www.paypal.com/myaccount/summary?intl=0"; + tags = [ + "paypal" + "bank" + "banking" + "money" + ]; + keyword = "PayPal"; + } + { + name = "Shopify"; + url = "https://uprootnutrition.myshopify.com/admin"; + tags = [ + "shopify" + "business" + "shop" + "bank" + "banking" + "money" + ]; + keyword = "Shopify"; + } + { + name = "Simplii"; + url = "https://online.simplii.com/ebm-resources/public/client/web/index.html#/signon"; + tags = [ + "simplii" + "bank" + "banking" + "money" + ]; + keyword = "Simplii"; + } + { + name = "Stripe"; + url = "https://dashboard.stripe.com/settings/user"; + tags = [ + "stripe" + "bank" + "banking" + "money" + ]; + keyword = "Stripe"; + } + { + name = "Telus (Security)"; + url = "https://smarthome-security.telus.com/web/system/home"; + tags = [ + "telus" + "security" + ]; + keyword = "ADT"; + } + { + name = "Wealthsimple"; + url = "https://my.wealthsimple.com/app/tax-onboarding/2021"; + tags = [ + "wealth" + "simple" + "bank" + "banking" + "crypto" + ]; + keyword = "Wealth"; + } + { + name = "Wix"; + url = "https://manage.wix.com/dashboard/413fd74d-8a8f-4c77-bd91-9ea560ffe906/home"; + tags = [ + "wix" + "website" + "business" + "bills" + "uprootnutrition" + ]; + keyword = "Wix"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/flake/selfHosted.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/flake/selfHosted.nix new file mode 100755 index 0000000..dbfffe6 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/flake/selfHosted.nix @@ -0,0 +1,223 @@ +{ flake, ... }: +let + inherit (flake.config.people) + user0 + ; + inherit (flake.config.people.users.${user0}) + aliases + ; + inherit (flake.config.machines.devices) + synology + ceres + ; + inherit (flake.config.services) + instances + ; + + jellyfinTags = [ + "jelly" + "video" + "streaming" + "movies" + "shows" + "music" + ]; + ollamaTags = [ + instances.ollama.name + "chat" + "ai" + ]; + owncastTags = [ + instances.owncast.name + "own" + "cast" + "stream" + ]; + syncthingTags = [ + instances.syncthing.name + "sync" + "thing" + instances.synology.name + ]; +in +{ + name = "Self Hosted"; + toolbar = false; + bookmarks = [ + { + name = "Elm-Land Server"; + url = "http://localhost:1234"; + tags = [ + "elm-land" + "elm" + "land" + ]; + keyword = "Website"; + } + { + name = instances.forgejo.label; + url = "https://${instances.forgejo.subdomain}.${instances.web.domains.url3}"; + tags = [ + instances.forgejo.name + "forge" + "git" + ]; + keyword = instances.forgejo.label; + } + # { + # name = instances.hledger.label; + # url = "http://localhost.${builtins.toString instances.hledger.ports.port0}"; + # tags = [ + # instances.hledger.name + # "hledger" + # "finances" + # ]; + # keyword = instances.hledger.label; + # } + { + name = "${instances.jellyfin.label} (Internet)"; + url = "https://${instances.jellyfin.name}.${instances.web.domains.url0}"; + tags = jellyfinTags; + keyword = instances.jellyfin.label; + } + { + name = "${instances.jellyfin.label} (Local)"; + url = "http://${ceres.ip.address0}:${toString instances.jellyfin.ports.port1}"; + tags = jellyfinTags; + keyword = instances.jellyfin.label; + } + { + name = instances.mastodon.label; + url = "https://${instances.mastodon.subdomain}.${instances.web.domains.url3}"; + tags = [ + instances.mastodon.name + "mast" + "md" + ]; + keyword = instances.mastodon.label; + } + { + name = "Namecheap"; + url = "https://www.namecheap.com"; + tags = [ + "namecheap" + "name" + "cheap" + "dns" + ]; + keyword = "Name"; + } + { + name = instances.nextcloud.label; + url = "https://${instances.nextcloud.subdomain}.${instances.web.domains.url1}"; + tags = [ + instances.nextcloud.name + "next" + "cloud" + "calendar" + ]; + keyword = instances.nextcloud.label; + } + { + name = aliases.name2; + url = instances.web.domains.url2; + tags = [ + aliases.name3 + "blog" + ]; + keyword = aliases.name2; + } + { + name = "${instances.ollama.label} (Server)"; + url = "https://${instances.ollama.subdomain}.${instances.web.domains.url0}"; + tags = ollamaTags; + keyword = instances.ollama.label; + } + { + name = "${instances.ollama.label} (Desktop)"; + url = "http://localhost:${toString instances.ollama.ports.port0}"; + tags = ollamaTags; + keyword = instances.ollama.label; + } + # { + # name = "${instances.owncast.label} (Admin)"; + # url = "http://${ceres.ip.address0}:${toString instances.owncast.ports.port0}/admin"; + # tags = owncastTags; + # keyword = instances.owncast.label; + # } + # { + # name = "${instances.owncast.label} (Server)"; + # url = "http://${instances.owncast.subdomain}.${instances.web.domains.url1}"; + # tags = owncastTags; + # keyword = instances.owncast.label; + # } + # { + # name = instances.peertube.label; + # url = "https://${instances.peertube.subdomain}.${instances.web.domains.url3}"; + # tags = [ + # instances.peertube.name + # "peer" + # "tube" + # "uprootnutrition" + # ]; + # keyword = instances.peertube.label; + # } + { + name = "Router"; + url = "http://${instances.web.localhost.address2}"; + tags = [ + "router" + "asus" + ]; + keyword = "Router"; + } + { + name = "${instances.searx.label} (Internet)"; + url = "https://${instances.searx.subdomain}.${instances.web.domains.url0}"; + tags = [ + "search" + "sear" + "searx" + ]; + keyword = instances.searx.label; + } + { + name = "${instances.syncthing.label} (${instances.synology.label})"; + url = "http://${synology.ip.address0}:${toString instances.syncthing.ports.port0}"; + tags = [ + "synology" + ] ++ syncthingTags; + keyword = instances.syncthing.label; + } + { + name = "${instances.syncthing.label} (Desktop)"; + url = "http://localhost:${toString instances.syncthing.ports.port0}"; + tags = [ + "desktop" + ] ++ syncthingTags; + keyword = instances.syncthing.label; + } + { + name = instances.synology.label; + url = "https://${synology.ip.address0}:${toString instances.synology.ports.port0}"; + tags = [ + instances.synology.name + "dsm" + "cloud" + ]; + keyword = instances.synology.label; + } + { + name = instances.vaultwarden.label; + url = "https://${instances.vaultwarden.subdomain}.${instances.web.domains.url0}"; + tags = [ + instances.vaultwarden.name + "bitwarden" + "vault" + "bit" + "warden" + ]; + keyword = instances.vaultwarden.label; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/gaming.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/gaming.nix new file mode 100755 index 0000000..e16fb8b --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/gaming.nix @@ -0,0 +1,52 @@ +{ + name = "Gaming"; + toolbar = false; + bookmarks = [ + { + name = "Battle.net"; + url = "https://us.shop.battle.net"; + tags = [ + "battle.net" + "battle" + "net" + ]; + keyword = "Battle"; + } + { + name = "Chess.com"; + url = "https://www.chess.com/home"; + tags = [ + "chess" + ]; + keyword = "Chess"; + } + { + name = "Lichess"; + url = "https://lichess.org"; + tags = [ + "lichess" + "chess" + ]; + keyword = "Li"; + } + { + name = "ProtonDB"; + url = "https://www.protondb.com"; + tags = [ + "steam" + "db" + ]; + keyword = "DB"; + } + { + name = "SteamDB"; + url = "https://steamdb.info"; + tags = [ + "steamdb" + "steam" + "db" + ]; + keyword = "SteamDB"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/shopping.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/shopping.nix new file mode 100755 index 0000000..871c0e3 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/shopping.nix @@ -0,0 +1,80 @@ +{ + name = "Shopping"; + toolbar = false; + bookmarks = [ + { + name = "Amazon"; + url = "https://www.amazon.ca"; + tags = [ + "amazon" + "shopping" + "supply" + ]; + keyword = "Amazon"; + } + { + name = "Door Dash"; + url = "https://www.doordash.com"; + tags = [ + "doordash" + "door" + "dash" + "food" + ]; + keyword = "Dash"; + } + { + name = "Fiverr"; + url = "https://www.fiverr.com"; + tags = [ + "fiverr" + "graphic" + "design" + ]; + keyword = "Five"; + } + { + name = "FTY Supplies"; + url = "https://fytsupplies.ca"; + tags = [ + "tattoo tat" + "fyt" + "shopping" + "supply" + ]; + keyword = "FYT"; + } + { + name = "Skip the Dishes"; + url = "https://www.skipthedishes.com"; + tags = [ + "skip" + "dishes" + "food" + ]; + keyword = "Skip"; + } + { + name = "Uber Eats"; + url = "https://www.ubereats.com"; + tags = [ + "uber" + "eats" + "food" + ]; + keyword = "Uber"; + } + { + name = "TatSoul"; + url = "https://www.tatsoul.com"; + tags = [ + "tattoo" + "tat" + "tatsoul" + "shopping" + "supply" + ]; + keyword = "TatSoul"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/socialMedia.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/socialMedia.nix new file mode 100755 index 0000000..d83ad21 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/socialMedia.nix @@ -0,0 +1,186 @@ +let + discordTags = [ + "disboard" + "discord" + "dis" + "ds" + "social" + ]; + youtubeTags = [ + "youtube" + "you" + "tube" + "yt" + ]; +in +{ + name = "Social Media"; + toolbar = false; + bookmarks = [ + { + name = "upRootNutrition"; + url = "https://upRootNutrition.com"; + tags = [ + "uprootnutrition" + "up" + "root" + "nutrition" + ]; + keyword = "Root"; + } + { + name = "Disboard"; + url = "https://disboard.org"; + tags = discordTags; + keyword = "Disboard"; + } + { + name = "Discord (Web Client)"; + url = "https://discord.com/channels/@me"; + tags = discordTags; + keyword = "Discord"; + } + { + name = "Facebook"; + url = "https://www.facebook.com/"; + tags = [ + "facebook" + "face" + "book" + ]; + keyword = "Face"; + } + { + name = "Gmail"; + url = "https://mail.google.com/mail/u/0/#inbox"; + tags = [ + "gmail" + "google" + "mail" + "gm" + "email" + ]; + keyword = "Gmail"; + } + { + name = "Lemmy"; + url = "https://lemmy.world"; + tags = [ + "lemmy" + "social" + ]; + keyword = "Lem"; + } + { + name = "OnlyFans"; + url = "https://onlyfans.com"; + tags = [ + "onlyfans" + "only" + "fans" + ]; + keyword = "Only"; + } + { + name = "Pixelfed"; + url = "https://pixelfed.social/i/web/profile/651714972141461392"; + tags = [ + "pixelfed" + "pixel" + "pi" + ]; + keyword = "Pix"; + } + { + name = "Proton Mail"; + url = "https://mail.proton.me/u/1/inbox"; + tags = [ + "proton" + "mail" + "pr" + "email" + ]; + keyword = "Pro"; + } + { + name = "Proton Calendar"; + url = "https://calendar.proton.me"; + tags = [ + "proton" + "calendar" + ]; + keyword = "Cal"; + } + { + name = "Proton VPN"; + url = "https://account.proton.me/u/0/vpn"; + tags = [ + "proton" + "vpn" + ]; + keyword = "VPN"; + } + { + name = "Reddit"; + url = "https://www.reddit.com"; + tags = [ + "reddit" + "social" + ]; + keyword = "Reddit"; + } + { + name = "Slack"; + url = "https://app.slack.com/"; + tags = [ + "slack" + "social" + ]; + keyword = "Slack"; + } + { + name = "StreamLabs"; + url = "https://streamlabs.com/dashboard"; + tags = [ + "streamlabs" + "stream" + "labs" + ]; + keyword = "Stream"; + } + { + name = "Tinder"; + url = "https://tinder.com/app/recs"; + tags = [ + "tinder" + "dating" + "booty" + ]; + keyword = "Tinder"; + } + { + name = "YouTube"; + url = "https://www.youtube.com"; + tags = youtubeTags; + keyword = "You"; + } + { + name = "YouTube Studio"; + url = "https://studio.youtube.com/channel/UCy9yYcDx2XuVVgcWLJJDoxw"; + tags = [ + "studio" + ] ++ youtubeTags; + keyword = "Studio"; + } + { + name = "X (Twitter)"; + url = "https://x.com/upRootNutrition"; + tags = [ + "twitter" + "x" + "social" + ]; + keyword = "Twitter"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tools.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tools.nix new file mode 100755 index 0000000..84e5a63 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tools.nix @@ -0,0 +1,291 @@ +{ + name = "Tools"; + toolbar = false; + bookmarks = [ + { + name = "Mullvad"; + url = "https://mullvad.net"; + tags = [ + "mullvad" + "vpn" + ]; + keyword = "Mull"; + } + { + name = "Monkeytype"; + url = "https://monkeytype.com/"; + tags = [ + "monkeytype" + "type" + ]; + keyword = "Monk"; + } + { + name = "Cyanophage Layout Analyzer"; + url = "https://cyanophage.github.io"; + tags = [ + "cyanophage" + "keyboard" + "layout" + ]; + keyword = "Layout"; + } + { + name = "Smtp2Go"; + url = "https://app-us.smtp2go.com/dashboard/main"; + tags = [ + "smtp" + "email" + ]; + keyword = "Smtp"; + } + { + name = "Oryx"; + url = "https://configure.zsa.io/moonlander"; + tags = [ + "zsa" + "moonlander" + "keyboard" + "layout" + ]; + keyword = "Moon"; + } + { + name = "Hugging Face"; + url = "https://www.huggingface.co"; + tags = [ + "hugging" + "face" + "ai" + "gguf" + ]; + keyword = "Hug"; + } + { + name = "DeepSeek"; + url = "https://chat.deepseek.com/"; + tags = [ + "deepseek" + "deep" + "seek" + "ai" + ]; + keyword = "Deep"; + } + { + name = "Uncensored AI"; + url = "https://www.aiuncensored.info"; + tags = [ + "uncensored" + "ai" + ]; + keyword = "AI"; + } + { + name = "Canadian Blood Services"; + url = "https://www.blood.ca/en"; + tags = [ + "canadian" + "blood" + "services" + "give" + ]; + keyword = "Give"; + } + { + name = "Chmod Calculator"; + url = "https://chmod-calculator.com"; + tags = [ + "chmod" + "calculator" + ]; + keyword = "Chmod"; + } + { + name = "ChatGPT"; + url = "https://chatgpt.com"; + tags = [ + "chat" + "chatgpt" + "gpt" + ]; + keyword = "Chat"; + } + { + name = "Claude AI"; + url = "https://claude.ai"; + tags = [ + "claude" + "ai" + ]; + keyword = "Claude"; + } + { + name = "Cronometer"; + url = "https://cronometer.com/#diary"; + tags = [ + "cronometer" + "cron" + "nutrition" + ]; + keyword = "Cron"; + } + { + name = "DNS Checker"; + url = "https://dnschecker.org"; + tags = [ + "dns" + "checker" + ]; + keyword = "DNS"; + } + { + name = "EventBrite"; + url = "https://www.eventbrite.ca/d/canada--winnipeg/events--today/winnipeg/?page=1"; + tags = [ + "eventbrite" + "event" + "brite" + ]; + keyword = "Event"; + } + { + name = "Google Maps"; + url = "https://www.google.com/maps"; + tags = [ + "maps" + "google" + ]; + keyword = "Map"; + } + { + name = "ListenBrainz"; + url = "https://listenbrainz.org/user/BRBWaffles"; + tags = [ + "listenbrainz" + "listen" + "brains" + ]; + keyword = "Listen"; + } + { + name = "Memory Express"; + url = "https://www.memoryexpress.com"; + tags = [ + "memoryexpress" + "memory" + "mem" + "express" + ]; + keyword = "Mem"; + } + { + name = "Percentage Calculator"; + url = "https://percentagecalculator.net"; + tags = [ + "percentage" + "percent" + "calculator" + ]; + keyword = "Percent"; + } + { + name = "Portchecker"; + url = "https://portchecker.co"; + tags = [ + "portchecker" + "port" + "checker" + ]; + keyword = "Port"; + } + { + name = "Proof Tree"; + url = "https://www.umsu.de/trees"; + tags = [ + "proof" + "tree" + "logic" + "academic" + ]; + keyword = "Logic"; + } + { + name = "RhymeZone"; + url = "https://www.rhymezone.com"; + tags = [ + "rhymezone" + "rhyme" + "zone" + ]; + keyword = "Rhyme"; + } + { + name = "Sci-Hub"; + url = "https://sci-hub.ee"; + tags = [ + "sci" + "sci-hub" + "scihub" + "science" + "research" + "academic" + "torrent" + ]; + keyword = "Sci"; + } + { + name = "Speedtest"; + url = "https://www.speedtest.net"; + tags = [ + "speedtest" + "speed" + "test" + ]; + keyword = "Speed"; + } + { + name = "Stanford Encyclopedia of Philosophy"; + url = "https://plato.stanford.edu"; + tags = [ + "standford" + "encyclopedia" + "philosophy" + "phil" + ]; + keyword = "Phil"; + } + { + name = "Telus (Billing)"; + url = "https://www.telus.com/my-telus/billing/summary"; + tags = [ + "telus" + "phone" + "bills" + "money" + ]; + keyword = "Telus"; + } + { + name = "TinEye"; + url = "https://tineye.com"; + tags = [ + "tineye" + "tin" + "eye" + ]; + keyword = "Tin"; + } + { + name = "Zotero Bibliography"; + url = "https://zbib.org"; + tags = [ + "votero" + "bibliography" + "bib" + "zbib" + ]; + keyword = "Bib"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tracking.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tracking.nix new file mode 100755 index 0000000..f68ddba --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/config/tracking.nix @@ -0,0 +1,44 @@ +{ + name = "Tracking"; + toolbar = false; + bookmarks = [ + { + name = "1337"; + url = "https://1337x.to"; + tags = [ + "torrent" + "1337" + ]; + keyword = "1337"; + } + { + name = "Core Radio"; + url = "https://coreradio.online"; + tags = [ + "core" + "radio" + "metal" + ]; + keyword = "Core"; + } + { + name = "Metal Tracker"; + url = "https://en.metal-tracker.com"; + tags = [ + "metaltracker" + "metal" + "tracker" + ]; + keyword = "Metal"; + } + { + name = "Torrent Leech"; + url = "https://www.torrentleech.org"; + tags = [ + "torrent" + "leech" + ]; + keyword = "Leech"; + } + ]; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/bookmarks/default.nix b/modules/home/gui/apps/browsers/floorp/config/bookmarks/default.nix new file mode 100755 index 0000000..5d338de --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/bookmarks/default.nix @@ -0,0 +1,34 @@ +{ flake, ... }: +let + configPath = ./config; + flakedPath = configPath + /flake; + + filterFiles = name: builtins.match ".*\\.nix$" name != null; + + regularBookmarks = + let + files = builtins.attrNames (builtins.readDir configPath); + in + builtins.foldl' ( + emptyList: bookmarkFile: emptyList ++ (import (configPath + "/${bookmarkFile}")).bookmarks + ) [ ] (builtins.filter filterFiles files); + + flakedBookmarks = + let + files = builtins.attrNames (builtins.readDir flakedPath); + in + builtins.foldl' ( + emptyList: bookmarkFile: + emptyList + ++ (import (flakedPath + "/${bookmarkFile}") { + inherit + flake + ; + }).bookmarks + ) [ ] (builtins.filter filterFiles files); + + aggregatedBookmarks = regularBookmarks ++ flakedBookmarks; +in +{ + bookmarks = aggregatedBookmarks; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/extensions/default.nix b/modules/home/gui/apps/browsers/floorp/config/extensions/default.nix new file mode 100755 index 0000000..18545ac --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/extensions/default.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +{ + extensions.packages = builtins.attrValues { + inherit (pkgs.nur.repos.rycee.firefox-addons) + bitwarden + enhancer-for-youtube + sponsorblock + ublock-origin + unpaywall + vimium + side-view + ; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/academic.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/academic.nix new file mode 100755 index 0000000..57889a4 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/academic.nix @@ -0,0 +1,19 @@ +{ + "Sci-Hub" = { + definedAliases = [ + "@sc" + ]; + icon = ./icons/sc.png; + urls = [ + { template = "https://sci-hub.ee/{searchTerms}"; } + ]; + }; + "Wikipedia" = { + definedAliases = [ + "@wi" + ]; + urls = [ + { template = "https://en.wikipedia.org/wiki/{searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/development.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/development.nix new file mode 100755 index 0000000..6e557b2 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/development.nix @@ -0,0 +1,69 @@ +{ + "DNS Checker" = { + definedAliases = [ + "@dn" + ]; + icon = ./icons/dn.png; + urls = [ + { template = "https://dnschecker.org/#A/{searchTerms}"; } + ]; + }; + "Hackage" = { + definedAliases = [ + "@ha" + ]; + icon = ./icons/ha.png; + urls = [ + { template = "https://hackage.haskell.org/packages/search?terms={searchTerms}"; } + ]; + }; + "Hoogle" = { + definedAliases = [ + "@ho" + ]; + icon = ./icons/ho.png; + urls = [ + { template = "https://www.stackage.org/lts-22.33/hoogle?q={searchTerms}"; } + ]; + }; + "Nix Home Manager" = { + definedAliases = [ + "@nh" + ]; + icon = ./icons/nx.png; + urls = [ + { template = "https://searchix.alanpearce.eu/options/home-manager/search?query={searchTerms}"; } + ]; + }; + "Nix Options" = { + definedAliases = [ + "@no" + ]; + icon = ./icons/nx.png; + urls = [ + { + template = "https://search.nixos.org/options?channel=unstable&size=50&sort=relevance&type=packages&query={searchTerms}"; + } + ]; + }; + "Nix Packages" = { + definedAliases = [ + "@np" + ]; + icon = ./icons/nx.png; + urls = [ + { + template = "https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&type=packages&query={searchTerms}"; + } + ]; + }; + "Nix Wiki" = { + definedAliases = [ + "@nw" + ]; + icon = ./icons/nx.png; + urls = [ + { template = "https://nixos.wiki/index.php?search={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/jf.png b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/jf.png new file mode 100755 index 0000000..1709e06 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/jf.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/pt.png b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/pt.png new file mode 100755 index 0000000..98b4b62 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/pt.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/sx.png b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/sx.png new file mode 100755 index 0000000..85b11d6 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/icons/sx.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/flake/selfHosted.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/selfHosted.nix new file mode 100755 index 0000000..0c4ccf4 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/flake/selfHosted.nix @@ -0,0 +1,41 @@ +{ flake, ... }: +let + inherit (flake.config.services) + instances + ; +in +{ + "${instances.jellyfin.label}" = { + definedAliases = [ + "@jf" + ]; + icon = ./icons/jf.png; + urls = [ + { + template = "https://${instances.jellyfin.subdomain}.${instances.web.domains.url0}/web/#/search.html?query={searchTerms}"; + } + ]; + }; + "${instances.peertube.label}" = { + definedAliases = [ + "@pt" + ]; + icon = ./icons/pt.png; + urls = [ + { + template = "https://${instances.peertube.subdomain}.${instances.web.domains.url1}/search?search={searchTerms}"; + } + ]; + }; + "${instances.searx.label}" = { + definedAliases = [ + "@sx" + ]; + icon = ./icons/sx.png; + urls = [ + { + template = "https://${instances.searx.subdomain}.${instances.web.domains.url0}/search?q={searchTerms}"; + } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/gaming.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/gaming.nix new file mode 100755 index 0000000..59538e2 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/gaming.nix @@ -0,0 +1,21 @@ +{ + "Proton DB" = { + definedAliases = [ + "@pd" + ]; + icon = ./icons/pd.png; + urls = [ + { template = "https://www.protondb.com/search?q={searchTerms}"; } + ]; + }; + + "Steam DB" = { + definedAliases = [ + "@sd" + ]; + icon = ./icons/sd.png; + urls = [ + { template = "https://steamdb.info/search/?a=all&q={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/hidden.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/hidden.nix new file mode 100755 index 0000000..3a0160c --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/hidden.nix @@ -0,0 +1,7 @@ +{ + "Amazon.ca".metaData.hidden = true; + "Bing".metaData.hidden = true; + "eBay".metaData.hidden = true; + "Google".metaData.hidden = true; + "Wikipedia (en)".metaData.hidden = true; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/13.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/13.png new file mode 100755 index 0000000..8bef493 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/13.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/al.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/al.png new file mode 100755 index 0000000..a8420f6 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/al.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/am.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/am.png new file mode 100755 index 0000000..afd11bb Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/am.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/br.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/br.png new file mode 100755 index 0000000..74a4557 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/br.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/cr.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/cr.png new file mode 100755 index 0000000..4625510 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/cr.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/dn.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/dn.png new file mode 100755 index 0000000..d7347a6 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/dn.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/do.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/do.png new file mode 100755 index 0000000..0b78a5f Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/do.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/fy.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/fy.png new file mode 100755 index 0000000..34341e0 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/fy.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ha.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ha.png new file mode 100755 index 0000000..972d5ad Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ha.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ho.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ho.png new file mode 100755 index 0000000..04e4623 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ho.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ka.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ka.png new file mode 100755 index 0000000..612d510 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ka.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ki.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ki.png new file mode 100755 index 0000000..9d650e3 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ki.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/me.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/me.png new file mode 100755 index 0000000..8f9bb1c Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/me.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ne.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ne.png new file mode 100755 index 0000000..3683220 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ne.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/nx.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/nx.png new file mode 100755 index 0000000..8a00594 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/nx.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pd.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pd.png new file mode 100755 index 0000000..80264ad Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pd.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ph.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ph.png new file mode 100755 index 0000000..b049088 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ph.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pi.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pi.png new file mode 100755 index 0000000..9dbe973 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/pi.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/re.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/re.png new file mode 100755 index 0000000..4365d5b Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/re.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/rz.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/rz.png new file mode 100755 index 0000000..08a642f Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/rz.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sb.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sb.png new file mode 100755 index 0000000..ecb7055 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sb.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sc.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sc.png new file mode 100755 index 0000000..85fb3c3 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sc.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sd.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sd.png new file mode 100755 index 0000000..206935d Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sd.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sk.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sk.png new file mode 100755 index 0000000..1707950 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/sk.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tl.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tl.png new file mode 100755 index 0000000..985ebfb Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tl.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tw.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tw.png new file mode 100755 index 0000000..a34710a Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/tw.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ur.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ur.png new file mode 100755 index 0000000..252ce67 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/ur.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/vs.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/vs.png new file mode 100755 index 0000000..122ae5e Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/vs.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/wi.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/wi.png new file mode 100755 index 0000000..802344a Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/wi.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xh.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xh.png new file mode 100755 index 0000000..df33a22 Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xh.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xv.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xv.png new file mode 100755 index 0000000..2a367fc Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/xv.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/icons/yo.png b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/yo.png new file mode 100755 index 0000000..ce619ae Binary files /dev/null and b/modules/home/gui/apps/browsers/floorp/config/search/config/icons/yo.png differ diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/shopping.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/shopping.nix new file mode 100755 index 0000000..9db95bb --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/shopping.nix @@ -0,0 +1,58 @@ +{ + "Amazon" = { + definedAliases = [ + "@am" + ]; + icon = ./icons/am.png; + urls = [ + { template = "https://www.amazon.ca/s?k={searchTerms}&ref=nav_bb_sb"; } + ]; + }; + "Door Dash" = { + definedAliases = [ + "@do" + ]; + icon = ./icons/do.png; + urls = [ + { template = "https://www.doordash.com/search/store/{searchTerms}"; } + ]; + }; + "FYT Supplies" = { + definedAliases = [ + "@fy" + ]; + icon = ./icons/fy.png; + urls = [ + { + template = "https://fytsupplies.ca/search?type=product%2Carticle%2Cpage%2Ccollection&options[prefix]=last&q={searchTerms}*"; + } + ]; + }; + "Kijiji" = { + definedAliases = [ + "@ki" + ]; + icon = ./icons/ki.png; + urls = [ + { template = "https://www.kijiji.ca/b-winnipeg/{searchTerms}"; } + ]; + }; + "Memory Express" = { + definedAliases = [ + "@me" + ]; + icon = ./icons/me.png; + urls = [ + { template = "https://www.memoryexpress.com/Search/Products?Search={searchTerms}"; } + ]; + }; + "Skip The Dishes" = { + definedAliases = [ + "@sk" + ]; + icon = ./icons/sk.png; + urls = [ + { template = "https://www.skipthedishes.com/winnipeg/items?search={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/socialMedia.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/socialMedia.nix new file mode 100755 index 0000000..37813d1 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/socialMedia.nix @@ -0,0 +1,29 @@ +{ + "Reddit" = { + definedAliases = [ + "@re" + ]; + icon = ./icons/re.png; + urls = [ + { template = "https://www.reddit.com/search/?q={searchTerms}"; } + ]; + }; + "YouTube" = { + definedAliases = [ + "@yo" + ]; + icon = ./icons/yo.png; + urls = [ + { template = "https://www.youtube.com/results?search_query={searchTerms}"; } + ]; + }; + "X" = { + definedAliases = [ + "@tw" + ]; + icon = ./icons/tw.png; + urls = [ + { template = "https://x.com/search?q={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/spank.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/spank.nix new file mode 100755 index 0000000..fedc206 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/spank.nix @@ -0,0 +1,29 @@ +{ + "Spankbang" = { + definedAliases = [ + "@sb" + ]; + icon = ./icons/sb.png; + urls = [ + { template = "https://spankbang.com/s/{searchTerms}/"; } + ]; + }; + "XHampster" = { + definedAliases = [ + "@xh" + ]; + icon = ./icons/xh.png; + urls = [ + { template = "https://xhamster.com/search/{searchTerms}"; } + ]; + }; + "XVideos" = { + definedAliases = [ + "@xv" + ]; + icon = ./icons/xv.png; + urls = [ + { template = "https://www.xvideos.com/?k={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/tools.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/tools.nix new file mode 100755 index 0000000..fc0265d --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/tools.nix @@ -0,0 +1,40 @@ +{ + "AlternativeTo" = { + definedAliases = [ + "@al" + ]; + icon = ./icons/al.png; + urls = [ + { template = "https://alternativeto.net/browse/search/?q={searchTerms}"; } + ]; + }; + "Rhyme Zone" = { + definedAliases = [ + "@rz" + ]; + icon = ./icons/rz.png; + urls = [ + { + template = "https://www.rhymezone.com/r/rhyme.cgi?Word={searchTerms}&typeofrhyme=perfect&org1=syl&org2=l&org3=y"; + } + ]; + }; + "Urban Dictionary" = { + definedAliases = [ + "@ur" + ]; + icon = ./icons/ur.png; + urls = [ + { template = "https://www.urbandictionary.com/define.php?term={searchTerms}"; } + ]; + }; + "Stanford Encyclopedia of Philosophy" = { + definedAliases = [ + "@ph" + ]; + icon = ./icons/ph.png; + urls = [ + { template = "https://plato.stanford.edu/search/searcher.py?query={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/tracking.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/tracking.nix new file mode 100755 index 0000000..ee72fcd --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/tracking.nix @@ -0,0 +1,49 @@ +{ + "1337x" = { + definedAliases = [ + "@13" + ]; + icon = ./icons/13.png; + urls = [ + { template = "https://1337x.to/search/{searchTerms}/1/"; } + ]; + }; + "Core Radio" = { + definedAliases = [ + "@cr" + ]; + icon = ./icons/cr.png; + urls = [ + { template = "https://coreradio.online/?do=search&subaction=search&story={searchTerms}"; } + ]; + }; + "The Pirate Bay" = { + definedAliases = [ + "@pi" + ]; + icon = ./icons/pi.png; + urls = [ + { + template = "https://thepiratebay.org/search.php?q={searchTerms}&all=on&search=Pirate+Search&page=0&orderby="; + } + ]; + }; + "Torrent Leech" = { + definedAliases = [ + "@tl" + ]; + icon = ./icons/tl.png; + urls = [ + { template = "https://www.torrentleech.org/torrents/browse/index/query/{searchTerms}"; } + ]; + }; + "VSTorrent" = { + definedAliases = [ + "@vs" + ]; + icon = ./icons/vs.png; + urls = [ + { template = "https://vstorrent.org/?s={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/config/web.nix b/modules/home/gui/apps/browsers/floorp/config/search/config/web.nix new file mode 100755 index 0000000..e2946e3 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/config/web.nix @@ -0,0 +1,20 @@ +{ + "Brave" = { + definedAliases = [ + "@br" + ]; + icon = ./icons/br.png; + urls = [ + { template = "https://search.brave.com/search?q={searchTerms}&source=web"; } + ]; + }; + "Kagi" = { + definedAliases = [ + "@ka" + ]; + icon = ./icons/ka.png; + urls = [ + { template = "https://kagi.com/search?q={searchTerms}"; } + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/search/default.nix b/modules/home/gui/apps/browsers/floorp/config/search/default.nix new file mode 100755 index 0000000..87687b4 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/search/default.nix @@ -0,0 +1,54 @@ +{ flake, ... }: +let + configPath = ./config; + flakedPath = configPath + /flake; + + regularSearchEngines = + let + files = builtins.attrNames (builtins.readDir configPath); + in + builtins.foldl' ( + emptySet: searchEngine: emptySet // (import (configPath + "/${searchEngine}")) + ) { } (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); + + flakedSearchEngines = + let + files = builtins.attrNames (builtins.readDir flakedPath); + in + builtins.foldl' ( + emptySet: searchEngine: + emptySet + // (import (flakedPath + "/${searchEngine}") { + inherit + flake + ; + }) + ) { } (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); + + aggregatedSearchEngines = regularSearchEngines // flakedSearchEngines; +in +{ + search = { + force = true; + default = "Brave"; + engines = aggregatedSearchEngines; + order = [ + "AlternativeTo" + "Core Radio" + "Hackage" + "Hoogle" + "Jellyfin" + "SearXNG" + "Nix Home Manager" + "Nix Options" + "Nix Packages" + "Nix Wiki" + "PeerTube" + "Sci-Hub" + "Torrent Leech" + "Urban Dictionary" + "Wikipedia" + "YouTube" + ]; + }; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/cosmetics.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/cosmetics.nix new file mode 100755 index 0000000..ffa4740 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/cosmetics.nix @@ -0,0 +1,43 @@ +{ + "ui.systemUsesDarkTheme" = 1; + "browser.aboutConfig.showWarning" = false; + "browser.aboutwelcome.enabled" = false; + "browser.bookmarks.addedImportButton" = false; + "browser.toolbars.bookmarks.visibility" = "never"; + "browser.urlbar.suggest.history" = false; + "browser.urlbar.suggest.bookmark" = true; + "browser.urlbar.suggest.openpage" = false; + "browser.urlbar.suggest.shortcut" = false; + "browser.urlbar.suggest.topsites" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.suggest.engines" = false; + "browser.urlbar.suggest.recentsearches" = false; + "dom.forms.autocomplete.formautofill" = true; + "extensions.pocket.enabled" = false; + "general.autoScroll" = true; + "media.eme.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.compactmode.show" = true; + "browser.display.use_document_fonts" = true; + "gfx.downloadable_fonts.enabled" = true; + "services.sync.prefs.sync.floorp.optimized.verticaltab" = true; + "floorp.verticaltab.show.newtab.button" = true; + "floorp.verticaltab.paddingtop.enabled" = false; + "floorp.browser.native.verticaltabs.enabled" = true; + "floorp.browser.tabs.verticaltab" = true; + "browser.tabs.firefox-view" = false; + "browser.tabs.firefox-view-newIcon" = true; + "floorp.Tree-type.verticaltab.optimization" = true; + "floorp.browser.sidebar.enable" = false; + "floorp.browser.tabs.openNewTabPosition" = 1; + "services.sync.prefs.sync.floorp.browser.note.memos" = false; + "floorp.disable.fullscreen.notification" = true; + "floorp.browser.user.interface" = 1; + "browser.newtabpage.activity-stream.floorp.background.type" = 0; + "browser.startup.homepage" = "chrome://browser/content/blanktab.html"; + "browser.newtabpage.enabled" = false; + "browser.newtabpage.activity-stream.floorp.newtab.releasenote.hide" = true; + "browser.urlbar.suggest.clipboard" = false; + "browser.newtabpage.activity-stream.discoverystream.personalization.enabled" = false; + "floorp.browser.workspaces.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/diskAvoidance.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/diskAvoidance.nix new file mode 100755 index 0000000..0217bee --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/diskAvoidance.nix @@ -0,0 +1,9 @@ +{ + # DISK AVOIDANCE + "browser.cache.disk.enable" = false; + "browser.privatebrowsing.forceMediaMemoryCache" = true; + "media.memory_cache_max_size" = 65536; + "browser.sessionstore.privacy_level" = 2; + "toolkit.winRegisterApplicationRestart" = false; + "browser.shell.shortcutFavicons" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/fingerprinting.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/fingerprinting.nix new file mode 100755 index 0000000..606b129 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/fingerprinting.nix @@ -0,0 +1,18 @@ +{ + # FPP (fingerprintingProtection) + "privacy.fingerprintingProtection.pbmode" = true; + "privacy.fingerprintingProtection" = true; + + # RFP (resistFingerprinting) + "privacy.resistFingerprinting" = false; + "privacy.window.maxInnerWidth" = 1600; + "privacy.window.maxInnerHeight" = 900; + "privacy.resistFingerprinting.block_mozAddonManager" = true; + "privacy.resistFingerprinting.letterboxing" = false; + "privacy.spoof_english" = 1; + "browser.display.use_system_colors" = false; + "widget.non-native-theme.enabled" = true; + "browser.link.open_newwindow" = 3; + "browser.link.open_newwindow.restriction" = 0; + "webgl.disabled" = true; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/formFill.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/formFill.nix new file mode 100755 index 0000000..767fd2d --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/formFill.nix @@ -0,0 +1,14 @@ +{ + # LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS + "browser.formfill.enable" = false; + "browser.search.separatePrivateDefault.ui.enabled" = true; + "browser.search.separatePrivateDefault" = true; + "browser.search.suggest.enabled" = false; + "browser.urlbar.maxRichResults" = 16; + "browser.urlbar.speculativeConnect.enabled" = false; + "extensions.formautofill.addresses.enabled" = false; + "extensions.formautofill.addresses.supported" = "on"; + "extensions.formautofill.addresses.usage.hasEntry" = true; + "extensions.formautofill.creditCards.enabled" = false; + "extensions.formautofill.heuristics.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/geolocation.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/geolocation.nix new file mode 100755 index 0000000..cc5924e --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/geolocation.nix @@ -0,0 +1,8 @@ +{ + "geo.provider.network.url" = + "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"; + "geo.provider.ms-windows-location" = false; + "geo.provider.use_corelocation" = false; + "geo.provider.use_gpsd" = false; + "geo.provider.use_geoclue" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/hardening.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/hardening.nix new file mode 100755 index 0000000..14a3ab1 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/hardening.nix @@ -0,0 +1,16 @@ +{ + # OPTIONAL HARDENING + # These settings are commented out in the original template; uncomment if needed + # "mathml.disabled" = true; + # "svg.disabled" = true; + # "gfx.font_rendering.graphite.enabled" = false; + # "javascript.options.asmjs" = false; + # "javascript.options.ion" = false; + # "javascript.options.baselinejit" = false; + # "javascript.options.jit_trustedprincipals" = true; + # "javascript.options.wasm" = false; + # "gfx.font_rendering.opentype_svg.enabled" = false; + # "media.eme.enabled" = false; + # "browser.eme.ui.enabled" = false; + # "network.dns.disableIPv6" = true; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/https.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/https.nix new file mode 100755 index 0000000..85aff20 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/https.nix @@ -0,0 +1,14 @@ +{ + # HTTPS (SSL/TLS / OCSP / CERTS / HPKP) + "security.ssl.require_safe_negotiation" = true; + "security.tls.enable_0rtt_data" = false; + "security.OCSP.enabled" = 1; + "security.OCSP.require" = true; + "security.cert_pinning.enforcement_level" = 2; + "security.remote_settings.crlite_filters.enabled" = true; + "security.pki.crlite_mode" = 2; + "dom.security.https_only_mode" = true; + "dom.security.https_only_mode_send_http_background_request" = false; + "security.ssl.treat_unsafe_negotiation_as_broken" = true; + "browser.xul.error_pages.expert_bad_cert" = true; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/misc.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/misc.nix new file mode 100755 index 0000000..5b60b2f --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/misc.nix @@ -0,0 +1,26 @@ +{ + # CONTAINERS + "privacy.userContext.enabled" = true; + "privacy.userContext.ui.enabled" = true; + # DOM (DOCUMENT OBJECT MODEL) + "dom.disable_window_move_resize" = true; + # MISCELLANEOUS + "browser.safebrowsing.downloads.remote.enabled" = false; + "browser.download.start_downloads_in_tmp_dir" = true; + "browser.helperApps.deleteTempFileOnExit" = true; + "browser.uitour.enabled" = false; + "devtools.debugger.remote-enabled" = false; + "network.IDN_show_punycode" = true; + "pdfjs.disabled" = false; + "pdfjs.enableScripting" = false; + # PLUGINS / MEDIA / WEBRTC + "media.peerconnection.ice.proxy_only_if_behind_proxy" = true; + "media.peerconnection.ice.default_address_only" = true; + # REFERERS + "network.http.referer.XOriginTrimmingPolicy" = 2; + # NON-PROJECT RELATED + # "browser.startup.homepage_override.mstone" = "ignore"; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + "browser.urlbar.showSearchTerms.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/noTouching.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/noTouching.nix new file mode 100755 index 0000000..5055c4c --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/noTouching.nix @@ -0,0 +1,11 @@ +{ + # DON'T TOUCH + "extensions.blocklist.enabled" = true; + "network.http.referer.spoofSource" = false; + "security.dialog_enable_delay" = 1000; + "privacy.firstparty.isolate" = false; + "extensions.webcompat.enable_shims" = true; + "security.tls.version.enable-deprecated" = false; + "extensions.webcompat-reporter.enabled" = false; + "extensions.quarantinedDomains.enabled" = true; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/opSec.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/opSec.nix new file mode 100755 index 0000000..ce59f5c --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/opSec.nix @@ -0,0 +1,11 @@ +{ + # ETP (ENHANCED TRACKING PROTECTION) + "browser.contentblocking.category" = "strict"; + # OPTIONAL OPSEC + "browser.download.useDownloadDir" = false; + "browser.download.alwaysOpenPanel" = false; + "browser.download.manager.addToRecentDocs" = false; + "browser.download.always_ask_before_handling_new_types" = true; + "extensions.enabledScopes" = 5; + "extensions.postDownloadThirdPartyPrompt" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/outbound.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/outbound.nix new file mode 100755 index 0000000..41af8b5 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/outbound.nix @@ -0,0 +1,9 @@ +{ + # BLOCK IMPLICIT OUTBOUND + "network.prefetch-next" = false; + "network.dns.disablePrefetch" = true; + "network.predictor.enabled" = false; + "network.predictor.enable-prefetch" = false; + "network.http.speculative-parallel-limit" = 0; + "browser.places.speculativeConnect.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/passwords.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/passwords.nix new file mode 100755 index 0000000..f3046a4 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/passwords.nix @@ -0,0 +1,7 @@ +{ + # PASSWORDS + "network.auth.subresource-http-auth-allow" = 1; + "signon.autofillForms" = false; + "signon.formlessCapture.enabled" = false; + "signon.rememberSignons" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/privacy.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/privacy.nix new file mode 100755 index 0000000..baf40f5 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/privacy.nix @@ -0,0 +1,24 @@ +{ + # SHUTDOWN & SANITIZING + "privacy.sanitize.sanitizeOnShutdown" = false; + "privacy.clearOnShutdown.cache" = true; + "privacy.clearOnShutdown.downloads" = true; + "privacy.clearOnShutdown.formdata" = true; + "privacy.clearOnShutdown.history" = true; + "privacy.clearOnShutdown.cookies" = true; + "privacy.clearOnShutdown.offlineApps" = true; + "privacy.clearOnShutdown.sessions" = false; + "privacy.clearSiteData.cache" = true; + "privacy.clearSiteData.historyFormDataAndDownloads" = true; + "privacy.clearHistory.cache" = true; + "privacy.clearHistory.cookiesAndStorage" = false; + "privacy.clearHistory.historyFormDataAndDownloads" = true; + "privacy.cpd.sessions" = true; + # SHUTDOWN & SANITIZING (continued) + "privacy.clearOnShutdown_v2.cache" = true; + "privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true; + "privacy.clearOnShutdown_v2.cookiesAndStorage" = true; + "privacy.donottrackheader.enabled" = true; + "privacy.globalprivacycontrol.enabled" = true; + "places.history.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/proxy.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/proxy.nix new file mode 100755 index 0000000..4ea0f00 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/proxy.nix @@ -0,0 +1,6 @@ +{ + # DNS / DoH / PROXY / SOCKS + "network.proxy.socks_remote_dns" = true; + "network.file.disable_unc_paths" = true; + "network.gio.supported-protocols" = ""; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/startup.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/startup.nix new file mode 100755 index 0000000..acd675b --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/startup.nix @@ -0,0 +1,20 @@ +{ + "browser.newtab.url" = "about:home"; + "browser.newtabpage.activity-stream.default.sites" = ""; + "browser.newtabpage.activity-stream.feeds.system.topstories" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.newtabpage.activity-stream.showRecentSaves" = false; + "browser.newtabpage.activity-stream.showSearch" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.showWeather" = false; + "browser.newtabpage.enabled" = true; + "browser.startup.homepage" = "about:home"; + "browser.startup.page" = 1; + "browser.tabs.closeWindowWithLastTab" = false; + "browser.tabs.firefox-view-newIcon" = false; + "browser.tabs.firefox-view" = false; + "browser.tabs.inTitlebar" = 1; + "browser.tabs.loadBookmarksInBackground" = true; + "browser.tabs.tabmanager.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/config/telemetry.nix b/modules/home/gui/apps/browsers/floorp/config/settings/config/telemetry.nix new file mode 100755 index 0000000..777909b --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/config/telemetry.nix @@ -0,0 +1,29 @@ +{ + "extensions.getAddons.showPane" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "browser.discovery.enabled" = false; + "browser.shopping.experience2023.enabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "app.shield.optoutstudies.enabled" = false; + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "breakpad.reportURL" = ""; + "browser.tabs.crashReporting.sendReport" = false; + "network.captive-portal-service.enabled" = false; + "network.connectivity-service.enabled" = false; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/settings/default.nix b/modules/home/gui/apps/browsers/floorp/config/settings/default.nix new file mode 100755 index 0000000..9644f42 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/settings/default.nix @@ -0,0 +1,14 @@ +let + configPath = ./config; + + aggregatedSettings = + let + files = builtins.attrNames (builtins.readDir configPath); + in + builtins.foldl' ( + emptySet: settingsFile: emptySet // (import (configPath + "/${settingsFile}")) + ) { } (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); +in +{ + settings = aggregatedSettings; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/themes/config/userChrome.css b/modules/home/gui/apps/browsers/floorp/config/themes/config/userChrome.css new file mode 100755 index 0000000..732818b --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/themes/config/userChrome.css @@ -0,0 +1,170 @@ +* { + font-size: 13px !important; +} + +/* Title bar */ +.titlebar-spacer { + display: none !important; +} + +/* Tab bar */ +#navigator-toolbox { + border: 0px !important; +} +#TabsToolbar { + margin-left: 3px !important; +} +#TabsToolbar > .tabbrowser-arrowscrollbox { + overflow: visible !important; +} + +.titlebar-buttonbox-container { + display: none !important; +} + +/* Remove placeholder text in the URL bar */ +#urlbar-input::placeholder { + color: transparent !important; +} +#urlbar { + padding: 2px !important; +} + +/* Hide URL bar text */ +#urlbar-background { + border: none !important; +} + +#urlbar-border:focus-within { + overflow: visible; + height: auto; +} + +/* Hide tracking protection icon */ +#tracking-protection-icon-container { + display: none !important; +} +#urlbar-container { + width: auto !important; +} +#urlbar { + box-shadow: none !important; +} +#page-action-buttons { + display: none !important; +} + +#urlbar-input { + padding-left: 8px !important; +} + +/* Hide site information button */ +#identity-box { + display: none !important; +} + +/* Hide shield icon */ +#tracking-protection-icon-container { + display: none !important; +} + +/* Hide forward and back buttons when not active */ +#back-button[disabled="true"] { + display: none !important; +} +#forward-button[disabled="true"] { + display: none !important; +} +.personalize-button { + display: none !important; +} + +.tab-close-button { + visibility: hidden !important; + margin-inline-end: 0 !important; + width: 16px !important; + height: 16px !important; + padding: 2px !important; + opacity: 0 !important; + transition: visibility 0.1s, opacity 0.1s ease-in-out !important; +} + +.tabbrowser-tab:hover .tab-close-button { + visibility: visible !important; + opacity: 1 !important; +} + +/* One-Line Tweak */ +:root { + --navbarWidth: clamp(300px, 30vw, 30vw); + --animationSpeed: 0.15s; +} + + +/* Oneline tweak */ +#TabsToolbar { + margin-left: var(--navbarWidth) !important; +} + +#nav-bar { + margin-right: calc(100vw - var(--navbarWidth)) !important; +} + +#urlbar-container { + min-width: 0px !important; +} + +:root[uidensity="compact"] #nav-bar { + margin-top: -37px !important; + height: 37px !important; +} + +:root:not([uidensity="compact"]):not([uidensity="touch"]) #nav-bar { + margin-top: -44px !important; + height: 44px !important; +} + +:root[uidensity="touch"] #nav-bar { + margin-top: -49px !important; + height: 49px !important; +} + + +/* Dragging space */ +:root[sizemode="maximized"] #TabsToolbar { + margin-top: 1px; +} + +#TabsToolbar { + margin-top: 5px; +} + + +/* Simplifying interface */ +#nav-bar { + background: none !important; + box-shadow: none !important; +} + +#navigator-toolbox { + border: none !important; +} + +.titlebar-spacer { + display: none !important; +} + +#urlbar-background { + border: none !important; +} + +#urlbar:not(:hover):not([breakout][breakout-extend])>#urlbar-background { + box-shadow: none !important; + background: none !important; +} + +/* Add tab width constraints */ +.tabbrowser-tab { + min-width: 80px !important; + max-width: 150px !important; +} diff --git a/modules/home/gui/apps/browsers/floorp/config/themes/default.nix b/modules/home/gui/apps/browsers/floorp/config/themes/default.nix new file mode 100755 index 0000000..0d3f0ac --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/config/themes/default.nix @@ -0,0 +1,3 @@ +{ + userChrome = builtins.readFile ./config/userChrome.css; +} diff --git a/modules/home/gui/apps/browsers/floorp/default.nix b/modules/home/gui/apps/browsers/floorp/default.nix new file mode 100755 index 0000000..aeec0d9 --- /dev/null +++ b/modules/home/gui/apps/browsers/floorp/default.nix @@ -0,0 +1,45 @@ +{ + pkgs, + flake, + ... +}: +let + inherit (flake.config.people) + user0 + ; +in +{ + programs.floorp = + let + configPath = ./config; + bookmarksPath = import (configPath + /bookmarks) { inherit flake; }; + extensionsPath = import (configPath + /extensions) { inherit pkgs; }; + searchPath = import (configPath + /search) { inherit flake; }; + settingsPath = import (configPath + /settings); + themesPath = import (configPath + /themes); + in + + { + enable = true; + profiles = { + ${user0} = + { + isDefault = true; + id = 0; + } + // bookmarksPath + // extensionsPath + // searchPath + // settingsPath + // themesPath; + testing = + { + isDefault = false; + id = 1; + } + // bookmarksPath + // searchPath + // themesPath; + }; + }; +} diff --git a/modules/home/gui/apps/browsers/ladybird/default.nix b/modules/home/gui/apps/browsers/ladybird/default.nix new file mode 100755 index 0000000..68b8aed --- /dev/null +++ b/modules/home/gui/apps/browsers/ladybird/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ladybird + ; + }; +} diff --git a/modules/home/gui/apps/browsers/opera/default.nix b/modules/home/gui/apps/browsers/opera/default.nix new file mode 100755 index 0000000..12922ed --- /dev/null +++ b/modules/home/gui/apps/browsers/opera/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + opera + ; + }; +} diff --git a/modules/home/gui/apps/browsers/tor/default.nix b/modules/home/gui/apps/browsers/tor/default.nix new file mode 100755 index 0000000..d96d1ba --- /dev/null +++ b/modules/home/gui/apps/browsers/tor/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + tor-browser + ; + }; +} diff --git a/modules/home/gui/apps/browsers/vivaldi/default.nix b/modules/home/gui/apps/browsers/vivaldi/default.nix new file mode 100755 index 0000000..7995243 --- /dev/null +++ b/modules/home/gui/apps/browsers/vivaldi/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + vivaldi + ; + }; +} diff --git a/modules/home/gui/apps/code/cursor/default.nix b/modules/home/gui/apps/code/cursor/default.nix new file mode 100755 index 0000000..d723b2a --- /dev/null +++ b/modules/home/gui/apps/code/cursor/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + code-cursor + ; + }; +} diff --git a/modules/home/gui/apps/code/default.nix b/modules/home/gui/apps/code/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/code/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/code/vsCode/config/extensions.nix b/modules/home/gui/apps/code/vsCode/config/extensions.nix new file mode 100755 index 0000000..d61d771 --- /dev/null +++ b/modules/home/gui/apps/code/vsCode/config/extensions.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: +with pkgs.vscode-extensions; +[ + catppuccin.catppuccin-vsc + eamodio.gitlens + elmtooling.elm-ls-vscode + esbenp.prettier-vscode + haskell.haskell + james-yu.latex-workshop + bbenoist.nix + # jnoortheen.nix-ide + mattn.lisp + mkhl.direnv + pkief.material-icon-theme + streetsidesoftware.code-spell-checker + tamasfe.even-better-toml + brettm12345.nixfmt-vscode +] diff --git a/modules/home/gui/apps/code/vsCode/config/keybindings.nix b/modules/home/gui/apps/code/vsCode/config/keybindings.nix new file mode 100755 index 0000000..37bbf0e --- /dev/null +++ b/modules/home/gui/apps/code/vsCode/config/keybindings.nix @@ -0,0 +1,27 @@ +[ + { + key = "ctrl+shift+s"; + command = "editor.action.insertCursorAtEndOfEachLineSelected"; + when = "textInputFocus"; + } + { + key = "ctrl+shift+a"; + command = "editor.action.quickFix"; + when = "editorHasCodeActionsProvider && textInputFocus && !editorReadonly"; + } + { + key = "ctrl+shift+f"; + command = "editor.action.formatDocument"; + when = "editorHasDocumentFormattingProvider && editorTextFocus && !editorReadonly && !inCompositeEditor"; + } + { + key = "ctrl+shift+tab"; + command = "editor.action.indentationToSpaces"; + when = "textInputFocus"; + } + { + key = "ctrl+shift+d"; + command = "editor.action.deleteLines"; + when = "textInputFocus"; + } +] diff --git a/modules/home/gui/apps/code/vsCode/config/userSettings.nix b/modules/home/gui/apps/code/vsCode/config/userSettings.nix new file mode 100755 index 0000000..e34977f --- /dev/null +++ b/modules/home/gui/apps/code/vsCode/config/userSettings.nix @@ -0,0 +1,40 @@ +{ + lib, + pkgs, + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + "git.confirmSync" = false; + "editor.insertSpaces" = false; + "files.autoSave" = "afterDelay"; + "git.enableSmartCommit" = true; + "nix.enableLanguageServer" = true; + "nix.serverPath" = lib.getExe pkgs.nil; + "nix.formatterPath" = lib.getExe pkgs.haskellPackages.nixfmt; + "window.menuBarVisibility" = "toggle"; + "workbench.iconTheme" = "material-icon-theme"; + "workbench.startupEditor" = "none"; + "workbench.colorTheme" = "Catppuccin Macchiato"; + "workbench.statusBar.visible" = false; + "editor.multiCursorLimit" = 700000; + "editor.wordWrap" = "on"; + "editor.fontSize" = fonts.sizes.applications.size0; + "editor.fontFamily" = "'${fonts.names.name0}', 'monospace', monospace"; + "terminal.integrated.fontSize" = fonts.sizes.applications.size0; + "terminal.integrated.fontFamily" = "'${fonts.names.name0}', 'monospace', monospace"; + "editor.fontLigatures" = true; + "elmLS.disableElmLSDiagnostics" = true; + "elmLS.elmReviewDiagnostics" = "warning"; + "elmLS.elmReviewPath" = + "/nix/store/r19y19rx5b7l4dzapbx1g64d30yisby1-elm-review-2.10.3/bin/elm-review"; + "editor.formatOnSave" = true; + "[elm]" = { + "editor.defaultFormatter" = "elmTooling.elm-ls-vscode"; + }; +} diff --git a/modules/home/gui/apps/code/vsCode/default.nix b/modules/home/gui/apps/code/vsCode/default.nix new file mode 100755 index 0000000..c95445b --- /dev/null +++ b/modules/home/gui/apps/code/vsCode/default.nix @@ -0,0 +1,36 @@ +{ + pkgs, + lib, + flake, + ... +}: +{ + programs = { + vscode = + let + configPath = ./config; + keybindingsPath = import (configPath + /keybindings.nix); + extensionsPath = import (configPath + /extensions.nix) { + inherit + pkgs + ; + }; + userSettingsPath = import (configPath + /userSettings.nix) { + inherit + pkgs + lib + flake + ; + }; + in + { + enable = true; + package = pkgs.vscode; + profiles.default = { + keybindings = keybindingsPath; + extensions = extensionsPath; + userSettings = userSettingsPath; + }; + }; + }; +} diff --git a/modules/home/gui/apps/code/zed/config/extensions/default.nix b/modules/home/gui/apps/code/zed/config/extensions/default.nix new file mode 100755 index 0000000..50b8858 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/extensions/default.nix @@ -0,0 +1,18 @@ +[ + "catppuccin" + "catppuccin-blur" + "cargo-appraiser" + "cargo-tom" + "markdown-oxide" + "material-dark" + "rose-pine-theme" + "material-theme" + "just" + "elm" + "haskell" + "nix" + "typst" + "nu" + "toml" + "xml" +] diff --git a/modules/home/gui/apps/code/zed/config/extraPackages/default.nix b/modules/home/gui/apps/code/zed/config/extraPackages/default.nix new file mode 100755 index 0000000..f64797c --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/extraPackages/default.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: +builtins.attrValues { + inherit (pkgs) + nil + nixfmt-rfc-style + nixd + wl-clipboard-rs + xsel + ; + inherit (pkgs.elmPackages) + elm-language-server + ; +} diff --git a/modules/home/gui/apps/code/zed/config/userKeymaps/default.nix b/modules/home/gui/apps/code/zed/config/userKeymaps/default.nix new file mode 100755 index 0000000..1576292 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userKeymaps/default.nix @@ -0,0 +1,25 @@ +[ + { + context = "Editor"; + bindings = { + "ctrl-shift-d" = "editor::DeleteLine"; + "ctrl-shift-f" = "editor::Format"; + "ctrl-shift-c" = "editor::ToggleComments"; + "ctrl-shift-w" = "editor::AddSelectionAbove"; + "ctrl-shift-s" = "editor::AddSelectionBelow"; + }; + } + { + context = "Pane"; + bindings = { + "alt-w" = "editor::MoveLineUp"; + "alt-s" = "editor::MoveLineDown"; + }; + } + # { + # bindings = { + # context = "Workspace"; + # "ctrl-s" = "workspace::SaveAll"; + # }; + # } +] diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/assistant/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/assistant/default.nix new file mode 100755 index 0000000..729c207 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/assistant/default.nix @@ -0,0 +1,35 @@ +{ + flake, + ... +}: +let + inherit (flake.config.services.instances) + ollama + web + ; + service = ollama; + localhost = web.localhost.address0; +in +{ + assistant = { + enabled = true; + default_model = { + provider = "zed.dev"; + model = "claude-3-5-sonnet-latest"; + }; + version = "2"; + }; + assistant1 = { + enabled = true; + default_model = { + provider = "ollama"; + model = "qwen2.5-coder:7b"; + }; + version = "2"; + }; + language_models = { + ollama = { + api_url = "http://${localhost}:${builtins.toString service.ports.port1}"; + }; + }; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/git/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/git/default.nix new file mode 100755 index 0000000..2063a7a --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/git/default.nix @@ -0,0 +1,7 @@ +{ + enabled = true; + autoFetch = true; + autoFetchInterval = 300; + git_status = true; + git_gutter = "tracked_files"; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/interface/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/interface/default.nix new file mode 100755 index 0000000..f27a6a8 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/interface/default.nix @@ -0,0 +1,41 @@ +{ flake, ... }: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + ui_font_family = fonts.names.name0; + buffer_font_family = fonts.names.name0; + hour_format = "hour12"; + vim_mode = false; + show_whitespaces = "none"; + ui_font_size = fonts.sizes.applications.size0; + buffer_font_size = fonts.sizes.applications.size0; + tab_size = 2; + cursor_blink = true; + theme = "Catppuccin Macchiato"; + show_copilot_suggestions = true; + bracket_pairing = "always"; + relative_line_numbers = true; + tabs = { + file_icons = true; + git_status = true; + }; + inlay_hints = { + enabled = true; + typeHints = true; + parameterHints = true; + chainingHints = true; + }; + project_panel = { + file_icons = true; + folder_icons = true; + indent_size = 15; + auto_reveal_entries = false; + auto_fold_dirs = false; + }; + indent_guides = { + enabled = true; + }; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/languages/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/languages/default.nix new file mode 100755 index 0000000..45a6041 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/languages/default.nix @@ -0,0 +1,47 @@ +{ + "Elixir" = { + language_servers = [ + "!lexical" + "elixir-ls" + "!next-ls" + ]; + format_on_save = { + external = { + command = "mix"; + arguments = [ + "format" + "--stdin-filename" + "{buffer_path}" + "-" + ]; + }; + }; + }; + "HEEX" = { + language_servers = [ + "!lexical" + "elixir-ls" + "!next-ls" + ]; + format_on_save = { + external = { + command = "mix"; + arguments = [ + "format" + "--stdin-filename" + "{buffer_path}" + "-" + ]; + }; + }; + }; + "Elm" = { + language_servers = [ "elm-language-server" ]; + format_on_save = { + external = { + command = "elm-review"; + arguments = [ "--stdin" ]; + }; + }; + }; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/lsp/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/lsp/default.nix new file mode 100755 index 0000000..cc3edde --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/lsp/default.nix @@ -0,0 +1,40 @@ +{ + rust-analyzer = { + binary = { + path_lookup = true; + }; + }; + + elm-language-server = { + initialization_options = { + disableElmLSDiagnostics = true; + onlyUpdateDiagnosticsOnSave = false; + elmReviewDiagnostics = "warning"; + }; + }; + + haskell = { + path_lookup = true; + }; + + nix = { + binary = { + path_lookup = true; + }; + }; + + typst = { + binary = { + path_lookup = true; + }; + }; + + elixir-ls = { + binary = { + path_lookup = true; + }; + settings = { + dialyzerEnabled = true; + }; + }; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/misc/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/misc/default.nix new file mode 100755 index 0000000..9376843 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/misc/default.nix @@ -0,0 +1,20 @@ +{ + lib, + pkgs, + ... +}: +{ + node = { + path = lib.getExe pkgs.nodejs; + npm_path = lib.getExe' pkgs.nodejs "npm"; + }; + + soft_wrap = "editor_width"; + + auto_update = false; + autosave = "on_focus_change"; + load_direnv = "shell_hook"; + base_keymap = "VSCode"; + restore_on_startup = "last_session"; + show_wrap_guides = true; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/terminal/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/terminal/default.nix new file mode 100755 index 0000000..d6204d0 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/terminal/default.nix @@ -0,0 +1,39 @@ +{ flake, ... }: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + alternate_scroll = "off"; + blinking = "off"; + copy_on_select = true; + dock = "bottom"; + detect_venv = { + on = { + directories = [ + ".env" + "env" + ".venv" + "venv" + ]; + activate_script = "default"; + }; + }; + + env = { + TERM = "ghostty"; + }; + + font_family = fonts.names.name0; + font_features = null; + font_size = fonts.sizes.terminal.size0; + line_height = "comfortable"; + option_as_meta = false; + button = false; + shell = "system"; + toolbar = { + title = false; + }; + working_directory = "current_project_directory"; +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/config/theme/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/config/theme/default.nix new file mode 100755 index 0000000..5146900 --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/config/theme/default.nix @@ -0,0 +1,816 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) currentTheme palettes; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + accents = [ + "${el.base0E}66" + "${el.base07}66" + "${el.base16}66" + "${el.base0B}66" + "${el.base0A}66" + "${el.base09}66" + "${el.base08}66" + ]; + + border = { + value = "#${el.base02}"; + variant = "#${el.base0E}"; + focused = "#${el.base07}"; + selected = "#${el.base0E}"; + transparent = "#${el.base0B}"; + disabled = "#${el.base03}"; + }; + + elevated_surface.background = "#${el.base01}"; + surface.background = "#${el.base01}"; + background = { + value = "#${el.base00}"; + appearance = "opaque"; + }; + element = { + background = "#${el.base11}"; + hover = "#${el.base03}4d"; + active = "#${el.base04}4d"; + selected = "#${el.base02}4d"; + disabled = "#${el.base03}"; + }; + + drop_target.background = "#${el.base02}66"; + ghost_element = { + background = "#${el.base11}59"; + hover = "#${el.base03}4d"; + active = "#${el.base04}99"; + selected = "#${el.base05}1a"; + disabled = "#${el.base03}"; + }; + + text = { + value = "#${el.base05}"; + muted = "#${el.base05}"; + placeholder = "#${el.base04}"; + disabled = "#${el.base03}"; + accent = "#${el.base0E}"; + }; + + icon = { + value = "#${el.base05}"; + muted = "#${el.base04}"; + disabled = "#${el.base03}"; + placeholder = "#${el.base04}"; + accent = "#${el.base0E}"; + }; + + status_bar.background = "#${el.base11}"; + title_bar = { + background = "#${el.base11}"; + inactive_background = "#${el.base11}d9"; + }; + toolbar.background = "#${el.base00}"; + tab_bar.background = "#${el.base11}"; + tab = { + inactive_background = "#${el.base11}"; + active_background = "#${el.base00}"; + }; + + search.match_background = "#${el.base0C}33"; + panel = { + background = "#${el.base01}"; + focused_border = "#${el.base05}"; + indent_guide = "#${el.base02}99"; + indent_guide_active = "#${el.base04}"; + indent_guide_hover = "#${el.base0E}"; + }; + + pane.focused_border = "#${el.base05}"; + pane_group.border = "#${el.base02}"; + + scrollbar = { + thumb = { + background = "#${el.base0E}33"; + hover_background = "#${el.base03}"; + border = "#${el.base0E}"; + scrollbar.track.background = null; + }; + track.border = "#${el.base05}12"; + }; + + editor = { + foreground = "#${el.base05}"; + background = "#${el.base00}"; + gutter.background = "#${el.base00}"; + subheader.background = "#${el.base01}"; + active_line.background = "#${el.base05}0d"; + highlighted_line.background = null; + line_number = "#${el.base04}"; + active_line_number = "#${el.base0E}"; + invisible = "#${el.base05}66"; + wrap_guide = "#${el.base04}"; + active_wrap_guide = "#${el.base04}"; + document_highlight = { + bracket_background = "#${el.base06}40"; + read_background = "#${el.base05}29"; + write_background = "#${el.base05}29"; + }; + indent_guide = "#${el.base02}99"; + indent_guide_active = "#${el.base04}"; + }; + + terminal = { + background = "#${el.base00}"; + ansi.background = "#${el.base00}"; + foreground = "#${el.base05}"; + dim_foreground = "#${el.base04}"; + bright_foreground = "#${el.base05}"; + }; + + link_text.hover = "#${el.base15}"; + + conflict = { + value = "#${el.base0A}"; + border = "#${el.base0A}"; + background = "#${el.base01}"; + }; + + created = { + value = "#${el.base0B}"; + border = "#${el.base0B}"; + background = "#${el.base01}"; + }; + + deleted = { + value = "#${el.base08}"; + border = "#${el.base08}"; + background = "#${el.base01}"; + }; + + hidden = { + value = "#${el.base03}"; + border = "#${el.base03}"; + background = "#${el.base01}"; + }; + + hint = { + value = "#${el.base04}"; + border = "#${el.base04}"; + background = "#${el.base01}"; + }; + + ignored = { + value = "#${el.base03}"; + border = "#${el.base03}"; + background = "#${el.base01}"; + }; + + modified = { + value = "#${el.base0A}"; + border = "#${el.base0A}"; + background = "#${el.base01}"; + }; + + predictive = { + value = "#${el.base03}"; + border = "#${el.base07}"; + background = "#${el.base01}"; + }; + + renamed = { + value = "#${el.base16}"; + border = "#${el.base16}"; + background = "#${el.base01}"; + }; + + info = { + value = "#${el.base0C}"; + border = "#${el.base0C}"; + background = "#${el.base05}33"; + }; + + warning = { + value = "#${el.base0A}"; + border = "#${el.base0A}"; + background = "#${el.base0A}1f"; + }; + + error = { + value = "#${el.base08}"; + border = "#${el.base08}"; + background = "#${el.base08}1f"; + }; + + success = { + value = "#${el.base0B}"; + border = "#${el.base0B}"; + background = "#${el.base0B}1f"; + }; + + unreachable = { + value = "#${el.base08}"; + border = "#${el.base08}"; + background = "#${el.base08}1f"; + }; + + players = [ + { + cursor = "#${el.base06}"; + selection = "#${el.base04}80"; + background = "#${el.base06}"; + } + { + cursor = "#${el.base0E}"; + selection = "#${el.base0E}33"; + background = "#${el.base0E}"; + } + { + cursor = "#${el.base07}"; + selection = "#${el.base07}33"; + background = "#${el.base07}"; + } + { + cursor = "#${el.base16}"; + selection = "#${el.base16}33"; + background = "#${el.base16}"; + } + { + cursor = "#${el.base0B}"; + selection = "#${el.base0B}33"; + background = "#${el.base0B}"; + } + { + cursor = "#${el.base0A}"; + selection = "#${el.base0A}33"; + background = "#${el.base0A}"; + } + { + cursor = "#${el.base09}"; + selection = "#${el.base09}33"; + background = "#${el.base09}"; + } + { + cursor = "#${el.base08}"; + selection = "#${el.base08}33"; + background = "#${el.base08}"; + } + ]; + + syntax = { + variable = { + color = "#${el.base05}"; + font_style = null; + font_weight = null; + }; + variable.builtin = { + color = "#${el.base08}"; + font_style = null; + font_weight = null; + }; + variable.parameter = { + color = "#${el.base12}"; + font_style = null; + font_weight = null; + }; + variable.member = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + variable.special = { + color = "#${el.base17}"; + font_style = "italic"; + font_weight = null; + }; + + constant = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + constant.builtin = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + constant.macro = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + + module = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + + label = { + color = "#${el.base16}"; + font_style = null; + font_weight = null; + }; + + string = { + color = "#${el.base0B}"; + font_style = null; + font_weight = null; + }; + string.documentation = { + color = "#${el.base0C}"; + font_style = null; + font_weight = null; + }; + string.regexp = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + string.escape = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + string.special = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + string.special.path = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + string.special.symbol = { + color = "#${el.base0F}"; + font_style = null; + font_weight = null; + }; + string.special.url = { + color = "#${el.base06}"; + font_style = "italic"; + font_weight = null; + }; + + character = { + color = "#${el.base0C}"; + font_style = null; + font_weight = null; + }; + character.special = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + + boolean = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + number = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + number.float = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + type = { + color = "#${el.base0A}"; + font_style = null; + font_weight = null; + }; + type.builtin = { + color = "#${el.base0E}"; + font_style = "italic"; + font_weight = null; + }; + type.definition = { + color = "#${el.base0A}"; + font_style = null; + font_weight = null; + }; + type.interface = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + type.super = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + + attribute = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + property = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + + function = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + function.builtin = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + function.call = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + function.macro = { + color = "#${el.base0C}"; + font_style = null; + font_weight = null; + }; + function.method = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + function.method.call = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + constructor = { + color = "#${el.base0F}"; + font_style = null; + font_weight = null; + }; + + operator = { + color = "#${el.base15}"; + font_style = null; + font_weight = null; + }; + + keyword = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.modifier = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.type = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.coroutine = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.function = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.operator = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.import = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.repeat = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.return = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.debug = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.exception = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.conditional = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.conditional.ternary = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + keyword.directive = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + keyword.directive.define = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + keyword.export = { + color = "#${el.base15}"; + font_style = null; + font_weight = null; + }; + + punctuation = { + color = "#${el.base05}"; + font_style = null; + font_weight = null; + }; + punctuation.delimiter = { + color = "#${el.base05}"; + font_style = null; + font_weight = null; + }; + punctuation.bracket = { + color = "#${el.base05}"; + font_style = null; + font_weight = null; + }; + punctuation.special = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + punctuation.special.symbol = { + color = "#${el.base0F}"; + font_style = null; + font_weight = null; + }; + punctuation.list_marker = { + color = "#${el.base0C}"; + font_style = null; + font_weight = null; + }; + + comment = { + color = "#${el.base05}"; + font_style = "italic"; + font_weight = null; + }; + comment.doc = { + color = "#${el.base05}"; + font_style = "italic"; + font_weight = null; + }; + comment.documentation = { + color = "#${el.base05}"; + font_style = "italic"; + font_weight = null; + }; + comment.error = { + color = "#${el.base08}"; + font_style = "italic"; + font_weight = null; + }; + comment.warning = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + comment.hint = { + color = "#${el.base0D}"; + font_style = "italic"; + font_weight = null; + }; + comment.todo = { + color = "#${el.base0F}"; + font_style = "italic"; + font_weight = null; + }; + comment.note = { + color = "#${el.base06}"; + font_style = "italic"; + font_weight = null; + }; + + diff.plus = { + color = "#${el.base0B}"; + font_style = null; + font_weight = null; + }; + diff.minus = { + color = "#${el.base08}"; + font_style = null; + font_weight = null; + }; + tag = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + tag.attribute = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + tag.delimiter = { + color = "#${el.base0C}"; + font_style = null; + font_weight = null; + }; + + parameter = { + color = "#${el.base12}"; + font_style = null; + font_weight = null; + }; + + field = { + color = "#${el.base07}"; + font_style = null; + font_weight = null; + }; + + namespace = { + color = "#${el.base0A}"; + font_style = "italic"; + font_weight = null; + }; + + float = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + symbol = { + color = "#${el.base17}"; + font_style = null; + font_weight = null; + }; + + string.regex = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + text = { + color = "#${el.base05}"; + font_style = null; + font_weight = null; + }; + + emphasis.strong = { + color = "#${el.base12}"; + font_style = null; + font_weight = 700; + }; + + emphasis = { + color = "#${el.base12}"; + font_style = "italic"; + font_weight = null; + }; + + embedded = { + color = "#${el.base12}"; + font_style = null; + font_weight = null; + }; + + text.literal = { + color = "#${el.base0B}"; + font_style = null; + font_weight = null; + }; + + concept = { + color = "#${el.base16}"; + font_style = null; + font_weight = null; + }; + + enum = { + color = "#${el.base0C}"; + font_style = null; + font_weight = 700; + }; + + function.decorator = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + type.class.definition = { + color = "#${el.base0A}"; + font_style = null; + font_weight = 700; + }; + + hint = { + color = "#${el.base04}"; + font_style = "italic"; + font_weight = null; + }; + + link_text = { + color = "#${el.base0D}"; + font_style = null; + font_weight = null; + }; + + link_uri = { + color = "#${el.base06}"; + font_style = "italic"; + font_weight = null; + }; + + parent = { + color = "#${el.base09}"; + font_style = null; + font_weight = null; + }; + + predictive = { + color = "#${el.base03}"; + font_style = null; + font_weight = null; + }; + + predoc = { + color = "#${el.base08}"; + font_style = null; + font_weight = null; + }; + + primary = { + color = "#${el.base12}"; + font_style = null; + font_weight = null; + }; + + tag.doctype = { + color = "#${el.base0E}"; + font_style = null; + font_weight = null; + }; + + string.doc = { + color = "#${el.base0C}"; + font_style = "italic"; + font_weight = null; + }; + + title = { + color = "#${el.base05}"; + font_style = null; + font_weight = 800; + }; + + variant = { + color = "#${el.base08}"; + font_style = null; + font_weight = null; + }; + }; + +} diff --git a/modules/home/gui/apps/code/zed/config/userSettings/default.nix b/modules/home/gui/apps/code/zed/config/userSettings/default.nix new file mode 100755 index 0000000..8dd5b6f --- /dev/null +++ b/modules/home/gui/apps/code/zed/config/userSettings/default.nix @@ -0,0 +1,28 @@ +{ + flake, + lib, + pkgs, + ... +}: +let + configPath = ./config; + assistantPath = import (configPath + /assistant) { inherit flake; }; + interfacePath = import (configPath + /interface) { inherit flake; }; + languagesPath = import (configPath + /languages); + lspPath = import (configPath + /lsp); + terminalPath = import (configPath + /terminal) { inherit flake; }; + # experimentalPath = import (configPath + /theme) { inherit config flake; }; + gitPath = import (configPath + /git); + miscPath = import (configPath + /misc) { inherit lib pkgs; }; +in +{ + git = gitPath; + languages = languagesPath; + lsp = lspPath; + terminal = terminalPath; + # experimental.theme_overrides = experimentalPath; + +} +// assistantPath +// interfacePath +// miscPath diff --git a/modules/home/gui/apps/code/zed/default.nix b/modules/home/gui/apps/code/zed/default.nix new file mode 100755 index 0000000..7d2d81f --- /dev/null +++ b/modules/home/gui/apps/code/zed/default.nix @@ -0,0 +1,32 @@ +{ + config, + flake, + lib, + pkgs, + ... +}: +let + configPath = ./config; + extensionsPath = import (configPath + /extensions); + userKeymapsPath = import (configPath + /userKeymaps); + userSettingsPath = import (configPath + /userSettings) { + inherit + config + flake + lib + pkgs + ; + }; + extraPackagesPath = import (configPath + /extraPackages) { inherit pkgs; }; + packagePath = flake.inputs.zed-editor.packages.${pkgs.system}.default; +in +{ + programs.zed-editor = { + enable = true; + # package = packagePath; + extraPackages = extraPackagesPath; + extensions = extensionsPath; + userKeymaps = userKeymapsPath; + userSettings = userSettingsPath; + }; +} diff --git a/modules/home/gui/apps/default.nix b/modules/home/gui/apps/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/emulators/default.nix b/modules/home/gui/apps/emulators/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/emulators/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/emulators/ghostty/config/settings.nix b/modules/home/gui/apps/emulators/ghostty/config/settings.nix new file mode 100755 index 0000000..ff9320a --- /dev/null +++ b/modules/home/gui/apps/emulators/ghostty/config/settings.nix @@ -0,0 +1,21 @@ +{ + flake, + osConfig, + pkgs, + ... +}: +let + inherit (flake.config.aesthetics.themes) fonts; +in +{ + confirm-close-surface = false; + window-decoration = true; + font-size = fonts.sizes.terminal.size0; + font-family = fonts.names.name0; + window-padding-x = 10; + window-padding-y = 10; + copy-on-select = true; + bold-is-bright = true; + shell-integration = "detect"; + command = "${pkgs.nushell}/bin/nu"; +} diff --git a/modules/home/gui/apps/emulators/ghostty/config/themes.nix b/modules/home/gui/apps/emulators/ghostty/config/themes.nix new file mode 100755 index 0000000..7ca8f5d --- /dev/null +++ b/modules/home/gui/apps/emulators/ghostty/config/themes.nix @@ -0,0 +1,51 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.aesthetics.themes) currentTheme palettes; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + theme = { + background = el.base01; + cursor-color = el.base06; + foreground = el.base05; + palette = [ + "0=${el.base03}" + "1=${el.base08}" + "2=${el.base0B}" + "3=${el.base0A}" + "4=${el.base0D}" + "5=${el.base17}" + "6=${el.base0C}" + "7=${el.base05}" + "8=${el.base04}" + "9=${el.base08}" + "10=${el.base03}" + "11=${el.base0A}" + "12=${el.base0D}" + "13=${el.base17}" + "14=${el.base0C}" + "15=${el.base05}" + ]; + selection-background = el.base04; + selection-foreground = el.base05; + }; +} diff --git a/modules/home/gui/apps/emulators/ghostty/default.nix b/modules/home/gui/apps/emulators/ghostty/default.nix new file mode 100755 index 0000000..e1f8e20 --- /dev/null +++ b/modules/home/gui/apps/emulators/ghostty/default.nix @@ -0,0 +1,27 @@ +{ + config, + flake, + pkgs, + osConfig, + ... +}: +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { + inherit + flake + config + osConfig + pkgs + ; + }; + themesPath = import (configPath + /themes.nix) { inherit config flake; }; +in +{ + programs.ghostty = { + enable = true; + package = flake.inputs.ghostty.packages.${pkgs.system}.default; + settings = settingsPath; + themes = themesPath; + }; +} diff --git a/modules/home/gui/apps/emulators/kitty/default.nix b/modules/home/gui/apps/emulators/kitty/default.nix new file mode 100755 index 0000000..9d9f3b8 --- /dev/null +++ b/modules/home/gui/apps/emulators/kitty/default.nix @@ -0,0 +1,19 @@ +{ + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + programs.kitty = { + enable = true; + font = { + name = fonts.names.name0; + size = fonts.sizes.terminal.size0; + }; + themeFile = "Catppuccin-Macchiato"; + }; +} diff --git a/modules/home/gui/apps/emulators/wezterm/config/extraConfig.nix b/modules/home/gui/apps/emulators/wezterm/config/extraConfig.nix new file mode 100755 index 0000000..2651819 --- /dev/null +++ b/modules/home/gui/apps/emulators/wezterm/config/extraConfig.nix @@ -0,0 +1,19 @@ +{ flake, ... }: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +'' + return { + color_scheme = "Catppuccin Macchiato", + font_size = ${builtins.toString fonts.sizes.terminal.size0}, + font = wezterm.font('${fonts.names.name0}'), + enable_tab_bar = false, + window_close_confirmation = 'NeverPrompt', + term = 'wezterm', + enable_wayland = true, + front_end = "WebGpu", + max_fps = 200 + } +'' diff --git a/modules/home/gui/apps/emulators/wezterm/default.nix b/modules/home/gui/apps/emulators/wezterm/default.nix new file mode 100755 index 0000000..b8bab5c --- /dev/null +++ b/modules/home/gui/apps/emulators/wezterm/default.nix @@ -0,0 +1,16 @@ +{ flake, ... }: +{ + programs.wezterm = + let + configPath = ./config; + extraConfigPath = import (configPath + /extraConfig.nix) { + inherit + flake + ; + }; + in + { + enable = true; + extraConfig = extraConfigPath; + }; +} diff --git a/modules/home/gui/apps/gaming/default.nix b/modules/home/gui/apps/gaming/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/gaming/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/gaming/heroic/default.nix b/modules/home/gui/apps/gaming/heroic/default.nix new file mode 100755 index 0000000..269aeed --- /dev/null +++ b/modules/home/gui/apps/gaming/heroic/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + heroic + gogdl + ; + }; +} diff --git a/modules/home/gui/apps/gaming/lutris/default.nix b/modules/home/gui/apps/gaming/lutris/default.nix new file mode 100755 index 0000000..f6a2f43 --- /dev/null +++ b/modules/home/gui/apps/gaming/lutris/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + lutris + ; + }; +} diff --git a/modules/home/gui/apps/gaming/prismLauncher/default.nix b/modules/home/gui/apps/gaming/prismLauncher/default.nix new file mode 100755 index 0000000..fdcf772 --- /dev/null +++ b/modules/home/gui/apps/gaming/prismLauncher/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + prismlauncher + ; + }; +} diff --git a/modules/home/gui/apps/gaming/steam/default.nix b/modules/home/gui/apps/gaming/steam/default.nix new file mode 100755 index 0000000..9c39f4d --- /dev/null +++ b/modules/home/gui/apps/gaming/steam/default.nix @@ -0,0 +1,21 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + steam + ; + }; + + home = { + file = { + "./.steam/steam/steam_dev.cfg" = { + source = ./steam_dev.cfg; + }; + }; + }; +} + +# If you wanna install Sc2, it takes Proton v8 diff --git a/modules/home/gui/apps/gaming/steam/steam_dev.cfg b/modules/home/gui/apps/gaming/steam/steam_dev.cfg new file mode 100755 index 0000000..02e4c65 --- /dev/null +++ b/modules/home/gui/apps/gaming/steam/steam_dev.cfg @@ -0,0 +1,2 @@ +@nClientDownloadEnableHTTP2PlatformLinux 0 +@fDownloadRateImprovementToAddAnotherConnection 1.0 \ No newline at end of file diff --git a/modules/home/gui/apps/media/3d/blender/default.nix b/modules/home/gui/apps/media/3d/blender/default.nix new file mode 100755 index 0000000..2a4952a --- /dev/null +++ b/modules/home/gui/apps/media/3d/blender/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + blender + ; + }; +} diff --git a/modules/home/gui/apps/media/3d/default.nix b/modules/home/gui/apps/media/3d/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/3d/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/3d/sweetHome/default.nix b/modules/home/gui/apps/media/3d/sweetHome/default.nix new file mode 100755 index 0000000..7093e56 --- /dev/null +++ b/modules/home/gui/apps/media/3d/sweetHome/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.sweethome3d) + application + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/beets/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/beets/default.nix new file mode 100755 index 0000000..6358470 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/beets/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + beets + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/kid3/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/kid3/default.nix new file mode 100755 index 0000000..84b3603 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/kid3/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + kid3 + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/mp3Gain/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/mp3Gain/default.nix new file mode 100755 index 0000000..536217f --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/mp3Gain/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + mp3gain + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/puddleTag/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/puddleTag/default.nix new file mode 100755 index 0000000..15440cf --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioMetadata/puddleTag/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + puddletag + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioProduction/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioProduction/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioProduction/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/audioProduction/reaper/default.nix b/modules/home/gui/apps/media/audio/audioEditing/audioProduction/reaper/default.nix new file mode 100755 index 0000000..bd04481 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/audioProduction/reaper/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + reaper + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/audioEditing/default.nix b/modules/home/gui/apps/media/audio/audioEditing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioEditing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/audio/audioPlaying/default.nix b/modules/home/gui/apps/media/audio/audioPlaying/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioPlaying/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/audio/audioPlaying/feishin/default.nix b/modules/home/gui/apps/media/audio/audioPlaying/feishin/default.nix new file mode 100755 index 0000000..fae0ba5 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioPlaying/feishin/default.nix @@ -0,0 +1,35 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + feishin + ; + }; + xdg.configFile."feishin.config.json".text = '' + { + "window_has_frame": true, + "bounds": { + "x": 0, + "y": 0, + "width": 2560, + "height": 1080 + }, + "maximized": true, + "fullscreen": false, + "theme": "system", + "resume": true, + "lyrics": [ + "Genius", + "lrclib.net", + "NetEase" + ], + "window_window_bar_style": "linux", + "window_minimize_to_tray": false, + "window_enable_tray": false, + "window_start_minimized": false, + "window_exit_to_tray": false + }''; +} diff --git a/modules/home/gui/apps/media/audio/audioPlaying/spotify/default.nix b/modules/home/gui/apps/media/audio/audioPlaying/spotify/default.nix new file mode 100755 index 0000000..8f343e4 --- /dev/null +++ b/modules/home/gui/apps/media/audio/audioPlaying/spotify/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + spotify + ; + }; +} diff --git a/modules/home/gui/apps/media/audio/default.nix b/modules/home/gui/apps/media/audio/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/audio/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/default.nix b/modules/home/gui/apps/media/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/docs/default.nix b/modules/home/gui/apps/media/docs/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/docs/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/docs/docEditing/default.nix b/modules/home/gui/apps/media/docs/docEditing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docEditing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/docs/docEditing/libreOffice/default.nix b/modules/home/gui/apps/media/docs/docEditing/libreOffice/default.nix new file mode 100755 index 0000000..5529351 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docEditing/libreOffice/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + libreoffice + ; + }; +} diff --git a/modules/home/gui/apps/media/docs/docEditing/obsidian/default.nix b/modules/home/gui/apps/media/docs/docEditing/obsidian/default.nix new file mode 100755 index 0000000..6071fd9 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docEditing/obsidian/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + obsidian + ; + }; +} diff --git a/modules/home/gui/apps/media/docs/docEditing/wpsOffice/default.nix b/modules/home/gui/apps/media/docs/docEditing/wpsOffice/default.nix new file mode 100755 index 0000000..bae1d6d --- /dev/null +++ b/modules/home/gui/apps/media/docs/docEditing/wpsOffice/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + wpsoffice + ; + }; +} diff --git a/modules/home/gui/apps/media/docs/docViewing/default.nix b/modules/home/gui/apps/media/docs/docViewing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docViewing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/docs/docViewing/okular/default.nix b/modules/home/gui/apps/media/docs/docViewing/okular/default.nix new file mode 100755 index 0000000..508abb9 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docViewing/okular/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + okular + ; + }; +} diff --git a/modules/home/gui/apps/media/docs/docViewing/zathura/default.nix b/modules/home/gui/apps/media/docs/docViewing/zathura/default.nix new file mode 100755 index 0000000..d6043a0 --- /dev/null +++ b/modules/home/gui/apps/media/docs/docViewing/zathura/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + zathura + ; + }; +} diff --git a/modules/home/gui/apps/media/images/default.nix b/modules/home/gui/apps/media/images/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/images/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/blender/default.nix b/modules/home/gui/apps/media/images/imageEditing/blender/default.nix new file mode 100755 index 0000000..2a4952a --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/blender/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + blender + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/darktable/default.nix b/modules/home/gui/apps/media/images/imageEditing/darktable/default.nix new file mode 100755 index 0000000..22f8da7 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/darktable/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + darktable + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/default.nix b/modules/home/gui/apps/media/images/imageEditing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/gimp/default.nix b/modules/home/gui/apps/media/images/imageEditing/gimp/default.nix new file mode 100755 index 0000000..b5d58a8 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/gimp/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + gimp + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/inkscape/default.nix b/modules/home/gui/apps/media/images/imageEditing/inkscape/default.nix new file mode 100755 index 0000000..1e59bdb --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/inkscape/default.nix @@ -0,0 +1,18 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + inkscape-with-extensions + ; + inherit (pkgs.inkscape-extensions) + # inkcut + hexmap + textext + silhouette + applytransforms + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/kolourPaint/default.nix b/modules/home/gui/apps/media/images/imageEditing/kolourPaint/default.nix new file mode 100755 index 0000000..bc29e09 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/kolourPaint/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + kolourpaint + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageEditing/krita/default.nix b/modules/home/gui/apps/media/images/imageEditing/krita/default.nix new file mode 100755 index 0000000..3f3fca7 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageEditing/krita/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + krita + krita-plugin-gmic + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageViewing/default.nix b/modules/home/gui/apps/media/images/imageViewing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageViewing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/images/imageViewing/gwenview/default.nix b/modules/home/gui/apps/media/images/imageViewing/gwenview/default.nix new file mode 100755 index 0000000..fd956da --- /dev/null +++ b/modules/home/gui/apps/media/images/imageViewing/gwenview/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + gwenview + ; + }; +} diff --git a/modules/home/gui/apps/media/images/imageViewing/nomacs/default.nix b/modules/home/gui/apps/media/images/imageViewing/nomacs/default.nix new file mode 100755 index 0000000..00faf88 --- /dev/null +++ b/modules/home/gui/apps/media/images/imageViewing/nomacs/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + nomacs + ; + }; +} diff --git a/modules/home/gui/apps/media/llms/alpaca/default.nix b/modules/home/gui/apps/media/llms/alpaca/default.nix new file mode 100755 index 0000000..9ea72d3 --- /dev/null +++ b/modules/home/gui/apps/media/llms/alpaca/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + alpaca + ; + }; +} diff --git a/modules/home/gui/apps/media/llms/default.nix b/modules/home/gui/apps/media/llms/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/llms/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/llms/oterm/default.nix b/modules/home/gui/apps/media/llms/oterm/default.nix new file mode 100755 index 0000000..a17b82a --- /dev/null +++ b/modules/home/gui/apps/media/llms/oterm/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + oterm + ; + }; +} diff --git a/modules/home/gui/apps/media/video/default.nix b/modules/home/gui/apps/media/video/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/video/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/daVinci/default.nix b/modules/home/gui/apps/media/video/videoEditing/daVinci/default.nix new file mode 100755 index 0000000..d1d72c5 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/daVinci/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + davinci-resolve + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/default.nix b/modules/home/gui/apps/media/video/videoEditing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/kdenlive/default.nix b/modules/home/gui/apps/media/video/videoEditing/kdenlive/default.nix new file mode 100755 index 0000000..8d2b2eb --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/kdenlive/default.nix @@ -0,0 +1,14 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + kdenlive + ; + inherit (pkgs) + glaxnimate + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/default.nix b/modules/home/gui/apps/media/video/videoEditing/obsStudio/default.nix new file mode 100755 index 0000000..bf591ce --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/default.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + programs = { + obs-studio = { + enable = true; + plugins = builtins.attrValues { + inherit (pkgs.obs-studio-plugins) + wlrobs + obs-tuna + obs-vkcapture + obs-multi-rtmp + obs-webkitgtk + ; + }; + }; + }; + home = { + file = { + "./.config/obs-studio/themes" = { + source = ./themes; + }; + }; + }; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe (compact).qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe (compact).qss new file mode 100755 index 0000000..e293687 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(242, 213, 207); /* Rosewater */ +/* rgb(238, 190, 190); /* Flamingo */ +/* rgb(231, 130, 132); /* Red */ +/* rgb(234, 153, 156); /* Maroon */ +/* rgb(239, 159, 118); /* Peach */ +/* rgb(166, 209, 137); /* Green */ +/* rgb(140, 170, 238); /* Blue */ +/* rgb(198, 208, 245); /* Text */ +/* rgb(165, 173, 206); /* Subtext0 */ +/* rgb(131, 139, 167); /* Overlay1 */ +/* rgb(115, 121, 148); /* Overlay0 */ +/* rgb(81, 87, 109); /* Surface1 */ +/* rgb(65, 69, 89); /* Surface0 */ +/* rgb(48, 52, 70); /* Base */ +/* rgb(41, 44, 60); /* Mantle */ +/* rgb(35, 38, 52); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(48, 52, 70); + windowText: rgb(165, 173, 206); + base: rgb(41, 44, 60); + alternateBase: rgb(35, 38, 52); + text: rgb(198, 208, 245); + button: rgb(65, 69, 89); + buttonText: rgb(165, 173, 206); + brightText: rgb(165, 173, 206); + + light: rgb(65, 69, 89); + mid: rgb(48, 52, 70); + dark: rgb(41, 44, 60); + shadow: rgb(35, 38, 52); + + highlight: rgb(140, 170, 238); + highlightedText: rgb(165, 173, 206); + + link: rgb(242, 213, 207); + linkVisited: rgb(238, 190, 190); +} + +OBSTheme::disabled { + text: rgb(131, 139, 167); + buttonText: rgb(131, 139, 167); + brightText: rgb(41, 44, 60); +} + +OBSTheme::inactive { + highlight: rgb(35, 38, 52); + highlightedText: rgb(198, 208, 245); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(81, 87, 109); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(81, 87, 109); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(41, 44, 60); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(35, 38, 52); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 209, 137); + qproperty-backgroundWarningColor: rgb(239, 159, 118); + qproperty-backgroundErrorColor: rgb(231, 130, 132); + qproperty-foregroundNominalColor: rgb(119, 185, 75); + qproperty-foregroundWarningColor: rgb(230, 103, 38); + qproperty-foregroundErrorColor: rgb(216, 54, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(198, 208, 245); + qproperty-minorTickColor: rgb(115, 121, 148); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(239, 159, 118); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(239, 159, 118); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 209, 137); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(165, 173, 206); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(165, 173, 206); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(65, 69, 89); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(81, 87, 109); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(81, 87, 109); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(35, 38, 52); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(35, 38, 52); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(81, 87, 109); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe.qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe.qss new file mode 100755 index 0000000..d8cc9b9 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Frappe.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(48, 52, 70); + windowText: rgb(165, 173, 206); + + base: rgb(41, 44, 60); + alternateBase: rgb(35, 38, 52); + + text: rgb(198, 208, 245); + + button: rgb(65, 69, 89); + buttonText: rgb(165, 173, 206); + + brightText: rgb(165, 173, 206); + + light: rgb(65, 69, 89); + mid: rgb(48, 52, 70); + dark: rgb(41, 44, 60); + shadow: rgb(35, 38, 52); + + primary: rgb(81, 87, 109); + primaryLight: rgb(140, 170, 238); + primaryDark: rgb(35, 38, 52); + + highlight: rgb(140, 170, 238); + highlightText: rgb(165, 173, 206); + + link: rgb(242, 213, 207); + linkVisited: rgb(238, 190, 190); +} + +OBSTheme::disabled { + windowText: rgb(131, 139, 167); + text: rgb(131, 139, 167); + button: rgb(48, 52, 70); + + buttonText: rgb(41, 44, 60); + brightText: rgb(41, 44, 60); +} + +OBSTheme::inactive { + text: rgb(165, 173, 206); + + highlight: rgb(35, 38, 52); + highlightText: rgb(198, 208, 245); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(35, 38, 52); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(131, 139, 167); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(115, 121, 148); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(131, 139, 167); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(81, 87, 109); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(81, 87, 109); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(65, 69, 89); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(131, 139, 167); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(81, 87, 109); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(65, 69, 89); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(65, 69, 89); +} + +QScrollBar::handle:hover { + background-color: rgb(81, 87, 109); + border-color: rgb(81, 87, 109); +} + +QScrollBar::handle:pressed { + background-color: rgb(65, 69, 89); + border-color: rgb(65, 69, 89); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(81, 87, 109); +} + +QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(65, 69, 89); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(35, 38, 52); +} + +QTabBar::tab:hover { + background: rgb(81, 87, 109); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(65, 69, 89); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(198, 208, 245); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(198, 208, 245); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(65, 69, 89); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(65, 69, 89); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(81, 87, 109); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(115, 121, 148); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(81, 87, 109); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(65, 69, 89); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(81, 87, 109); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(65, 69, 89); + border: 2px solid rgb(65, 69, 89); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(98, 104, 128); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(81, 87, 109); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(81, 87, 109); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(35, 38, 52); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(35, 38, 52); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(35, 38, 52); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(140, 170, 238); + color: rgb(35, 38, 52); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(186, 187, 241); + color: rgb(35, 38, 52); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(65, 69, 89); +} + +QPushButton:checked { + background-color: rgb(81, 87, 109); +} + +QPushButton:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton:pressed { + background-color: rgb(35, 38, 52); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(35, 38, 52); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(65, 69, 89); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(65, 69, 89); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(131, 139, 167); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(81, 87, 109); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(35, 38, 52); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 209, 137); + qproperty-backgroundWarningColor: rgb(239, 159, 118); + qproperty-backgroundErrorColor: rgb(231, 130, 132); + qproperty-foregroundNominalColor: rgb(119, 185, 75); + qproperty-foregroundWarningColor: rgb(230, 103, 38); + qproperty-foregroundErrorColor: rgb(216, 54, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(198, 208, 245); + qproperty-minorTickColor: rgb(115, 121, 148); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(65, 69, 89); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(239, 159, 118); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(239, 159, 118); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 209, 137); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(35, 38, 52); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(165, 173, 206); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(81, 87, 109); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(81, 87, 109); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(81, 87, 109); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(65, 69, 89); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(81, 87, 109); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(81, 87, 109); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(140, 170, 238); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(81, 87, 109); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(35, 38, 52); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte (compact).qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte (compact).qss new file mode 100755 index 0000000..2885304 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(220, 138, 120); /* Rosewater */ +/* rgb(221, 120, 120); /* Flamingo */ +/* rgb(210, 15, 57); /* Red */ +/* rgb(230, 69, 83); /* Maroon */ +/* rgb(254, 100, 11); /* Peach */ +/* rgb(64, 160, 43); /* Green */ +/* rgb(30, 102, 245); /* Blue */ +/* rgb(76, 79, 105); /* Text */ +/* rgb(108, 111, 133); /* Subtext0 */ +/* rgb(140, 143, 161); /* Overlay1 */ +/* rgb(156, 160, 176); /* Overlay0 */ +/* rgb(188, 192, 204); /* Surface1 */ +/* rgb(204, 208, 218); /* Surface0 */ +/* rgb(239, 241, 245); /* Base */ +/* rgb(230, 233, 239); /* Mantle */ +/* rgb(220, 224, 232); /* Crust */ + +OBSThemeMeta { + dark: 'false'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(239, 241, 245); + windowText: rgb(108, 111, 133); + base: rgb(230, 233, 239); + alternateBase: rgb(220, 224, 232); + text: rgb(76, 79, 105); + button: rgb(204, 208, 218); + buttonText: rgb(108, 111, 133); + brightText: rgb(108, 111, 133); + + light: rgb(204, 208, 218); + mid: rgb(239, 241, 245); + dark: rgb(230, 233, 239); + shadow: rgb(220, 224, 232); + + highlight: rgb(30, 102, 245); + highlightedText: rgb(108, 111, 133); + + link: rgb(220, 138, 120); + linkVisited: rgb(221, 120, 120); +} + +OBSTheme::disabled { + text: rgb(140, 143, 161); + buttonText: rgb(140, 143, 161); + brightText: rgb(230, 233, 239); +} + +OBSTheme::inactive { + highlight: rgb(220, 224, 232); + highlightedText: rgb(76, 79, 105); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(188, 192, 204); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(188, 192, 204); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Light/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Light/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Light/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Light/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(230, 233, 239); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Light/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(220, 224, 232); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(48, 120, 32); + qproperty-backgroundWarningColor: rgb(198, 73, 1); + qproperty-backgroundErrorColor: rgb(157, 11, 43); + qproperty-foregroundNominalColor: rgb(64, 160, 43); + qproperty-foregroundWarningColor: rgb(254, 100, 11); + qproperty-foregroundErrorColor: rgb(210, 15, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(76, 79, 105); + qproperty-minorTickColor: rgb(156, 160, 176); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Light/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(254, 100, 11); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(254, 100, 11); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(64, 160, 43); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(108, 111, 133); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Light/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Light/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Light/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Light/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Light/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Light/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Light/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Light/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Light/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Light/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Light/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Light/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Light/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Light/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Light/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Light/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Light/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Light/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Light/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Light/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Light/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Light/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Light/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Light/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Light/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(108, 111, 133); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(204, 208, 218); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(188, 192, 204); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(188, 192, 204); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(220, 224, 232); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(220, 224, 232); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(188, 192, 204); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte.qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte.qss new file mode 100755 index 0000000..cb05ac7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Latte.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'false'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(239, 241, 245); + windowText: rgb(108, 111, 133); + + base: rgb(230, 233, 239); + alternateBase: rgb(220, 224, 232); + + text: rgb(76, 79, 105); + + button: rgb(204, 208, 218); + buttonText: rgb(108, 111, 133); + + brightText: rgb(108, 111, 133); + + light: rgb(204, 208, 218); + mid: rgb(239, 241, 245); + dark: rgb(230, 233, 239); + shadow: rgb(220, 224, 232); + + primary: rgb(188, 192, 204); + primaryLight: rgb(30, 102, 245); + primaryDark: rgb(220, 224, 232); + + highlight: rgb(30, 102, 245); + highlightText: rgb(108, 111, 133); + + link: rgb(220, 138, 120); + linkVisited: rgb(221, 120, 120); +} + +OBSTheme::disabled { + windowText: rgb(140, 143, 161); + text: rgb(140, 143, 161); + button: rgb(239, 241, 245); + + buttonText: rgb(230, 233, 239); + brightText: rgb(230, 233, 239); +} + +OBSTheme::inactive { + text: rgb(108, 111, 133); + + highlight: rgb(220, 224, 232); + highlightText: rgb(76, 79, 105); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(220, 224, 232); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(140, 143, 161); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(156, 160, 176); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(140, 143, 161); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Light/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(188, 192, 204); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(188, 192, 204); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(204, 208, 218); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(140, 143, 161); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Light/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Light/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(188, 192, 204); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(204, 208, 218); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(204, 208, 218); +} + +QScrollBar::handle:hover { + background-color: rgb(188, 192, 204); + border-color: rgb(188, 192, 204); +} + +QScrollBar::handle:pressed { + background-color: rgb(204, 208, 218); + border-color: rgb(204, 208, 218); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(188, 192, 204); +} + +QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Light/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Light/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(204, 208, 218); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(220, 224, 232); +} + +QTabBar::tab:hover { + background: rgb(188, 192, 204); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(204, 208, 218); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(76, 79, 105); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(76, 79, 105); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(204, 208, 218); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(204, 208, 218); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(188, 192, 204); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(156, 160, 176); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(188, 192, 204); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(204, 208, 218); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(188, 192, 204); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(204, 208, 218); + border: 2px solid rgb(204, 208, 218); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(172, 176, 190); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(188, 192, 204); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(188, 192, 204); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(220, 224, 232); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(220, 224, 232); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(220, 224, 232); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Light/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Light/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(30, 102, 245); + color: rgb(220, 224, 232); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(114, 135, 253); + color: rgb(220, 224, 232); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(204, 208, 218); +} + +QPushButton:checked { + background-color: rgb(188, 192, 204); +} + +QPushButton:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton:pressed { + background-color: rgb(220, 224, 232); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(220, 224, 232); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(204, 208, 218); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(204, 208, 218); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(140, 143, 161); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(188, 192, 204); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(220, 224, 232); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(48, 120, 32); + qproperty-backgroundWarningColor: rgb(198, 73, 1); + qproperty-backgroundErrorColor: rgb(157, 11, 43); + qproperty-foregroundNominalColor: rgb(64, 160, 43); + qproperty-foregroundWarningColor: rgb(254, 100, 11); + qproperty-foregroundErrorColor: rgb(210, 15, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(76, 79, 105); + qproperty-minorTickColor: rgb(156, 160, 176); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(204, 208, 218); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(254, 100, 11); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(254, 100, 11); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(64, 160, 43); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(220, 224, 232); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(108, 111, 133); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Light/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Light/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Light/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Light/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Light/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Light/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Light/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Light/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Light/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Light/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Light/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Light/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Light/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Light/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Light/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Light/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Light/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Light/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Light/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Light/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Light/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Light/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Light/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Light/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Light/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Light/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Light/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Light/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(188, 192, 204); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(188, 192, 204); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(188, 192, 204); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Light/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(204, 208, 218); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(188, 192, 204); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(188, 192, 204); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(30, 102, 245); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(188, 192, 204); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(220, 224, 232); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato (compact).qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato (compact).qss new file mode 100755 index 0000000..447e2b9 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(244, 219, 214); /* Rosewater */ +/* rgb(240, 198, 198); /* Flamingo */ +/* rgb(237, 135, 150); /* Red */ +/* rgb(238, 153, 160); /* Maroon */ +/* rgb(245, 169, 127); /* Peach */ +/* rgb(166, 218, 149); /* Green */ +/* rgb(138, 173, 244); /* Blue */ +/* rgb(202, 211, 245); /* Text */ +/* rgb(165, 173, 203); /* Subtext0 */ +/* rgb(128, 135, 162); /* Overlay1 */ +/* rgb(110, 115, 141); /* Overlay0 */ +/* rgb(73, 77, 100); /* Surface1 */ +/* rgb(54, 58, 79); /* Surface0 */ +/* rgb(36, 39, 58); /* Base */ +/* rgb(30, 32, 48); /* Mantle */ +/* rgb(24, 25, 38); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(36, 39, 58); + windowText: rgb(165, 173, 203); + base: rgb(30, 32, 48); + alternateBase: rgb(24, 25, 38); + text: rgb(202, 211, 245); + button: rgb(54, 58, 79); + buttonText: rgb(165, 173, 203); + brightText: rgb(165, 173, 203); + + light: rgb(54, 58, 79); + mid: rgb(36, 39, 58); + dark: rgb(30, 32, 48); + shadow: rgb(24, 25, 38); + + highlight: rgb(138, 173, 244); + highlightedText: rgb(165, 173, 203); + + link: rgb(244, 219, 214); + linkVisited: rgb(240, 198, 198); +} + +OBSTheme::disabled { + text: rgb(128, 135, 162); + buttonText: rgb(128, 135, 162); + brightText: rgb(30, 32, 48); +} + +OBSTheme::inactive { + highlight: rgb(24, 25, 38); + highlightedText: rgb(202, 211, 245); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(73, 77, 100); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(73, 77, 100); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(30, 32, 48); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(24, 25, 38); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 218, 149); + qproperty-backgroundWarningColor: rgb(245, 169, 127); + qproperty-backgroundErrorColor: rgb(237, 135, 150); + qproperty-foregroundNominalColor: rgb(109, 194, 81); + qproperty-foregroundWarningColor: rgb(238, 111, 41); + qproperty-foregroundErrorColor: rgb(225, 54, 79); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(202, 211, 245); + qproperty-minorTickColor: rgb(110, 115, 141); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(245, 169, 127); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(245, 169, 127); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 218, 149); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(165, 173, 203); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(165, 173, 203); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(54, 58, 79); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(73, 77, 100); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(73, 77, 100); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(24, 25, 38); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(24, 25, 38); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(73, 77, 100); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato.qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato.qss new file mode 100755 index 0000000..e039136 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Macchiato.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(36, 39, 58); + windowText: rgb(165, 173, 203); + + base: rgb(30, 32, 48); + alternateBase: rgb(24, 25, 38); + + text: rgb(202, 211, 245); + + button: rgb(54, 58, 79); + buttonText: rgb(165, 173, 203); + + brightText: rgb(165, 173, 203); + + light: rgb(54, 58, 79); + mid: rgb(36, 39, 58); + dark: rgb(30, 32, 48); + shadow: rgb(24, 25, 38); + + primary: rgb(73, 77, 100); + primaryLight: rgb(138, 173, 244); + primaryDark: rgb(24, 25, 38); + + highlight: rgb(138, 173, 244); + highlightText: rgb(165, 173, 203); + + link: rgb(244, 219, 214); + linkVisited: rgb(240, 198, 198); +} + +OBSTheme::disabled { + windowText: rgb(128, 135, 162); + text: rgb(128, 135, 162); + button: rgb(36, 39, 58); + + buttonText: rgb(30, 32, 48); + brightText: rgb(30, 32, 48); +} + +OBSTheme::inactive { + text: rgb(165, 173, 203); + + highlight: rgb(24, 25, 38); + highlightText: rgb(202, 211, 245); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(24, 25, 38); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(128, 135, 162); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(110, 115, 141); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(128, 135, 162); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(73, 77, 100); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(73, 77, 100); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(54, 58, 79); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(128, 135, 162); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(73, 77, 100); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(54, 58, 79); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(54, 58, 79); +} + +QScrollBar::handle:hover { + background-color: rgb(73, 77, 100); + border-color: rgb(73, 77, 100); +} + +QScrollBar::handle:pressed { + background-color: rgb(54, 58, 79); + border-color: rgb(54, 58, 79); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(73, 77, 100); +} + +QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(54, 58, 79); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(24, 25, 38); +} + +QTabBar::tab:hover { + background: rgb(73, 77, 100); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(54, 58, 79); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(202, 211, 245); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(202, 211, 245); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(54, 58, 79); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(54, 58, 79); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(73, 77, 100); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(110, 115, 141); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(73, 77, 100); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(54, 58, 79); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(73, 77, 100); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(54, 58, 79); + border: 2px solid rgb(54, 58, 79); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(91, 96, 120); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(73, 77, 100); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(73, 77, 100); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(24, 25, 38); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(24, 25, 38); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(24, 25, 38); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(138, 173, 244); + color: rgb(24, 25, 38); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(183, 189, 248); + color: rgb(24, 25, 38); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(54, 58, 79); +} + +QPushButton:checked { + background-color: rgb(73, 77, 100); +} + +QPushButton:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton:pressed { + background-color: rgb(24, 25, 38); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(24, 25, 38); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(54, 58, 79); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(54, 58, 79); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(128, 135, 162); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(73, 77, 100); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(24, 25, 38); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 218, 149); + qproperty-backgroundWarningColor: rgb(245, 169, 127); + qproperty-backgroundErrorColor: rgb(237, 135, 150); + qproperty-foregroundNominalColor: rgb(109, 194, 81); + qproperty-foregroundWarningColor: rgb(238, 111, 41); + qproperty-foregroundErrorColor: rgb(225, 54, 79); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(202, 211, 245); + qproperty-minorTickColor: rgb(110, 115, 141); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(54, 58, 79); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(245, 169, 127); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(245, 169, 127); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 218, 149); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(24, 25, 38); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(165, 173, 203); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(73, 77, 100); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(73, 77, 100); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(73, 77, 100); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(54, 58, 79); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(73, 77, 100); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(73, 77, 100); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(138, 173, 244); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(73, 77, 100); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(24, 25, 38); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha (compact).qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha (compact).qss new file mode 100755 index 0000000..86492f8 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(245, 224, 220); /* Rosewater */ +/* rgb(242, 205, 205); /* Flamingo */ +/* rgb(243, 139, 168); /* Red */ +/* rgb(235, 160, 172); /* Maroon */ +/* rgb(250, 179, 135); /* Peach */ +/* rgb(166, 227, 161); /* Green */ +/* rgb(137, 180, 250); /* Blue */ +/* rgb(205, 214, 244); /* Text */ +/* rgb(166, 173, 200); /* Subtext0 */ +/* rgb(127, 132, 156); /* Overlay1 */ +/* rgb(108, 112, 134); /* Overlay0 */ +/* rgb(69, 71, 90); /* Surface1 */ +/* rgb(49, 50, 68); /* Surface0 */ +/* rgb(30, 30, 46); /* Base */ +/* rgb(24, 24, 37); /* Mantle */ +/* rgb(17, 17, 27); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(30, 30, 46); + windowText: rgb(166, 173, 200); + base: rgb(24, 24, 37); + alternateBase: rgb(17, 17, 27); + text: rgb(205, 214, 244); + button: rgb(49, 50, 68); + buttonText: rgb(166, 173, 200); + brightText: rgb(166, 173, 200); + + light: rgb(49, 50, 68); + mid: rgb(30, 30, 46); + dark: rgb(24, 24, 37); + shadow: rgb(17, 17, 27); + + highlight: rgb(137, 180, 250); + highlightedText: rgb(166, 173, 200); + + link: rgb(245, 224, 220); + linkVisited: rgb(242, 205, 205); +} + +OBSTheme::disabled { + text: rgb(127, 132, 156); + buttonText: rgb(127, 132, 156); + brightText: rgb(24, 24, 37); +} + +OBSTheme::inactive { + highlight: rgb(17, 17, 27); + highlightedText: rgb(205, 214, 244); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(69, 71, 90); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(69, 71, 90); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(24, 24, 37); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(17, 17, 27); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 227, 161); + qproperty-backgroundWarningColor: rgb(250, 179, 135); + qproperty-backgroundErrorColor: rgb(243, 139, 168); + qproperty-foregroundNominalColor: rgb(95, 205, 86); + qproperty-foregroundWarningColor: rgb(246, 120, 43); + qproperty-foregroundErrorColor: rgb(234, 52, 103); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(205, 214, 244); + qproperty-minorTickColor: rgb(108, 112, 134); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(250, 179, 135); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(250, 179, 135); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 227, 161); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(166, 173, 200); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(166, 173, 200); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(49, 50, 68); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(69, 71, 90); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(69, 71, 90); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(17, 17, 27); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(17, 17, 27); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(69, 71, 90); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha.qss b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha.qss new file mode 100755 index 0000000..e90a43d --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin Mocha.qss @@ -0,0 +1,1522 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(30, 30, 46); + windowText: rgb(166, 173, 200); + + base: rgb(24, 24, 37); + alternateBase: rgb(17, 17, 27); + + text: rgb(205, 214, 244); + + button: rgb(49, 50, 68); + buttonText: rgb(166, 173, 200); + + brightText: rgb(166, 173, 200); + + light: rgb(49, 50, 68); + mid: rgb(30, 30, 46); + dark: rgb(24, 24, 37); + shadow: rgb(17, 17, 27); + + primary: rgb(69, 71, 90); + primaryLight: rgb(137, 180, 250); + primaryDark: rgb(17, 17, 27); + + highlight: rgb(137, 180, 250); + highlightText: rgb(166, 173, 200); + + link: rgb(245, 224, 220); + linkVisited: rgb(242, 205, 205); +} + +OBSTheme::disabled { + windowText: rgb(127, 132, 156); + text: rgb(127, 132, 156); + button: rgb(30, 30, 46); + + buttonText: rgb(24, 24, 37); + brightText: rgb(24, 24, 37); +} + +OBSTheme::inactive { + text: rgb(166, 173, 200); + + highlight: rgb(17, 17, 27); + highlightText: rgb(205, 214, 244); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(17, 17, 27); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(127, 132, 156); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(108, 112, 134); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(127, 132, 156); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(69, 71, 90); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(69, 71, 90); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(49, 50, 68); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(127, 132, 156); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(69, 71, 90); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(49, 50, 68); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(49, 50, 68); +} + +QScrollBar::handle:hover { + background-color: rgb(69, 71, 90); + border-color: rgb(69, 71, 90); +} + +QScrollBar::handle:pressed { + background-color: rgb(49, 50, 68); + border-color: rgb(49, 50, 68); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(69, 71, 90); +} + +QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(49, 50, 68); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(17, 17, 27); +} + +QTabBar::tab:hover { + background: rgb(69, 71, 90); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(49, 50, 68); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(205, 214, 244); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(205, 214, 244); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(49, 50, 68); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(49, 50, 68); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(69, 71, 90); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(25,28,34); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(69, 71, 90); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(49, 50, 68); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(69, 71, 90); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(49, 50, 68); + border: 2px solid rgb(49, 50, 68); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(88, 91, 112); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(69, 71, 90); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(69, 71, 90); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(17, 17, 27); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(17, 17, 27); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(17, 17, 27); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(137, 180, 250); + color: rgb(17, 17, 27); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(180, 190, 254); + color: rgb(17, 17, 27); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(49, 50, 68); +} + +QPushButton:checked { + background-color: rgb(69, 71, 90); +} + +QPushButton:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton:pressed { + background-color: rgb(17, 17, 27); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(17, 17, 27); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(49, 50, 68); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(49, 50, 68); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(127, 132, 156); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(69, 71, 90); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(17, 17, 27); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 227, 161); + qproperty-backgroundWarningColor: rgb(250, 179, 135); + qproperty-backgroundErrorColor: rgb(243, 139, 168); + qproperty-foregroundNominalColor: rgb(95, 205, 86); + qproperty-foregroundWarningColor: rgb(246, 120, 43); + qproperty-foregroundErrorColor: rgb(234, 52, 103); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(205, 214, 244); + qproperty-minorTickColor: rgb(108, 112, 134); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(49, 50, 68); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +/* Mute CheckBox */ + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(250, 179, 135); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(250, 179, 135); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 227, 161); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(17, 17, 27); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(166, 173, 200); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(69, 71, 90); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(69, 71, 90); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(69, 71, 90); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(49, 50, 68); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(69, 71, 90); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(69, 71, 90); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(137, 180, 250); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(69, 71, 90); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(17, 17, 27); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/alert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/alert.svg new file mode 100755 index 0000000..30d6ea8 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/alert.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked.svg new file mode 100755 index 0000000..6448ba9 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg new file mode 100755 index 0000000..ece5841 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_focus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_focus.svg new file mode 100755 index 0000000..ff1f0c7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_checked_focus.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked.svg new file mode 100755 index 0000000..7b3f10b --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..104f8b5 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg new file mode 100755 index 0000000..66f3f15 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/close.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/close.svg new file mode 100755 index 0000000..2a10db8 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/cogs.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/cogs.svg new file mode 100755 index 0000000..3a013db --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/cogs.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/collapse.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/collapse.svg new file mode 100755 index 0000000..edd2ae0 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/collapse.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots-vert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots-vert.svg new file mode 100755 index 0000000..ae702ad --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots-vert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots.svg new file mode 100755 index 0000000..41dd93e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/down.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/down.svg new file mode 100755 index 0000000..b475714 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/entry-clear.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/entry-clear.svg new file mode 100755 index 0000000..d302984 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/entry-clear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/expand.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/expand.svg new file mode 100755 index 0000000..a1afddf --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/expand.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/filter.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/filter.svg new file mode 100755 index 0000000..0038a76 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/filter.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/interact.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/interact.svg new file mode 100755 index 0000000..b1dc53f --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/interact.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/left.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/left.svg new file mode 100755 index 0000000..469481f --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/locked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/locked.svg new file mode 100755 index 0000000..1678500 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/locked.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media-pause.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media-pause.svg new file mode 100755 index 0000000..2743bc4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media-pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_next.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_next.svg new file mode 100755 index 0000000..db82996 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_next.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_pause.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_pause.svg new file mode 100755 index 0000000..2743bc4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_play.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_play.svg new file mode 100755 index 0000000..cb08f84 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_previous.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_previous.svg new file mode 100755 index 0000000..15c3342 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_previous.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_restart.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_restart.svg new file mode 100755 index 0000000..be65361 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_restart.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_stop.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_stop.svg new file mode 100755 index 0000000..caa1f2d --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/media/media_stop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/minus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/minus.svg new file mode 100755 index 0000000..73df860 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/minus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/mute.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/mute.svg new file mode 100755 index 0000000..9a63c7e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/mute.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/no_sources.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/no_sources.svg new file mode 100755 index 0000000..3c7bd7c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/no_sources.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/plus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/plus.svg new file mode 100755 index 0000000..4bf3192 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/popout.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/popout.svg new file mode 100755 index 0000000..afba03a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/popout.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/refresh.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/refresh.svg new file mode 100755 index 0000000..5549e68 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/refresh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/revert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/revert.svg new file mode 100755 index 0000000..3f7b985 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/revert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/right.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/right.svg new file mode 100755 index 0000000..cb03edf --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/save.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/save.svg new file mode 100755 index 0000000..52d0464 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/save.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/accessibility.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/accessibility.svg new file mode 100755 index 0000000..f81e046 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/accessibility.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/advanced.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/advanced.svg new file mode 100755 index 0000000..4e20a9a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/advanced.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/audio.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/audio.svg new file mode 100755 index 0000000..5470659 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/general.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/general.svg new file mode 100755 index 0000000..78511bb --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/general.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/hotkeys.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/hotkeys.svg new file mode 100755 index 0000000..f86f15e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/hotkeys.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/output.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/output.svg new file mode 100755 index 0000000..6f064d7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/output.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/stream.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/stream.svg new file mode 100755 index 0000000..f764787 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/stream.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/video.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/video.svg new file mode 100755 index 0000000..ae0076b --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/settings/video.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/brush.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/brush.svg new file mode 100755 index 0000000..a975657 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/brush.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/camera.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/camera.svg new file mode 100755 index 0000000..1903979 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/camera.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/default.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/default.svg new file mode 100755 index 0000000..cc505c8 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/gamepad.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/gamepad.svg new file mode 100755 index 0000000..a78be69 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/gamepad.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/globe.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/globe.svg new file mode 100755 index 0000000..809552c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/globe.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/group.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/group.svg new file mode 100755 index 0000000..43c48b7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/group.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/image.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/image.svg new file mode 100755 index 0000000..0e35684 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/image.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/media.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/media.svg new file mode 100755 index 0000000..cb08f84 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/media.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/microphone.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/microphone.svg new file mode 100755 index 0000000..4c6259e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/microphone.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/scene.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/scene.svg new file mode 100755 index 0000000..faab772 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/scene.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/slideshow.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/slideshow.svg new file mode 100755 index 0000000..d5b9245 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/slideshow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/text.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/text.svg new file mode 100755 index 0000000..e4c86f9 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/text.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/window.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/window.svg new file mode 100755 index 0000000..1798d1f --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/window.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/windowaudio.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/windowaudio.svg new file mode 100755 index 0000000..a5d9712 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/sources/windowaudio.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/trash.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/trash.svg new file mode 100755 index 0000000..0e4c408 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/trash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/up.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/up.svg new file mode 100755 index 0000000..53d8e75 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/updown.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/updown.svg new file mode 100755 index 0000000..0e94483 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/updown.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/visible.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/visible.svg new file mode 100755 index 0000000..d4ff003 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Dark/visible.svg @@ -0,0 +1,2 @@ + +image/svg+xmlGnome Symbolic Icon ThemeGnome Symbolic Icon Theme diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/alert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/alert.svg new file mode 100755 index 0000000..1205be7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/alert.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked.svg new file mode 100755 index 0000000..456dc07 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_disabled.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_disabled.svg new file mode 100755 index 0000000..725b794 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_disabled.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_focus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_focus.svg new file mode 100755 index 0000000..86bb686 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_checked_focus.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked.svg new file mode 100755 index 0000000..9f90d3a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..9494782 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg new file mode 100755 index 0000000..8d8870c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/close.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/close.svg new file mode 100755 index 0000000..ad7aecd --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/cogs.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/cogs.svg new file mode 100755 index 0000000..b5b4102 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/cogs.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/collapse.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/collapse.svg new file mode 100755 index 0000000..325cd64 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/collapse.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots-vert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots-vert.svg new file mode 100755 index 0000000..3ae2e00 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots-vert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots.svg new file mode 100755 index 0000000..bf2b902 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/down.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/down.svg new file mode 100755 index 0000000..d62efa4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/entry-clear.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/entry-clear.svg new file mode 100755 index 0000000..43c9deb --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/entry-clear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/expand.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/expand.svg new file mode 100755 index 0000000..8b4837a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/expand.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/filter.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/filter.svg new file mode 100755 index 0000000..ed6de81 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/filter.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/interact.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/interact.svg new file mode 100755 index 0000000..806b0a0 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/interact.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/left.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/left.svg new file mode 100755 index 0000000..4bd2ec8 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/locked.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/locked.svg new file mode 100755 index 0000000..a30bc94 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/locked.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media-pause.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media-pause.svg new file mode 100755 index 0000000..54f9df4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media-pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_next.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_next.svg new file mode 100755 index 0000000..5e92672 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_next.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_pause.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_pause.svg new file mode 100755 index 0000000..54f9df4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_play.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_play.svg new file mode 100755 index 0000000..6664825 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_previous.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_previous.svg new file mode 100755 index 0000000..8727f49 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_previous.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_restart.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_restart.svg new file mode 100755 index 0000000..b876112 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_restart.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_stop.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_stop.svg new file mode 100755 index 0000000..f79552d --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/media/media_stop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/minus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/minus.svg new file mode 100755 index 0000000..d5369ac --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/minus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/mute.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/mute.svg new file mode 100755 index 0000000..9a63c7e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/mute.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/no_sources.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/no_sources.svg new file mode 100755 index 0000000..154fcbd --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/no_sources.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/plus.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/plus.svg new file mode 100755 index 0000000..149e6d0 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/popout.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/popout.svg new file mode 100755 index 0000000..afba03a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/popout.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/refresh.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/refresh.svg new file mode 100755 index 0000000..4871cb4 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/refresh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/revert.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/revert.svg new file mode 100755 index 0000000..2d0aa4c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/revert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/right.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/right.svg new file mode 100755 index 0000000..246a3ab --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/save.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/save.svg new file mode 100755 index 0000000..4a05c05 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/save.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/accessibility.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/accessibility.svg new file mode 100755 index 0000000..1d884bc --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/accessibility.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/advanced.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/advanced.svg new file mode 100755 index 0000000..8e2d843 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/advanced.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/audio.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/audio.svg new file mode 100755 index 0000000..13f201d --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/general.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/general.svg new file mode 100755 index 0000000..52a5d7f --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/general.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/hotkeys.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/hotkeys.svg new file mode 100755 index 0000000..d04531f --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/hotkeys.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/output.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/output.svg new file mode 100755 index 0000000..3ab573c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/output.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/stream.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/stream.svg new file mode 100755 index 0000000..85f0145 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/stream.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/video.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/video.svg new file mode 100755 index 0000000..1bad561 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/settings/video.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/brush.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/brush.svg new file mode 100755 index 0000000..077e070 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/brush.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/camera.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/camera.svg new file mode 100755 index 0000000..be12c1b --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/camera.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/default.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/default.svg new file mode 100755 index 0000000..c3d9db0 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/gamepad.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/gamepad.svg new file mode 100755 index 0000000..d668a16 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/gamepad.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/globe.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/globe.svg new file mode 100755 index 0000000..5a753c2 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/globe.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/group.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/group.svg new file mode 100755 index 0000000..99af8d3 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/group.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/image.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/image.svg new file mode 100755 index 0000000..4f99a8c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/image.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/media.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/media.svg new file mode 100755 index 0000000..6664825 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/media.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/microphone.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/microphone.svg new file mode 100755 index 0000000..b3caeb0 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/microphone.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/scene.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/scene.svg new file mode 100755 index 0000000..c2fc500 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/scene.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/slideshow.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/slideshow.svg new file mode 100755 index 0000000..cf30442 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/slideshow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/text.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/text.svg new file mode 100755 index 0000000..6bacd74 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/text.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/window.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/window.svg new file mode 100755 index 0000000..2f4659a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/window.svg @@ -0,0 +1,2 @@ + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/windowaudio.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/windowaudio.svg new file mode 100755 index 0000000..2bbf780 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/sources/windowaudio.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/trash.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/trash.svg new file mode 100755 index 0000000..86eeda7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/trash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/up.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/up.svg new file mode 100755 index 0000000..67ccd46 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/updown.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/updown.svg new file mode 100755 index 0000000..3c33fd7 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/updown.svg @@ -0,0 +1 @@ + diff --git a/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/visible.svg b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/visible.svg new file mode 100755 index 0000000..fafc408 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/obsStudio/themes/Catppuccin/Light/visible.svg @@ -0,0 +1,2 @@ + +image/svg+xmlGnome Symbolic Icon ThemeGnome Symbolic Icon Theme diff --git a/modules/home/gui/apps/media/video/videoEditing/shotcut/default.nix b/modules/home/gui/apps/media/video/videoEditing/shotcut/default.nix new file mode 100755 index 0000000..db0aade --- /dev/null +++ b/modules/home/gui/apps/media/video/videoEditing/shotcut/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + shotcut + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/default.nix b/modules/home/gui/apps/media/video/videoPlaying/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/freetube/config/settings.nix b/modules/home/gui/apps/media/video/videoPlaying/freetube/config/settings.nix new file mode 100755 index 0000000..a007b07 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/freetube/config/settings.nix @@ -0,0 +1,44 @@ +{ + allSettingsSectionsExpandedByDefault = false; + barColor = false; + baseTheme = "catppuccinMocha"; + bounds = { + x = 880; + y = 221; + width = 1200; + height = 800; + maximized = false; + fullScreen = false; + }; + defaultQuality = "1080"; + downloadAskPath = false; + downloadBehavior = "download"; + downloadFolderPath = "/home/nick/Downloads/FreeTube"; + expandSideBar = true; + externalPlayer = "mpv"; + hideActiveSubscriptions = false; + hideCommentLikes = true; + hideCommentPhotos = true; + hideHeaderLogo = true; + hideLabelsSideBar = true; + hidePlaylists = true; + hidePopularVideos = true; + hideRecommendedVideos = true; + hideSubscriptionsShorts = false; + hideSubscriptionsVideos = false; + hideTrendingVideos = true; + hideVideoLikesAndDislikes = true; + mainColor = "CatppuccinMochaMauve"; + maxVideoPlaybackRate = 10; + playNextVideo = false; + quickBookmarkTargetPlaylistId = "favorites"; + rememberHistory = false; + saveWatchedProgress = false; + secColor = "CatppuccinMochaLavender"; + useDeArrowThumbnails = true; + useDeArrowTitles = true; + useSponsorBlock = true; + defaultTheatreMode = true; + listType = "grid"; + currentLocale = "en_GB"; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/freetube/default.nix b/modules/home/gui/apps/media/video/videoPlaying/freetube/default.nix new file mode 100755 index 0000000..2872d9c --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/freetube/default.nix @@ -0,0 +1,11 @@ +{ + programs.freetube = + let + configPath = ./config; + settingsPath = import (configPath + /settings.nix); + in + { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/jellyfin/default.nix b/modules/home/gui/apps/media/video/videoPlaying/jellyfin/default.nix new file mode 100755 index 0000000..0157950 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/jellyfin/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + jellyfin-media-player + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/mpv/default.nix b/modules/home/gui/apps/media/video/videoPlaying/mpv/default.nix new file mode 100755 index 0000000..43a207a --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/mpv/default.nix @@ -0,0 +1,11 @@ +{ + programs.mpv = { + enable = true; + config = { + profile = "gpu-hq"; + ytdl-format = "bestvideo+bestaudio"; + cache-default = 4000000; + loop-file = "inf"; + }; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/stremio/default.nix b/modules/home/gui/apps/media/video/videoPlaying/stremio/default.nix new file mode 100755 index 0000000..22c2741 --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/stremio/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + stremio + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/syncplay/default.nix b/modules/home/gui/apps/media/video/videoPlaying/syncplay/default.nix new file mode 100755 index 0000000..196150b --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/syncplay/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + syncplay + ; + }; +} diff --git a/modules/home/gui/apps/media/video/videoPlaying/vlc/default.nix b/modules/home/gui/apps/media/video/videoPlaying/vlc/default.nix new file mode 100755 index 0000000..6df9a4e --- /dev/null +++ b/modules/home/gui/apps/media/video/videoPlaying/vlc/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + vlc + ; + }; +} diff --git a/modules/home/gui/apps/messaging/default.nix b/modules/home/gui/apps/messaging/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/messaging/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/messaging/discord/default.nix b/modules/home/gui/apps/messaging/discord/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/messaging/discord/discordCanary/default.nix b/modules/home/gui/apps/messaging/discord/discordCanary/default.nix new file mode 100755 index 0000000..35e1320 --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/discordCanary/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + discord-canary + ; + }; +} diff --git a/modules/home/gui/apps/messaging/discord/discordOfficial/default.nix b/modules/home/gui/apps/messaging/discord/discordOfficial/default.nix new file mode 100755 index 0000000..29513ac --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/discordOfficial/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + discord + ; + }; +} diff --git a/modules/home/gui/apps/messaging/discord/dissent/default.nix b/modules/home/gui/apps/messaging/discord/dissent/default.nix new file mode 100755 index 0000000..8ee3548 --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/dissent/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + dissent + ; + }; +} diff --git a/modules/home/gui/apps/messaging/discord/vesktop/default.nix b/modules/home/gui/apps/messaging/discord/vesktop/default.nix new file mode 100755 index 0000000..d2fcbcd --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/vesktop/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + vesktop + ; + }; +} diff --git a/modules/home/gui/apps/messaging/discord/webcord/default.nix b/modules/home/gui/apps/messaging/discord/webcord/default.nix new file mode 100755 index 0000000..136b7d0 --- /dev/null +++ b/modules/home/gui/apps/messaging/discord/webcord/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + webcord + ; + }; +} diff --git a/modules/home/gui/apps/messaging/matrix/default.nix b/modules/home/gui/apps/messaging/matrix/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/messaging/matrix/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/messaging/matrix/element/default.nix b/modules/home/gui/apps/messaging/matrix/element/default.nix new file mode 100755 index 0000000..9dfabfb --- /dev/null +++ b/modules/home/gui/apps/messaging/matrix/element/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + element-desktop + ; + }; +} diff --git a/modules/home/gui/apps/messaging/matrix/nheko/default.nix b/modules/home/gui/apps/messaging/matrix/nheko/default.nix new file mode 100755 index 0000000..601835b --- /dev/null +++ b/modules/home/gui/apps/messaging/matrix/nheko/default.nix @@ -0,0 +1,8 @@ +{ + programs.nheko = { + enable = true; + settings = { + + }; + }; +} diff --git a/modules/home/gui/apps/messaging/signal/default.nix b/modules/home/gui/apps/messaging/signal/default.nix new file mode 100755 index 0000000..6e06ffc --- /dev/null +++ b/modules/home/gui/apps/messaging/signal/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + signal-desktop + ; + }; +} diff --git a/modules/home/gui/apps/messaging/slack/default.nix b/modules/home/gui/apps/messaging/slack/default.nix new file mode 100755 index 0000000..33a2328 --- /dev/null +++ b/modules/home/gui/apps/messaging/slack/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + slack + ; + }; +} diff --git a/modules/home/gui/apps/messaging/tdesktop/default.nix b/modules/home/gui/apps/messaging/tdesktop/default.nix new file mode 100755 index 0000000..2b74ab4 --- /dev/null +++ b/modules/home/gui/apps/messaging/tdesktop/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + tdesktop + ; + }; +} diff --git a/modules/home/gui/apps/messaging/teams/default.nix b/modules/home/gui/apps/messaging/teams/default.nix new file mode 100755 index 0000000..fd6207b --- /dev/null +++ b/modules/home/gui/apps/messaging/teams/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + teams-for-linux + ; + }; +} diff --git a/modules/home/gui/apps/messaging/whatsApp/default.nix b/modules/home/gui/apps/messaging/whatsApp/default.nix new file mode 100755 index 0000000..2ce246e --- /dev/null +++ b/modules/home/gui/apps/messaging/whatsApp/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + whatsapp-for-linux + ; + }; +} diff --git a/modules/home/gui/apps/messaging/zoom/default.nix b/modules/home/gui/apps/messaging/zoom/default.nix new file mode 100755 index 0000000..abdff76 --- /dev/null +++ b/modules/home/gui/apps/messaging/zoom/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + zoom-us + ; + }; +} diff --git a/modules/home/gui/apps/sharing/default.nix b/modules/home/gui/apps/sharing/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/sharing/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/sharing/nicotinePlus/default.nix b/modules/home/gui/apps/sharing/nicotinePlus/default.nix new file mode 100755 index 0000000..5adb194 --- /dev/null +++ b/modules/home/gui/apps/sharing/nicotinePlus/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + nicotine-plus + ; + }; +} diff --git a/modules/home/gui/apps/sharing/qBittorrent/catppuccin-macchiato.qbtheme b/modules/home/gui/apps/sharing/qBittorrent/catppuccin-macchiato.qbtheme new file mode 100755 index 0000000..ac46bd2 Binary files /dev/null and b/modules/home/gui/apps/sharing/qBittorrent/catppuccin-macchiato.qbtheme differ diff --git a/modules/home/gui/apps/sharing/qBittorrent/default.nix b/modules/home/gui/apps/sharing/qBittorrent/default.nix new file mode 100755 index 0000000..e5bbf8b --- /dev/null +++ b/modules/home/gui/apps/sharing/qBittorrent/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + qbittorrent + ; + }; +} diff --git a/modules/home/gui/apps/sharing/soulseekQt/default.nix b/modules/home/gui/apps/sharing/soulseekQt/default.nix new file mode 100755 index 0000000..9010be4 --- /dev/null +++ b/modules/home/gui/apps/sharing/soulseekQt/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + soulseekqt + ; + }; +} diff --git a/modules/home/gui/apps/tools/bitwarden/default.nix b/modules/home/gui/apps/tools/bitwarden/default.nix new file mode 100755 index 0000000..95c3fa6 --- /dev/null +++ b/modules/home/gui/apps/tools/bitwarden/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + bitwarden + ; + }; +} diff --git a/modules/home/gui/apps/tools/celeste/default.nix b/modules/home/gui/apps/tools/celeste/default.nix new file mode 100755 index 0000000..bac5161 --- /dev/null +++ b/modules/home/gui/apps/tools/celeste/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + celeste + ; + }; +} diff --git a/modules/home/gui/apps/tools/default.nix b/modules/home/gui/apps/tools/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/apps/tools/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/apps/tools/deskreen/default.nix b/modules/home/gui/apps/tools/deskreen/default.nix new file mode 100755 index 0000000..99b59bf --- /dev/null +++ b/modules/home/gui/apps/tools/deskreen/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + deskreen + ; + }; +} diff --git a/modules/home/gui/apps/tools/dolphin/default.nix b/modules/home/gui/apps/tools/dolphin/default.nix new file mode 100755 index 0000000..b7525ef --- /dev/null +++ b/modules/home/gui/apps/tools/dolphin/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + dolphin + ; + }; +} diff --git a/modules/home/gui/apps/tools/droidCam/default.nix b/modules/home/gui/apps/tools/droidCam/default.nix new file mode 100755 index 0000000..3e5bb44 --- /dev/null +++ b/modules/home/gui/apps/tools/droidCam/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + droidcam + ; + }; +} diff --git a/modules/home/gui/apps/tools/emote/default.nix b/modules/home/gui/apps/tools/emote/default.nix new file mode 100755 index 0000000..acd508d --- /dev/null +++ b/modules/home/gui/apps/tools/emote/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + emote + ; + }; +} diff --git a/modules/home/gui/apps/tools/flameshot/default.nix b/modules/home/gui/apps/tools/flameshot/default.nix new file mode 100755 index 0000000..0761a97 --- /dev/null +++ b/modules/home/gui/apps/tools/flameshot/default.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: + +let + flameshotGrim = pkgs.flameshot.overrideAttrs (oldAttrs: { + src = pkgs.fetchFromGitHub { + owner = "flameshot-org"; + repo = "flameshot"; + rev = "3d21e4967b68e9ce80fb2238857aa1bf12c7b905"; + sha256 = "sha256-OLRtF/yjHDN+sIbgilBZ6sBZ3FO6K533kFC1L2peugc="; + }; + cmakeFlags = [ + "-DUSE_WAYLAND_CLIPBOARD=1" + "-DUSE_WAYLAND_GRIM=1" + ]; + buildInputs = oldAttrs.buildInputs ++ [ pkgs.libsForQt5.kguiaddons ]; + }); +in +{ + services.flameshot = { + enable = true; + package = flameshotGrim; + settings = { + General = { + disabledTrayIcon = false; + showStartupLaunchMessage = false; + # disabledGrimWarning = false; + }; + }; + }; + home.packages = builtins.attrValues { + inherit (pkgs) + # flameshot + ; + }; +} diff --git a/modules/home/gui/apps/tools/gnomeCalculator/default.nix b/modules/home/gui/apps/tools/gnomeCalculator/default.nix new file mode 100755 index 0000000..61cbf02 --- /dev/null +++ b/modules/home/gui/apps/tools/gnomeCalculator/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + gnome-calculator + ; + }; +} diff --git a/modules/home/gui/apps/tools/ledger/default.nix b/modules/home/gui/apps/tools/ledger/default.nix new file mode 100755 index 0000000..be4be59 --- /dev/null +++ b/modules/home/gui/apps/tools/ledger/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + ledger-live-desktop + ; + }; +} diff --git a/modules/home/gui/apps/tools/mullvad/default.nix b/modules/home/gui/apps/tools/mullvad/default.nix new file mode 100755 index 0000000..27636ef --- /dev/null +++ b/modules/home/gui/apps/tools/mullvad/default.nix @@ -0,0 +1,13 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + # mullvad + mullvad-closest + mullvad-vpn + ; + }; +} diff --git a/modules/home/gui/apps/tools/openRgb/default.nix b/modules/home/gui/apps/tools/openRgb/default.nix new file mode 100755 index 0000000..e46f112 --- /dev/null +++ b/modules/home/gui/apps/tools/openRgb/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + openrgb + ; + + }; +} diff --git a/modules/home/gui/apps/tools/openTablet/default.nix b/modules/home/gui/apps/tools/openTablet/default.nix new file mode 100755 index 0000000..0be1061 --- /dev/null +++ b/modules/home/gui/apps/tools/openTablet/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + opentabletdriver + ; + + }; +} diff --git a/modules/home/gui/apps/tools/polychromatic/default.nix b/modules/home/gui/apps/tools/polychromatic/default.nix new file mode 100755 index 0000000..cf99617 --- /dev/null +++ b/modules/home/gui/apps/tools/polychromatic/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + polychromatic + ; + }; +} diff --git a/modules/home/gui/apps/tools/scrcpy/default.nix b/modules/home/gui/apps/tools/scrcpy/default.nix new file mode 100755 index 0000000..859beee --- /dev/null +++ b/modules/home/gui/apps/tools/scrcpy/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + scrcpy + qtscrcpy + ; + }; +} diff --git a/modules/home/gui/apps/tools/synologyDrive/default.nix b/modules/home/gui/apps/tools/synologyDrive/default.nix new file mode 100755 index 0000000..491f7ca --- /dev/null +++ b/modules/home/gui/apps/tools/synologyDrive/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + synology-drive-client + ; + }; +} diff --git a/modules/home/gui/apps/tools/systemMonitor/default.nix b/modules/home/gui/apps/tools/systemMonitor/default.nix new file mode 100755 index 0000000..88428fd --- /dev/null +++ b/modules/home/gui/apps/tools/systemMonitor/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + gnome-system-monitor + ; + }; +} diff --git a/modules/home/gui/apps/tools/usbImager/default.nix b/modules/home/gui/apps/tools/usbImager/default.nix new file mode 100755 index 0000000..3985884 --- /dev/null +++ b/modules/home/gui/apps/tools/usbImager/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + usbimager + ; + }; +} diff --git a/modules/home/gui/apps/tools/virtManager/default.nix b/modules/home/gui/apps/tools/virtManager/default.nix new file mode 100755 index 0000000..ad92f33 --- /dev/null +++ b/modules/home/gui/apps/tools/virtManager/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + virt-manager + ; + }; +} diff --git a/modules/home/gui/default.nix b/modules/home/gui/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/desktop/default.nix b/modules/home/gui/desktop/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/desktop/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/desktop/gnome/default.nix b/modules/home/gui/desktop/gnome/default.nix new file mode 100755 index 0000000..b99bea4 --- /dev/null +++ b/modules/home/gui/desktop/gnome/default.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + gnome-connections + gnome-tweaks + gnome-shell-extensions + gnome-remote-desktop + ulauncher + ; + inherit (pkgs.gnomeExtensions) + tiling-shell + keep-awake + notification-banner-reloaded + no-overview + wallpaper-slideshow + dash-to-panel + just-perfection + appindicator + tiling-assistant + start-overlay-in-application-view + ; + }; +} diff --git a/modules/home/gui/desktop/hypr/default.nix b/modules/home/gui/desktop/hypr/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/desktop/hypr/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/desktop/hypr/idle/config/settings.nix b/modules/home/gui/desktop/hypr/idle/config/settings.nix new file mode 100755 index 0000000..b62cc39 --- /dev/null +++ b/modules/home/gui/desktop/hypr/idle/config/settings.nix @@ -0,0 +1,19 @@ +{ + general = { + after_sleep_cmd = "hyprctl dispatch dpms on"; + ignore_dbus_inhibit = false; + lock_cmd = "swaylock"; + }; + + listener = [ + { + timeout = 900; + on-timeout = "swaylock"; + } + { + timeout = 1800; + on-timeout = "hyprctl dispatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + ]; +} diff --git a/modules/home/gui/desktop/hypr/idle/default.nix b/modules/home/gui/desktop/hypr/idle/default.nix new file mode 100755 index 0000000..9da16ce --- /dev/null +++ b/modules/home/gui/desktop/hypr/idle/default.nix @@ -0,0 +1,10 @@ +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix); +in +{ + services.hypridle = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/gui/desktop/hypr/land/config/animations.nix b/modules/home/gui/desktop/hypr/land/config/animations.nix new file mode 100755 index 0000000..39e06af --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/animations.nix @@ -0,0 +1,18 @@ +{ + enabled = true; + animation = [ + "border, 1, 2.2, bounce" + "fadeIn, 1, 1, bounce" + "fadeOut, 1, 4.5, bounce" + "fadeSwitch, 1, 2.2, bounce" + "windows, 1, 2.2, bounce" + "windowsOut, 1, 1.1, bounce" + "workspaces, 1, 2.2, bounce, slide" + ]; + bezier = [ + "wind, 0, 1, 0.5, 1" + "winIn, 0, 0.5, 0, 1" + "winOut, 0, 0.5, 0, 1" + "bounce, 0.7, 1.7, 0.5, 1" + ]; +} diff --git a/modules/home/gui/desktop/hypr/land/config/bind-user0.nix b/modules/home/gui/desktop/hypr/land/config/bind-user0.nix new file mode 100755 index 0000000..ec09490 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/bind-user0.nix @@ -0,0 +1,98 @@ +let + superBinds = builtins.map (x: "SUPER, " + x) [ + # Apps + "Z, exec, obsidian" + "L, exec, slack" + "H, exec, feishin" + "G, exec, scrcpy" + "K, exec, ghostty -e nu -e y" + "S, exec, steam" + "R, exec, ghostty -e zellij a dotfiles" + "N, exec, signal-desktop" + "T, exec, zeditor" + "B, exec, floorp" + "X, exec, freetube" + "V, exec, discordcanary" + "M, exec, element-desktop" + "D, exec, ghostty" + "P, exec, bitwarden" + # Workspaces + "1, workspace, 1" + "2, workspace, 2" + "3, workspace, 3" + "4, workspace, 4" + "5, workspace, 5" + # Windows + "Tab, killactive" + # Window Focus + "C, movefocus, l" + "A, movefocus, u" + "E, movefocus, d" + "I, movefocus, r" + "F, splitratio, 0.33" + "O, splitratio, -0.33" + # Audio + "PageUp, exec, playerctl next" + "PageDown, exec, playerctl previous" + "Home, exec, playerctl play-pause" + "Space, exec, rm -r /home/$USER/.cache/tofi* ; tofi-drun" + ]; + + superShiftBinds = builtins.map (x: "SUPER SHIFT, " + x) [ + # Super+shift binds + + # Quick Action + "T, exec, ghostty" + "S, exec, flameshot gui" + "period, exec, emote" + "Tab, fullscreen, 0" + "Backspace, layoutmsg, togglesplit" + "P, pin, enable" + "F, togglefloating" + # "Print, exec, grim -g \"$(slurp)\"" + # Utility + "End, exec, shutdown now" + "Insert, exec, systemctl reboot" + "Home, exec, swaylock" + ]; + superCtrlBinds = builtins.map (x: "SUPER CTRL, " + x) [ + # Super+shift binds + + ]; + + altBinds = builtins.map (x: "CTRL ALT, " + x) [ + # Alt binds + "1, movetoworkspacesilent, 1" + "2, movetoworkspacesilent, 2" + "3, movetoworkspacesilent, 3" + "4, movetoworkspacesilent, 4" + "5, movetoworkspacesilent, 5" + # Window Move + "C, movewindow, l" + "A, movewindow, u" + "E, movewindow, d" + "I, movewindow, r" + ]; + + shiftBinds = builtins.map (x: "SHIFT, " + x) [ + # Shift binds + ]; + + ctrlBinds = builtins.map (x: "CTRL, " + x) [ + # Ctrl binds + ]; + + ctrlShiftBinds = builtins.map (x: "CTRL SHIFT, " + x) [ + # Ctrl+shift binds + # "End, exec, shutdown now" + ]; +in +superBinds +++ superShiftBinds +++ superCtrlBinds +++ altBinds +++ ctrlBinds +++ ctrlShiftBinds +++ shiftBinds +# Docs +# https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ diff --git a/modules/home/gui/desktop/hypr/land/config/bind-user1.nix b/modules/home/gui/desktop/hypr/land/config/bind-user1.nix new file mode 100755 index 0000000..ca6a4c7 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/bind-user1.nix @@ -0,0 +1,91 @@ +let + superBinds = builtins.map (x: "SUPER, " + x) [ + # Apps + "B, exec, brave" + "E, exec, ghostty -e nu -e y" + "S, exec, steam" + "N, exec, signal-desktop" + "D, exec, discordcanary" + "R, exec, flatpak run org.vinegarhq.Sober" + "T, exec, ghostty" + "P, exec, spotify" + "M, exec, prismlauncher" + "J, exec, jellyfinmediaplayer" + "L, exec, lutris" + # Workspaces + "1, workspace, 1" + "2, workspace, 2" + "3, workspace, 3" + "4, workspace, 4" + "5, workspace, 5" + # Windows + "X, killactive" + "bracketright, splitratio, 0.33" + "bracketleft, splitratio, -0.33" + "Tab, fullscreen, 0" + "F, togglefloating" + # Window Focus + "left, movefocus, l" + "up, movefocus, u" + "down, movefocus, d" + "right, movefocus, r" + # Audio + "PageUp, exec, playerctl next" + "PageDown, exec, playerctl previous" + "Home, exec, playerctl play-pause" + "Space, exec, rm -r /home/$USER/.cache/tofi* ; tofi-drun" + ]; + + superShiftBinds = builtins.map (x: "SUPER SHIFT, " + x) [ + # Super+shift binds + # Window Move + "left, movewindow, l" + "up, movewindow, u" + "down, movewindow, d" + "right, movewindow, r" + # Quick Action + "S, exec, flameshot gui" + "period, exec, emote" + "Backspace, layoutmsg, togglesplit" + "P, pin, enable" + # "Print, exec, grim -g \"$(slurp)\"" + # Utility + "End, exec, shutdown now" + "Insert, exec, systemctl reboot" + "Home, exec, swaylock" + "1, movetoworkspacesilent, 1" + "2, movetoworkspacesilent, 2" + "3, movetoworkspacesilent, 3" + "4, movetoworkspacesilent, 4" + "5, movetoworkspacesilent, 5" + ]; + superCtrlBinds = builtins.map (x: "SUPER CTRL, " + x) [ + # Super+shift binds + ]; + + altBinds = builtins.map (x: "ALT, " + x) [ + # Alt binds + ]; + + shiftBinds = builtins.map (x: "SHIFT, " + x) [ + # Shift binds + ]; + + ctrlBinds = builtins.map (x: "CTRL, " + x) [ + # Ctrl binds + ]; + + ctrlShiftBinds = builtins.map (x: "CTRL SHIFT, " + x) [ + # Ctrl+shift binds + # "End, exec, shutdown now" + ]; +in +superBinds +++ superShiftBinds +++ superCtrlBinds +++ altBinds +++ ctrlBinds +++ ctrlShiftBinds +++ shiftBinds +# Docs +# https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ diff --git a/modules/home/gui/desktop/hypr/land/config/bindl.nix b/modules/home/gui/desktop/hypr/land/config/bindl.nix new file mode 100755 index 0000000..8c74d44 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/bindl.nix @@ -0,0 +1,4 @@ +[ + ",switch:on:Lid Switch, exec, hyprlock --immediate" + ",switch:off:Lid Switch, exec, hyprlock --immediate" +] diff --git a/modules/home/gui/desktop/hypr/land/config/bindm.nix b/modules/home/gui/desktop/hypr/land/config/bindm.nix new file mode 100755 index 0000000..6c5ec83 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/bindm.nix @@ -0,0 +1,10 @@ +let + superBinds = builtins.map (x: "SUPER, " + x) [ + "mouse:272, resizewindow" + ]; + + altBinds = builtins.map (x: "ALT, " + x) [ + "mouse:272, movewindow" + ]; +in +superBinds ++ altBinds diff --git a/modules/home/gui/desktop/hypr/land/config/binds.nix b/modules/home/gui/desktop/hypr/land/config/binds.nix new file mode 100755 index 0000000..8790494 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/binds.nix @@ -0,0 +1,3 @@ +{ + "allow_workspace_cycles" = "1"; +} diff --git a/modules/home/gui/desktop/hypr/land/config/decoration.nix b/modules/home/gui/desktop/hypr/land/config/decoration.nix new file mode 100755 index 0000000..0e08c0e --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/decoration.nix @@ -0,0 +1,36 @@ +{ + active_opacity = 0.95; + inactive_opacity = 0.90; + fullscreen_opacity = 1; + rounding = 10; + dim_inactive = 1; + dim_strength = 0.05; + + shadow = { + enabled = true; + color = "rgba(00000000)"; + ignore_window = true; + offset = "0 2"; + range = 20; + render_power = 3; + scale = 0.97; + }; + + blur = { + enabled = true; + + size = 5; + passes = 2; + + brightness = 1; + contrast = 1.300000; + ignore_opacity = true; + noise = 0.011700; + + new_optimizations = true; + + xray = true; + popups = true; + popups_ignorealpha = 0.2; + }; +} diff --git a/modules/home/gui/desktop/hypr/land/config/dwindle.nix b/modules/home/gui/desktop/hypr/land/config/dwindle.nix new file mode 100755 index 0000000..3df3c2e --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/dwindle.nix @@ -0,0 +1,4 @@ +{ + pseudotile = true; + preserve_split = true; +} diff --git a/modules/home/gui/desktop/hypr/land/config/exec-once.nix b/modules/home/gui/desktop/hypr/land/config/exec-once.nix new file mode 100755 index 0000000..8a8bb4e --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/exec-once.nix @@ -0,0 +1,33 @@ +{ flake, ... }: +let + inherit (flake.config.aesthetics.themes) + cursor + ; + scarlettOut = "pactl set-default-sink alsa_output.usb-Focusrite_Scarlett_2i2_USB_Y818KFJ0C671CE-00.HiFi__Line1__sink"; + scarlettIn = "pactl set-default-source alsa_input.usb-Focusrite_Scarlett_2i2_USB_Y818KFJ0C671CE-00.HiFi__Mic1__source"; + catppuccin = [ + "gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'" + "gsettings set org.gnome.desktop.interface cursor-theme 'catppuccin-mocha-dark-cursors'" + "gsettings set org.gnome.desktop.interface cursor-size ${builtins.toString cursor.size}" + ]; +in +[ + "swaylock" + "hypridle" + "wl-clipboard" + "wpaperd" + "gammastep" + "dunst" + "playerctrld" + "waybar" + "nm-applet" + "blueman-applet" + "rfkill block bluetooth" + "rfkill unblock bluetooth" + "easyeffects -r" + "emote" + "flameshot" + scarlettIn + scarlettOut +] +++ catppuccin diff --git a/modules/home/gui/desktop/hypr/land/config/general.nix b/modules/home/gui/desktop/hypr/land/config/general.nix new file mode 100755 index 0000000..95ca3f0 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/general.nix @@ -0,0 +1,33 @@ +{ + config, + flake, + ... +}: +let + + inherit (flake.config.aesthetics.themes) currentTheme palettes; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + gaps_in = 5; + gaps_out = 5; + border_size = 2; + "col.active_border" = "rgb(${el.base0E})"; + "col.inactive_border" = "0xff${el.base02}"; + +} diff --git a/modules/home/gui/desktop/hypr/land/config/input.nix b/modules/home/gui/desktop/hypr/land/config/input.nix new file mode 100755 index 0000000..a6294fe --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/input.nix @@ -0,0 +1,6 @@ +{ + sensitivity = 0.07; + accel_profile = "flat"; + follow_mouse = 1; + numlock_by_default = true; +} diff --git a/modules/home/gui/desktop/hypr/land/config/misc.nix b/modules/home/gui/desktop/hypr/land/config/misc.nix new file mode 100755 index 0000000..0c661bb --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/misc.nix @@ -0,0 +1,7 @@ +{ + focus_on_activate = 1; + force_default_wallpaper = 0; + disable_hyprland_logo = true; + disable_splash_rendering = true; + disable_hyprland_qtutils_check = true; +} diff --git a/modules/home/gui/desktop/hypr/land/config/monitor.nix b/modules/home/gui/desktop/hypr/land/config/monitor.nix new file mode 100755 index 0000000..fbd1df1 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/monitor.nix @@ -0,0 +1,6 @@ +let + monitorSettings = [ + "eDP-1,highres@highrr,0x0,1" + ]; +in +monitorSettings diff --git a/modules/home/gui/desktop/hypr/land/config/windowrulev2.nix b/modules/home/gui/desktop/hypr/land/config/windowrulev2.nix new file mode 100755 index 0000000..78d0f1e --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/windowrulev2.nix @@ -0,0 +1,134 @@ +let + blueman = "(.blueman-manager-wrapped)"; + calculator = "(org.gnome.Calculator)"; + easyeffects = "(com.github.wwmm.easyeffects)"; + floorp = "(floorp)"; + nomacs = "(org.nomacs.ImageLounge)"; + mpv = "(mpv)"; + vlc = "(vlc)"; + emote = "(emote)"; + flameshot = "(flameshot)"; + bitwarden = "(.*Bitwarden.*)"; + save = "(.*Enter name of file to save to….*)"; + proton = "(.*.protonvpn-app-wrapped.*)"; + picture = "(.*Picture-in-Picture.*)"; + discord-popout = "(.*Discord Popout.*)"; + upload = "(.*File Upload.*)"; + signal = "(signal)"; + vesktop = "(vesktop)"; + code = "(code)"; + feishin = "(feishin)"; + steam = "(steam)"; + kdenlive = "(org.kde.kdenlive)"; + shotcut = "(shotcut)"; + scrcpy = "(.scrcpy-wrapped)"; + battle = "(.*Battle.net.*)"; + + maxsizeWindows = [ + "maxsize 720 400, class:^${blueman}$" + "maxsize 360 500, class:^${calculator}$" + "maxsize 720 400, class:^${easyeffects}$" + # "maxsize 720 400, class:^${scrcpy}$" + "maxsize 720 400, class:^${mpv}$" + "maxsize 720 400, class:^${vlc}$" + "maxsize 640 360, class:^${nomacs}$" + "maxsize 1000 600, class:^${proton}$" + "maxsize 800 450, title:^${bitwarden}$" + "maxsize 720 400, title:^${picture}$" + "maxsize 720 400, title:^${save}$" + "maxsize 720 400, title:^${discord-popout}$" + "maxsize 1280 720, title:^${battle}$" + "minsize 1280 720, title:^${battle}$" + "maxsize 1280 720, title:^${upload}$" + "minsize 1280 720, title:^${upload}$" + ]; + + floatWindows = builtins.map (x: "float, " + x) [ + "class:^${blueman}$" + "class:^${calculator}$" + "class:^${easyeffects}$" + "class:^${emote}$" + "class:^${mpv}$" + "class:^${vlc}$" + "class:^${nomacs}$" + "class:^${flameshot}$" + # "class:^${scrcpy}$" + "class:^${nomacs}$" + "class:^${proton}$" + "title:^(${picture})$" + "title:^(${discord-popout})$" + "title:^${bitwarden}$" + "title:^${save}$" + "title:^${battle}$" + "title:^${upload}$" + ]; + + pinWindows = builtins.map (x: "pin, " + x) [ + "title:^${picture}$" + "title:^${discord-popout}$" + ]; + + idleInhibit = builtins.map (x: "idleinhibit, " + x) [ + "fullscreen, class:^${floorp}$" + ]; + + workspaceInit1 = builtins.map (x: "workspace 1 silent, " + x) [ + "class:^${signal}$" + "class:^${vesktop}$" + ]; + + workspaceInit2 = builtins.map (x: "workspace 2 silent, " + x) [ + "class:^${code}$" + # "class:^${floorp}$" + ]; + + workspaceInit3 = builtins.map (x: "workspace 3 silent, " + x) [ + "class:^${steam}$" + "class:^${shotcut}$" + ]; + + workspaceInit4 = builtins.map (x: "workspace 4 silent, " + x) [ + "class:^${feishin}$" + "class:^${scrcpy}$" + ]; + + centerWindows = builtins.map (x: "center, " + x) [ + "class:^${blueman}$" + "class:^${calculator}$" + "class:^${easyeffects}$" + "class:^${emote}$" + "class:^${mpv}$" + "class:^${vlc}$" + "class:^${nomacs}$" + "class:^${flameshot}$" + # "class:^${scrcpy}$" + "title:^(${picture})$" + "title:^(${discord-popout})$" + "title:^${bitwarden}$" + "title:^${save}$" + "title:^${battle}$" + "title:^${upload}$" + ]; + + opaqueWindows = builtins.map (x: "opaque, " + x) [ + "class:^${floorp}$" + "class:^${kdenlive}$" + "class:^(krita)$" + "class:^${shotcut}$" + "class:^${mpv}$" + "class:^(Brave-browser)$" + "class:^(Gimp-2.10)$" + "class:^(org.kde.okular)$" + "class:^${vlc}$" + ]; +in +maxsizeWindows +++ floatWindows +++ pinWindows +++ idleInhibit +++ workspaceInit1 +++ workspaceInit2 +++ workspaceInit3 +++ workspaceInit4 +++ centerWindows +++ opaqueWindows diff --git a/modules/home/gui/desktop/hypr/land/config/xwayland.nix b/modules/home/gui/desktop/hypr/land/config/xwayland.nix new file mode 100755 index 0000000..0fa0944 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/config/xwayland.nix @@ -0,0 +1,3 @@ +{ + force_zero_scaling = true; +} diff --git a/modules/home/gui/desktop/hypr/land/default.nix b/modules/home/gui/desktop/hypr/land/default.nix new file mode 100755 index 0000000..5a82a37 --- /dev/null +++ b/modules/home/gui/desktop/hypr/land/default.nix @@ -0,0 +1,54 @@ +{ + flake, + config, + pkgs, + ... +}: +let + + inherit (flake.config.people) user0; + user = config.home.username; + + configPath = ./config; + configImports = { + animations = import (configPath + /animations.nix); + bindm = import (configPath + /bindm.nix); + binds = import (configPath + /binds.nix); + # bindl = import (configPath + /bindl.nix); + decoration = import (configPath + /decoration.nix); + dwindle = import (configPath + /dwindle.nix); + exec-once = import (configPath + /exec-once.nix) { inherit flake; }; + general = import (configPath + /general.nix) { inherit config flake; }; + input = import (configPath + /input.nix); + misc = import (configPath + /misc.nix); + windowrulev2 = import (configPath + /windowrulev2.nix); + xwayland = import (configPath + /xwayland.nix); + monitor = import (configPath + /monitor.nix); + bind = + let + bindConfig = + if user == user0 then + import (configPath + /bind-user0.nix) + else + import (configPath + /bind-user1.nix); + in + bindConfig; + }; +in +{ + wayland.windowManager.hyprland = { + enable = true; + package = null; + portalPackage = null; + xwayland.enable = true; + systemd = { + enable = true; + enableXdgAutostart = true; + extraCommands = [ + "systemctl --user stop hyprland-session.target" + "systemctl --user start hyprland-session.target" + ]; + }; + settings = configImports; + }; +} diff --git a/modules/home/gui/desktop/river/config/map.nix b/modules/home/gui/desktop/river/config/map.nix new file mode 100755 index 0000000..f3a6a8f --- /dev/null +++ b/modules/home/gui/desktop/river/config/map.nix @@ -0,0 +1,21 @@ +{ + "Super Space" = "rm -r /home/$USER/.cache/tofi* ; tofi-drun"; + "Super C" = "zed"; + "Super A" = "obsidian"; + "Super D" = "ghostty -e zellij a dotfiles"; + "Super E" = "ghostty -e nu -e y"; + "Super T" = "ghostty"; + "Super G" = "firefox https://cronometer.com/#diary"; + "Super B" = "firefox"; + "Super V" = "vesktop"; + "Super W" = "bitwarden"; + "Super H" = "feishin"; + "Super Y" = "scrcpy"; + "Super R" = "ghostty -e nu -e btm"; + "Super N" = "signal-desktop"; + "Super M" = "element-desktop"; + "Super Home" = "sudo protonvpn c --cc CA"; + "Super End" = "exit"; + "Super S" = "steam"; + "Super period" = "emote"; +} diff --git a/modules/home/gui/desktop/river/config/spawn.nix b/modules/home/gui/desktop/river/config/spawn.nix new file mode 100755 index 0000000..60d1e3d --- /dev/null +++ b/modules/home/gui/desktop/river/config/spawn.nix @@ -0,0 +1,28 @@ +{ flake, ... }: +let + inherit (flake.config.aesthetics.themes) + cursor + ; +in +[ + "swaylock" + "hypridle" + "wl-clipboard" + "wpaperd" + "gammastep" + "dunst" + "playerctrld" + "waybar" + "nm-applet" + "blueman-applet" + "easyeffects -r" + "emote" + "flameshot" + "pactl set-default-sink bluez_output.00_16_94_35_0D_5F.1" + "pactl set-default-source alsa_input.usb-Focusrite_Scarlett_2i2_USB_Y818KFJ0C671CE-00.HiFi__Mic1__source" + "bluetoothctl power on" + "gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'" + "gsettings set org.gnome.desktop.interface cursor-theme 'catppuccin-mocha-dark-cursors'" + "gsettings set org.gnome.desktop.interface cursor-size ${builtins.toString cursor.size}" + "nmcli connection delete pvpn-killswitch-ipv6" +] diff --git a/modules/home/gui/desktop/river/default.nix b/modules/home/gui/desktop/river/default.nix new file mode 100755 index 0000000..5746df6 --- /dev/null +++ b/modules/home/gui/desktop/river/default.nix @@ -0,0 +1,77 @@ +{ + flake, + config, + pkgs, + ... +}: +let + inherit (flake.config.aesthetics.themes) cursor; + configPath = ./config; + settingsPath = { + spawn = import (configPath + /spawn.nix) { inherit config flake; }; + map = import (configPath + /map.nix); + }; +in +{ + home.packages = builtins.attrValues { + inherit (pkgs) + rivercarro + ; + }; + + services.kanshi = { + enable = true; + systemdTarget = "river-session.target"; + }; + + wayland.windowManager.river = { + enable = true; + xwayland.enable = true; + settings = { + border-width = 4; + declare-mode = [ + "locked" + "normal" + "passthrough" + ]; + input = { + pointer-foo-bar = { + accel-profile = "flat"; + events = true; + pointer-accel = -0.3; + tap = false; + }; + }; + rule-add = { + "-app-id" = { + "'bar'" = "csd"; + "'float*'" = { + "-title" = { + "'foo'" = "float"; + }; + }; + }; + }; + set-cursor-warp = "on-output-change"; + set-repeat = "50 300"; + map-pointer = { + normal = { + "Alt BTN_LEFT" = "move-view"; + "Super BTN_LEFT" = "resize-view"; + "Super F" = "toggle-float"; + }; + }; + default-layout = "rivercarro"; + attach-mode = "bottom"; + map.normal = settingsPath.map; + spawn = settingsPath.spawn; + }; + systemd = { + enable = true; + extraCommands = [ + "systemctl --user stop river-session.target" + "systemctl --user start river-session.target" + ]; + }; + }; +} diff --git a/modules/home/gui/desktop/theming/default.nix b/modules/home/gui/desktop/theming/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/desktop/theming/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/desktop/theming/gtk/default.nix b/modules/home/gui/desktop/theming/gtk/default.nix new file mode 100755 index 0000000..498427a --- /dev/null +++ b/modules/home/gui/desktop/theming/gtk/default.nix @@ -0,0 +1,43 @@ +{ pkgs, flake, ... }: +let + inherit (flake.config.aesthetics.themes) cursor; +in +{ + gtk = { + enable = true; + gtk3 = { + extraConfig = { + gtk-application-prefer-dark-theme = true; + }; + }; + cursorTheme = { + name = "catppuccin-macchiato-dark-cursors"; + package = pkgs.catppuccin-cursors.macchiatoDark; + size = cursor.size; + }; + iconTheme = { + package = pkgs.catppuccin-papirus-folders.override { + flavor = "macchiato"; + accent = "mauve"; + }; + name = "Papirus-Dark"; + }; + theme = { + package = pkgs.catppuccin-gtk.override { + size = "compact"; + variant = "macchiato"; + accents = [ + "mauve" + ]; + }; + name = "catppuccin-macchiato-mauve-compact"; + }; + }; + home.pointerCursor = { + gtk.enable = true; + x11.enable = true; + name = "catppuccin-mocha-dark-cursors"; + package = pkgs.catppuccin-cursors.macchiatoDark; + size = cursor.size; + }; +} diff --git a/modules/home/gui/desktop/theming/qt/default.nix b/modules/home/gui/desktop/theming/qt/default.nix new file mode 100755 index 0000000..aecc6a2 --- /dev/null +++ b/modules/home/gui/desktop/theming/qt/default.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + qt = { + enable = true; + style = { + package = pkgs.catppuccin-qt5ct; + }; + }; +} diff --git a/modules/home/gui/desktop/wayland/default.nix b/modules/home/gui/desktop/wayland/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/home/gui/desktop/wayland/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/home/gui/desktop/wayland/dunst/config/settings.nix b/modules/home/gui/desktop/wayland/dunst/config/settings.nix new file mode 100755 index 0000000..bed0f5e --- /dev/null +++ b/modules/home/gui/desktop/wayland/dunst/config/settings.nix @@ -0,0 +1,59 @@ +{ + flake, + config, + ... +}: +let + + inherit (flake.config.aesthetics.themes) + currentTheme + palettes + fonts + ; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; + + makeColor = c: "#" + c; +in +{ + global = { + font = "${fonts.names.name0} ${builtins.toString fonts.sizes.popups.size0}"; + background = makeColor el.base01; + frame_color = makeColor el.base0E; + foreground = makeColor el.base05; + corner_radius = 10; + fade_in_duration = 1000; + frame = 10000; + frame_width = 1; + icon_corner_radius = 10; + monitor = 1; + offset = "20x20"; + origin = "bottom-right"; + progress_bar_corner_radius = 4; + timeout = 10; + transparecncy = true; + }; + + urgency_critical = { + frame_color = makeColor el.base09; + timeout = 0; + }; + skip-rule = { + appname = "flameshot"; + skip_display = true; + }; +} diff --git a/modules/home/gui/desktop/wayland/dunst/default.nix b/modules/home/gui/desktop/wayland/dunst/default.nix new file mode 100755 index 0000000..286dda9 --- /dev/null +++ b/modules/home/gui/desktop/wayland/dunst/default.nix @@ -0,0 +1,15 @@ +{ + config, + flake, + ... +}: +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { inherit config flake; }; +in +{ + services.dunst = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/gui/desktop/wayland/easyEffects/default.nix b/modules/home/gui/desktop/wayland/easyEffects/default.nix new file mode 100755 index 0000000..6a94385 --- /dev/null +++ b/modules/home/gui/desktop/wayland/easyEffects/default.nix @@ -0,0 +1,3 @@ +{ + services.easyeffects.enable = true; +} diff --git a/modules/home/gui/desktop/wayland/gammastep/default.nix b/modules/home/gui/desktop/wayland/gammastep/default.nix new file mode 100755 index 0000000..5dd5ecf --- /dev/null +++ b/modules/home/gui/desktop/wayland/gammastep/default.nix @@ -0,0 +1,13 @@ +{ + services.gammastep = { + enable = true; + tray = true; + provider = "geoclue2"; + temperature = { + day = 6500; + night = 3500; + }; + dawnTime = "8:00-8:30"; + duskTime = "20:30-21:00"; + }; +} diff --git a/modules/home/gui/desktop/wayland/network/default.nix b/modules/home/gui/desktop/wayland/network/default.nix new file mode 100755 index 0000000..3adda0e --- /dev/null +++ b/modules/home/gui/desktop/wayland/network/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + ... +}: +{ + services.network-manager-applet.enable = true; + home.packages = builtins.attrValues { + inherit (pkgs) + networkmanagerapplet + ; + }; +} diff --git a/modules/home/gui/desktop/wayland/nwgLook/default.nix b/modules/home/gui/desktop/wayland/nwgLook/default.nix new file mode 100755 index 0000000..fdc0a10 --- /dev/null +++ b/modules/home/gui/desktop/wayland/nwgLook/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + nwg-look + ; + }; +} diff --git a/modules/home/gui/desktop/wayland/plasmaNm/default.nix b/modules/home/gui/desktop/wayland/plasmaNm/default.nix new file mode 100755 index 0000000..c8553b4 --- /dev/null +++ b/modules/home/gui/desktop/wayland/plasmaNm/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + plasma-nm + ; + }; +} diff --git a/modules/home/gui/desktop/wayland/swaylock/config/settings.nix b/modules/home/gui/desktop/wayland/swaylock/config/settings.nix new file mode 100755 index 0000000..639a8c0 --- /dev/null +++ b/modules/home/gui/desktop/wayland/swaylock/config/settings.nix @@ -0,0 +1,69 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) + currentTheme + palettes + fonts + ; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + font = fonts.names.name0; + font-size = fonts.sizes.desktop.size0; + indicator-idle-visible = true; + indicator-radius = 100; + indicator-thickness = 20; + show-failed-attempts = true; + + bs-hl-color = el.base08; + color = el.base01; + key-hl-color = el.base0E; + + caps-lock-bs-hl-color = el.base08; + caps-lock-key-hl-color = el.base0E; + + inside-color = el.base01; + inside-clear-color = el.base01; + inside-caps-lock-color = el.base01; + inside-ver-color = el.base01; + inside-wrong-color = el.base01; + + line-color = el.base01; + line-clear-color = el.base01; + line-caps-lock-color = el.base01; + line-ver-color = el.base01; + line-wrong-color = el.base01; + + ring-color = el.base00; + ring-clear-color = el.base00; + ring-caps-lock-color = el.base00; + ring-ver-color = el.base00; + ring-wrong-color = el.base00; + + separator-color = "00000000"; + + text-color = el.base05; + text-clear-color = el.base05; + text-caps-lock-color = el.base05; + text-ver-color = el.base05; + text-wrong-color = el.base05; +} diff --git a/modules/home/gui/desktop/wayland/swaylock/default.nix b/modules/home/gui/desktop/wayland/swaylock/default.nix new file mode 100755 index 0000000..c6586c9 --- /dev/null +++ b/modules/home/gui/desktop/wayland/swaylock/default.nix @@ -0,0 +1,15 @@ +{ + config, + flake, + ... +}: +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { inherit config flake; }; +in +{ + programs.swaylock = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/gui/desktop/wayland/tofi/config/settings.nix b/modules/home/gui/desktop/wayland/tofi/config/settings.nix new file mode 100755 index 0000000..457e5ff --- /dev/null +++ b/modules/home/gui/desktop/wayland/tofi/config/settings.nix @@ -0,0 +1,50 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) currentTheme palettes fonts; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; +in +{ + font-size = fonts.sizes.desktop.size0; + hint-font = true; + background-color = "#${el.base02}"; + outline-color = "#${el.base0E}"; + prompt-color = "#${el.base0D}"; + input-color = "#${el.base07}"; + default-result-color = "#${el.base05}"; + selection-color = "#${el.base0E}"; + prompt-text = "Summon: "; + + width = 400; + height = 400; + + outline-width = 1; + border-width = 0; + + padding-top = 10; + padding-bottom = 10; + padding-left = 10; + padding-right = 10; + + corner-radius = 10; + + drun-launch = true; +} diff --git a/modules/home/gui/desktop/wayland/tofi/default.nix b/modules/home/gui/desktop/wayland/tofi/default.nix new file mode 100755 index 0000000..19d9285 --- /dev/null +++ b/modules/home/gui/desktop/wayland/tofi/default.nix @@ -0,0 +1,16 @@ +{ + config, + flake, + ... +}: +let + configPath = ./config; + + settingsPath = import (configPath + /settings.nix) { inherit config flake; }; +in +{ + programs.tofi = { + enable = true; + settings = settingsPath; + }; +} diff --git a/modules/home/gui/desktop/wayland/udiskie/default.nix b/modules/home/gui/desktop/wayland/udiskie/default.nix new file mode 100755 index 0000000..25a1535 --- /dev/null +++ b/modules/home/gui/desktop/wayland/udiskie/default.nix @@ -0,0 +1,7 @@ +{ + services.udiskie = { + enable = true; + automount = true; + tray = "always"; + }; +} diff --git a/modules/home/gui/desktop/wayland/wallet/default.nix b/modules/home/gui/desktop/wayland/wallet/default.nix new file mode 100755 index 0000000..14c62f0 --- /dev/null +++ b/modules/home/gui/desktop/wayland/wallet/default.nix @@ -0,0 +1,18 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs.kdePackages) + kwallet-pam + # kwalletmanager + ; + }; + programs.gpg = { + enable = true; + }; +} + +# use this to make annoying shit go away: +# gpg --pinentry-mode loopback --full-generate-key diff --git a/modules/home/gui/desktop/wayland/waybar/config/settings.nix b/modules/home/gui/desktop/wayland/waybar/config/settings.nix new file mode 100755 index 0000000..b94427d --- /dev/null +++ b/modules/home/gui/desktop/wayland/waybar/config/settings.nix @@ -0,0 +1,180 @@ +{ config, ... }: +let + user = config.home.username; +in +{ + mainBar = { + position = "bottom"; + layer = "top"; + height = 5; + margin-top = 0; + margin-bottom = 5; + margin-left = 5; + margin-right = 5; + modules-left = [ + "custom/launcher" + "hyprland/workspaces" + ]; + + modules-center = [ + "custom/weather" + ]; + + modules-right = [ + "tray" + "privacy" + "cpu" + "memory" + "disk" + "pulseaudio" + # "network" + "battery" + "clock" + ]; + + clock = { + calendar = { + format = { + today = "{}"; + }; + }; + format = " {:%H:%M}"; + tooltip = true; + tooltip-format = "{:%Y %B}\n{calendar}"; + format-alt = " {:%d/%m}"; + }; + + "hyprland/workspaces" = { + active-only = false; + disable-scroll = true; + format = "{icon}"; + on-click = "activate"; + format-icons = { + "1" = "◉"; + "2" = "◉"; + "3" = "◉"; + "4" = "◉"; + "5" = "◉"; + urgent = ""; + default = "◉"; + sort-by-number = true; + }; + persistent-workspaces = { + "1" = [ ]; + "2" = [ ]; + "3" = [ ]; + "4" = [ ]; + "5" = [ ]; + }; + }; + + memory = { + format = "󰟜 {}%"; + format-alt = "󰟜 {used} GiB"; #  + interval = 2; + }; + + cpu = { + format = " {usage}%"; + format-alt = " {avg_frequency} GHz"; + interval = 2; + }; + + disk = { + # path = "/"; + format = "󰋊 {percentage_used}%"; + interval = 60; + }; + + network = { + format-wifi = " {signalStrength}%"; + format-ethernet = "󰀂 "; + tooltip-format = "Connected to {essid} {ifname} via {gwaddr}"; + format-linked = "{ifname} (No IP)"; + format-disconnected = "󰖪 "; + }; + + tray = { + icon-size = 12; + spacing = 8; + }; + + pulseaudio = { + format = "{icon} {volume}%"; + tooltip = false; + format-muted = " Muted"; + on-click = "easyeffects"; + on-scroll-up = "pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i2_USB_Y818KFJ0C671CE-00.HiFi__Line1__sink +5% ; pactl set-sink-volume @DEFAULT_SINK@ 5%"; + on-scroll-down = "pactl set-sink-volume alsa_output.usb-Focusrite_Scarlett_2i2_USB_Y818KFJ0C671CE-00.HiFi__Line1__sink -5% ; pactl set-sink-volume @DEFAULT_SINK@ -5%"; + scroll-step = 5; + format-icons = { + headphone = ""; + hands-free = ""; + headset = ""; + phone = ""; + portable = ""; + car = ""; + default = [ + "" + "" + "" + ]; + }; + }; + "custom/launcher" = { + format = ""; + on-click = "rm -r /home/$USER/.cache/tofi* ; tofi-drun"; + # on-click-right = "pkill tofi || wallpaper-picker"; + tooltip = false; + }; + + privacy = { + icon-spacing = 8; + icon-size = 12; + transition-duration = 250; + modules = { + screenshare = { + type = "screenshare"; + tooltip = true; + tooltip-icon-size = 12; + }; + audio-out = { + type = "audio-out"; + tooltip = true; + tooltip-icon-size = 12; + }; + audio-in = { + type = "audio-in"; + tooltip = true; + tooltip-icon-size = 12; + }; + }; + }; + + "custom/weather" = { + exec = "/home/${user}/.config/scripts/get_weather.sh Winnipeg"; + return-type = "json"; + format = "{}"; + tooltip = true; + interval = 3600; + }; + battery = { + format = "{icon} {capacity}%"; + format-alt = "{icon} {time}"; + format-charging = " {capacity}%"; + format-icons = [ + "" + "" + "" + "" + "" + ]; + format-plugged = " {capacity}%"; + states = { + critical = 15; + warning = 30; + }; + }; + }; +} +# https://unicodes.jessetane.com/ diff --git a/modules/home/gui/desktop/wayland/waybar/config/style.nix b/modules/home/gui/desktop/wayland/waybar/config/style.nix new file mode 100755 index 0000000..5ce2783 --- /dev/null +++ b/modules/home/gui/desktop/wayland/waybar/config/style.nix @@ -0,0 +1,121 @@ +{ + config, + flake, + ... +}: +let + + inherit (flake.config.aesthetics.themes) currentTheme palettes fonts; + + inherit (flake.config.people) user0 user1 user2; + + user = config.home.username; + + themeLogic = + if user == user0 then + currentTheme.theme0 + else if user == user1 then + currentTheme.theme1 + else if user == user2 then + currentTheme.theme2 + else + currentTheme.theme0; + + el = palettes.${themeLogic}.colours; + + custom = { + font = fonts.names.name0; + font_size = "${builtins.toString fonts.sizes.desktop.size0}px"; + font_weight = "bold"; + opacityBg = "0.90"; + opacityBt = "1"; + text_color = el.base0E; + secondary_accent = el.base07; + tertiary_accent = el.base15; + button_color = el.base04; + background_1 = el.base01; + background_2 = el.base00; + background_3 = el.base04; + }; +in +'' + + * { + min-height: 0px; + font-family: ${custom.font}; + font-weight: ${custom.font_weight}; + } + + window#waybar { + background: #${custom.background_2}; + color: #${custom.background_3}; + border: 2px solid; + border-radius: 30px; + border-color: #${custom.text_color}; + min-height: 100px; + opacity: ${custom.opacityBg}; + } + + #workspaces { + font-size: 18px; + padding-left: 15px; + margin-bottom: 2px; + } + #workspaces button { + color: #${custom.button_color}; + padding: 5px; + opacity: ${custom.opacityBt}; + } + #workspaces button.empty { + color: #${custom.background_3}; + } + #workspaces button.active { + color: #${custom.text_color}; + } + + #tray, #pulseaudio, #privacy, #cpu, #memory, #disk, #clock { + font-size: ${custom.font_size}; + color: #${custom.text_color}; + padding-right: 10px; + } + + #privacy { + } + + #cpu { + } + + #memory { + } + + #disk { + } + + #tray { + } + + #pulseaudio { + } + + #clock { + } + + #battery { + font-size: ${custom.font_size}; + color: #${custom.text_color}; + padding-right: 10px; + } + + #custom-launcher { + font-size: 20px; + color: #${custom.text_color}; + font-weight: ${custom.font_weight}; + padding-left: 10px; + } + + #custom-weather { + font-size: 14px; + color: #${custom.text_color}; + font-weight: ${custom.font_weight}; + } +'' diff --git a/modules/home/gui/desktop/wayland/waybar/default.nix b/modules/home/gui/desktop/wayland/waybar/default.nix new file mode 100755 index 0000000..4ecf198 --- /dev/null +++ b/modules/home/gui/desktop/wayland/waybar/default.nix @@ -0,0 +1,19 @@ +{ + config, + flake, + pkgs, + ... +}: +let + configPath = ./config; + settingsPath = import (configPath + /settings.nix) { inherit config; }; + stylePath = import (configPath + /style.nix) { inherit config flake; }; +in +{ + programs.waybar = { + enable = true; + # package = flake.inputs.waybar.packages.${pkgs.system}.default; + settings = settingsPath; + style = stylePath; + }; +} diff --git a/modules/home/gui/desktop/wayland/wlClipboard/default.nix b/modules/home/gui/desktop/wayland/wlClipboard/default.nix new file mode 100755 index 0000000..744847b --- /dev/null +++ b/modules/home/gui/desktop/wayland/wlClipboard/default.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: +{ + home.packages = builtins.attrValues { + inherit (pkgs) + wl-clipboard + ; + }; +} diff --git a/modules/home/gui/desktop/wayland/wpaperd/default.nix b/modules/home/gui/desktop/wayland/wpaperd/default.nix new file mode 100755 index 0000000..2968e9b --- /dev/null +++ b/modules/home/gui/desktop/wayland/wpaperd/default.nix @@ -0,0 +1,13 @@ +{ + services.wpaperd = { + enable = true; + settings = { + "default" = { + path = "~/.config/wallpaper"; + apply-shadow = true; + duration = "1m"; + sorting = "random"; + }; + }; + }; +} diff --git a/modules/nixos/core/accounts/default.nix b/modules/nixos/core/accounts/default.nix new file mode 100755 index 0000000..289b946 --- /dev/null +++ b/modules/nixos/core/accounts/default.nix @@ -0,0 +1,3 @@ +{ + services.accounts-daemon.enable = true; +} diff --git a/modules/nixos/core/default.nix b/modules/nixos/core/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/core/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/core/doas/default.nix b/modules/nixos/core/doas/default.nix new file mode 100755 index 0000000..bcfb6aa --- /dev/null +++ b/modules/nixos/core/doas/default.nix @@ -0,0 +1,57 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) + user0 + user1 + user2 + user3 + ; + inherit (flake.config.machines) + devices + ; + hostname = config.networking.hostName; + mars = devices.mars.name; + ceres = devices.ceres.name; + venus = devices.venus.name; + charon = devices.charon.name; + deimos = devices.deimos.name; + + userLogic = + if + builtins.elem hostname [ + mars + deimos + ceres + ] + then + [ + user0 + user1 + user3 + ] + else if hostname == charon then + [ user1 ] + else if hostname == venus then + [ user2 ] + else + [ ]; +in +{ + security = { + doas = { + enable = true; + extraRules = [ + { + keepEnv = true; + noPass = true; + users = userLogic; + } + ]; + }; + # sudo.enable = false; + }; +} diff --git a/modules/nixos/core/environment/default.nix b/modules/nixos/core/environment/default.nix new file mode 100755 index 0000000..40ec512 --- /dev/null +++ b/modules/nixos/core/environment/default.nix @@ -0,0 +1,30 @@ +{ + pkgs, + config, + ... +}: +{ + environment = { + enableAllTerminfo = true; + systemPackages = builtins.attrValues { + inherit (pkgs) + git + grim + pijul + sshfs + tomb + just + virt-manager + ; + }; + variables = { + VIDEO_PLAYER = "mpv"; + EDITOR = "hx"; + TERM = "ghostty"; + NIXPKGS_ALLOW_INSECURE = "1"; + NIXPKGS_ALLOW_UNFREE = "1"; + GTK_THEME = "catppuccin-macchiato-mauve-compact"; + # ANTHROPIC_API_KEY = config.sops.secrets.claude-api-key.path; + }; + }; +} diff --git a/modules/nixos/core/fonts/default.nix b/modules/nixos/core/fonts/default.nix new file mode 100755 index 0000000..d5bdc03 --- /dev/null +++ b/modules/nixos/core/fonts/default.nix @@ -0,0 +1,107 @@ +{ + pkgs, + flake, + ... +}: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + fonts = { + fontconfig = { + enable = true; + defaultFonts = { + serif = [ + fonts.names.name0 + ]; + monospace = [ + fonts.names.name0 + ]; + sansSerif = [ + fonts.names.name0 + ]; + emoji = [ + "Noto Fonts Color Emoji" + ]; + }; + antialias = true; + }; + packages = builtins.attrValues { + inherit (pkgs) + noto-fonts-color-emoji + dosis + iosevka + ; + inherit (pkgs.nerd-fonts) + _0xproto + _3270 + agave + anonymice + arimo + aurulent-sans-mono + bigblue-terminal + bitstream-vera-sans-mono + blex-mono + caskaydia-cove + caskaydia-mono + code-new-roman + comic-shanns-mono + commit-mono + cousine + d2coding + daddy-time-mono + dejavu-sans-mono + departure-mono + droid-sans-mono + envy-code-r + fantasque-sans-mono + fira-code + fira-mono + geist-mono + go-mono + gohufont + hack + hasklug + heavy-data + hurmit + im-writing + inconsolata + inconsolata-go + inconsolata-lgc + intone-mono + iosevka-term + iosevka-term-slab + jetbrains-mono + lekton + liberation + lilex + martian-mono + monaspace + monofur + monoid + mononoki + mplus + noto + open-dyslexic + overpass + profont + proggy-clean-tt + recursive-mono + roboto-mono + sauce-code-pro + shure-tech-mono + space-mono + symbols-only + terminess-ttf + tinos + ubuntu + ubuntu-mono + ubuntu-sans + victor-mono + zed-mono + ; + }; + }; +} diff --git a/modules/nixos/core/homeManager/default.nix b/modules/nixos/core/homeManager/default.nix new file mode 100755 index 0000000..4c05c86 --- /dev/null +++ b/modules/nixos/core/homeManager/default.nix @@ -0,0 +1,13 @@ +{ flake, ... }: +{ + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup5"; + extraSpecialArgs = { + inherit + flake + ; + }; + }; +} diff --git a/modules/nixos/core/locale/default.nix b/modules/nixos/core/locale/default.nix new file mode 100755 index 0000000..2fcad5c --- /dev/null +++ b/modules/nixos/core/locale/default.nix @@ -0,0 +1,30 @@ +{ + time.timeZone = "America/Winnipeg"; + + i18n = + let + locale = "en_CA.UTF-8"; + in + { + defaultLocale = locale; + + extraLocaleSettings = builtins.listToAttrs ( + map + (option: { + name = option; + value = locale; + }) + [ + "LC_ADDRESS" + "LC_IDENTIFICATION" + "LC_MEASUREMENT" + "LC_MONETARY" + "LC_NAME" + "LC_NUMERIC" + "LC_PAPER" + "LC_TELEPHONE" + "LC_TIME" + ] + ); + }; +} diff --git a/modules/nixos/core/nh/default.nix b/modules/nixos/core/nh/default.nix new file mode 100755 index 0000000..bc6f8ac --- /dev/null +++ b/modules/nixos/core/nh/default.nix @@ -0,0 +1,5 @@ +{ + programs.nh = { + enable = true; + }; +} diff --git a/modules/nixos/core/nix/default.nix b/modules/nixos/core/nix/default.nix new file mode 100755 index 0000000..f3879e9 --- /dev/null +++ b/modules/nixos/core/nix/default.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + ... +}: +{ + nixpkgs = { + config = { + allowUnfree = true; + permittedInsecurePackages = [ + "electron-unwrapped-33.0.2" + "electron-31.7.7" + "electron-27.3.11" + "olm-3.2.16" + ]; + }; + }; + + nix = { + extraOptions = '' + experimental-features = nix-command flakes + keep-outputs = true + keep-derivations = true + ''; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 10d"; + }; + settings = { + substituters = [ + ]; + trusted-public-keys = [ + ]; + }; + }; + # Print package list + environment.etc."current-system-packages".text = + let + packages = builtins.map (p: "${p.name}") config.environment.systemPackages; + + sortedUnique = builtins.sort builtins.lessThan (lib.unique packages); + + formatted = builtins.concatStringsSep "\n" sortedUnique; + in + formatted; +} diff --git a/modules/nixos/core/rsync/default.nix b/modules/nixos/core/rsync/default.nix new file mode 100755 index 0000000..0646723 --- /dev/null +++ b/modules/nixos/core/rsync/default.nix @@ -0,0 +1,3 @@ +{ + services.rsyncd.enable = true; +} diff --git a/modules/nixos/core/ssh/default.nix b/modules/nixos/core/ssh/default.nix new file mode 100755 index 0000000..4544958 --- /dev/null +++ b/modules/nixos/core/ssh/default.nix @@ -0,0 +1,58 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) + user0 + user1 + user2 + user3 + ; + inherit (flake.config.machines) + devices + ; + hostname = config.networking.hostName; + mars = devices.mars.name; + deimos = devices.deimos.name; + ceres = devices.ceres.name; + venus = devices.venus.name; + charon = devices.charon.name; + + # Helper function to get SSH keys for a specific user + getUserKeys = user: flake.config.people.users.${user}.sshKeys; +in +{ + users.users = + if hostname == charon then + { } + else if hostname == mars then + { + ${user0} = { + openssh.authorizedKeys.keys = getUserKeys user0; + }; + ${user3} = { + openssh.authorizedKeys.keys = getUserKeys user3; + }; + } + else if + builtins.elem hostname [ + deimos + ceres + ] + then + { + ${user0} = { + openssh.authorizedKeys.keys = getUserKeys user0; + }; + } + else if hostname == venus then + { + ${user2} = { + openssh.authorizedKeys.keys = getUserKeys user2; + }; + } + else + { }; +} diff --git a/modules/nixos/core/sysStat/default.nix b/modules/nixos/core/sysStat/default.nix new file mode 100755 index 0000000..b67756e --- /dev/null +++ b/modules/nixos/core/sysStat/default.nix @@ -0,0 +1,5 @@ +{ + services.sysstat = { + enable = true; + }; +} diff --git a/modules/nixos/core/system/default.nix b/modules/nixos/core/system/default.nix new file mode 100755 index 0000000..958608a --- /dev/null +++ b/modules/nixos/core/system/default.nix @@ -0,0 +1 @@ +_: { } diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix new file mode 100755 index 0000000..3d0b078 --- /dev/null +++ b/modules/nixos/default.nix @@ -0,0 +1,104 @@ +let + inherit (import ../helpers.nix) directoryImport; + modules = directoryImport ./.; +in +{ + flake.nixosModules = { + mars = { + imports = builtins.attrValues { + inherit (modules) + mullvad + syncthing + ollama + # hypr + searx + portals + xserver + flatpak + plasma + sddm + ; + }; + }; + + venus = { + imports = builtins.attrValues { + inherit (modules) + plasma + sddm + tablet + ; + }; + }; + + deimos = { + imports = builtins.attrValues { + inherit (modules) + # hypr + # wayland + plasma + sddm + flatpak + xserver + ; + }; + }; + + charon = { + imports = builtins.attrValues { + inherit (modules) + gnome + flatpak + xserver + ; + }; + }; + + ceres = { + imports = builtins.attrValues { + inherit (modules) + acme + audiobookshelf + caddy + jellyfin + logrotate + mastodon + minecraft + ollama + website + postgresql + samba + searx + vaultwarden + forgejo + xserver + ; + }; + }; + + mantle = { + imports = builtins.attrValues { + inherit (modules) + sops + ; + }; + }; + + crust = { + imports = builtins.attrValues { + inherit (modules) + hardware + programs + ; + }; + }; + + core = { + imports = builtins.attrValues { + inherit (modules) + core + ; + }; + }; + }; +} diff --git a/modules/nixos/desktop/cosmic/default.nix b/modules/nixos/desktop/cosmic/default.nix new file mode 100755 index 0000000..2c4be49 --- /dev/null +++ b/modules/nixos/desktop/cosmic/default.nix @@ -0,0 +1,16 @@ +{ + nix.settings = { + substituters = [ + "https://cosmic.cachix.org/" + ]; + trusted-public-keys = [ + "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" + ]; + }; + + environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1; + services = { + desktopManager.cosmic.enable = true; + displayManager.cosmic-greeter.enable = true; + }; +} diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/desktop/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/desktop/gnome/default.nix b/modules/nixos/desktop/gnome/default.nix new file mode 100755 index 0000000..a91c293 --- /dev/null +++ b/modules/nixos/desktop/gnome/default.nix @@ -0,0 +1,55 @@ +{ pkgs, ... }: +{ + services = { + xserver = { + enable = true; + displayManager = { + gdm.enable = true; + gdm.wayland = true; + }; + desktopManager.gnome = { + enable = true; + }; + }; + gnome = { + games.enable = false; + gnome-online-accounts.enable = true; + }; + udev.packages = builtins.attrValues { + inherit (pkgs) + gnome-settings-daemon + ; + }; + gvfs.enable = true; + }; + environment = { + variables = { + # WEBKIT_FORCE_SANDBOX = "0"; + # WEBKIT_DISABLE_COMPOSITING_MODE = "1"; + }; + gnome.excludePackages = builtins.attrValues { + inherit (pkgs) + gnome-photos + gnome-tour + epiphany # web browser + cheese # webcam tool + geary # email reader + evince # document viewer + totem # video player + yelp # help viewer + gnome-calendar + atomix # puzzle game + gnome-clocks + gnome-weather + gnome-maps + gnome-contacts + gnome-characters + gnome-music + tali # poker game + iagno # go game + hitori # sudoku game + ; + }; + }; + programs.dconf.enable = true; +} diff --git a/modules/nixos/desktop/hypr/default.nix b/modules/nixos/desktop/hypr/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/desktop/hypr/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/desktop/hypr/idle/default.nix b/modules/nixos/desktop/hypr/idle/default.nix new file mode 100755 index 0000000..12c71f9 --- /dev/null +++ b/modules/nixos/desktop/hypr/idle/default.nix @@ -0,0 +1,10 @@ +{ + flake, + pkgs, + ... +}: +{ + services.hypridle = { + enable = true; + }; +} diff --git a/modules/nixos/desktop/hypr/land/default.nix b/modules/nixos/desktop/hypr/land/default.nix new file mode 100755 index 0000000..4038bdd --- /dev/null +++ b/modules/nixos/desktop/hypr/land/default.nix @@ -0,0 +1,32 @@ +{ + pkgs, + flake, + ... +}: +{ + programs.hyprland = { + enable = true; + xwayland.enable = true; + # package = flake.inputs.hyprland.packages.${pkgs.system}.hyprland; + # portalPackage = flake.inputs.hyprland-portal.packages.${pkgs.system}.xdg-desktop-portal-hyprland; + }; + nix = { + settings = { + substituters = [ + "https://hyprland.cachix.org" + ]; + trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; + }; + }; + environment = { + variables = { + WLR_NO_HARDWARE_CURSORS = "1"; + WLR_DRM_NO_ATOMIC = "1"; + FLAMESHOT_ENABLE_WAYLAND = "1"; + USE_WAYLAND_GRIM = "1"; + USE_WAYLAND_CLIPBOARD = "1"; + }; + }; +} diff --git a/modules/nixos/desktop/plasma/default.nix b/modules/nixos/desktop/plasma/default.nix new file mode 100755 index 0000000..fddd69a --- /dev/null +++ b/modules/nixos/desktop/plasma/default.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +{ + services = { + desktopManager.plasma6.enable = true; + }; + environment.plasma6.excludePackages = builtins.attrValues { + inherit (pkgs.kdePackages) + plasma-browser-integration + konsole + kate + spectacle + kdeconnect-kde + khelpcenter + ; + }; +} diff --git a/modules/nixos/desktop/river/default.nix b/modules/nixos/desktop/river/default.nix new file mode 100755 index 0000000..0ec2fcc --- /dev/null +++ b/modules/nixos/desktop/river/default.nix @@ -0,0 +1,26 @@ +{ + programs.river = { + enable = true; + xwayland.enable = true; + }; + environment = { + loginShellInit = '' + if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then + exec river + fi + ''; + sessionVariables = { + XDG_CURRENT_DESKTOP = "river"; + XDG_SESSION_TYPE = "wayland"; + XDG_SESSION_DESKTOP = "river"; + QT_AUTO_SCREEN_SCALE_FACTOR = "1"; + QT_QPA_PLATFORM = "wayland;xcb"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + QT_QPA_PLATFORMTHEME = "qt5ct"; + _JAVA_AWT_WM_NONEREPARENTING = "1"; + WLR_DRM_NO_ATOMIC = "1"; + WLR_NO_HARDWARE_CURSORS = "1"; + }; + }; + +} diff --git a/modules/nixos/desktop/sddm/default.nix b/modules/nixos/desktop/sddm/default.nix new file mode 100755 index 0000000..31fd7d8 --- /dev/null +++ b/modules/nixos/desktop/sddm/default.nix @@ -0,0 +1,10 @@ +{ + services = { + displayManager = { + sddm = { + enable = true; + wayland.enable = true; + }; + }; + }; +} diff --git a/modules/nixos/desktop/wayland/default.nix b/modules/nixos/desktop/wayland/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/desktop/wayland/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/desktop/wayland/geoclue2/default.nix b/modules/nixos/desktop/wayland/geoclue2/default.nix new file mode 100755 index 0000000..ce62f46 --- /dev/null +++ b/modules/nixos/desktop/wayland/geoclue2/default.nix @@ -0,0 +1,3 @@ +{ + services.geoclue2.enable = true; +} diff --git a/modules/nixos/desktop/wayland/greetd/default.nix b/modules/nixos/desktop/wayland/greetd/default.nix new file mode 100755 index 0000000..eea5335 --- /dev/null +++ b/modules/nixos/desktop/wayland/greetd/default.nix @@ -0,0 +1,45 @@ +{ + config, + flake, + lib, + ... +}: +let + inherit (flake.config.people) + user0 + user1 + user2 + ; + inherit (flake.config.machines) devices; + venus = devices.venus.name; + charon = devices.charon.name; + + host = config.networking.hostName; +in +{ + services = { + greetd = { + enable = true; + vt = 7; + settings = + let + default_session = { + command = "${lib.meta.getExe config.programs.hyprland.package}"; + user = + if host == charon then + user1 + else if host == venus then + user2 + else + user0; + }; + in + { + inherit + default_session + ; + initial_session = default_session; + }; + }; + }; +} diff --git a/modules/nixos/desktop/wayland/network/default.nix b/modules/nixos/desktop/wayland/network/default.nix new file mode 100755 index 0000000..e3960dd --- /dev/null +++ b/modules/nixos/desktop/wayland/network/default.nix @@ -0,0 +1,3 @@ +{ + programs.nm-applet.enable = true; +} diff --git a/modules/nixos/desktop/wayland/portals/default.nix b/modules/nixos/desktop/wayland/portals/default.nix new file mode 100755 index 0000000..658ef52 --- /dev/null +++ b/modules/nixos/desktop/wayland/portals/default.nix @@ -0,0 +1,21 @@ +{ pkgs, flake, ... }: +{ + environment.sessionVariables.NIXOS_OZONE_WL = "1"; + + xdg = { + portal = { + enable = true; + wlr.enable = true; + config.common.default = "*"; + xdgOpenUsePortal = true; + extraPortals = builtins.attrValues { + inherit (pkgs) + xdg-desktop-portal-gtk + # xdg-desktop-portal-hyprland + xdg-desktop-portal-wlr + ; + }; + }; + }; + +} diff --git a/modules/nixos/desktop/wayland/regreet/default.nix b/modules/nixos/desktop/wayland/regreet/default.nix new file mode 100755 index 0000000..7edcce6 --- /dev/null +++ b/modules/nixos/desktop/wayland/regreet/default.nix @@ -0,0 +1,50 @@ +{ + pkgs, + flake, + lib, + ... +}: +let + inherit (flake.config.aesthetics.themes) + fonts + ; +in +{ + programs.regreet = { + enable = false; + package = pkgs.greetd.regreet; + # settings = { + # appearance = { + # greeting_msg = "Back for more, I see."; + # }; + # GTK = { + # application_prefer_dark_theme = true; + # cursor_theme_name = lib.mkForce "catppuccin-macchiato-dark-cursors"; + # font_name = lib.mkForce "${fonts.names.name0} ${font.size.desktop}"; + # icon_theme_name = lib.mkForce "Papirus-Dark"; + # theme_name = lib.mkForce "catppuccin-macchiato-mauve-compact"; + # }; + # }; + # theme = { + # name = "catppuccin-macchiato-mauve-compact"; + # package = pkgs.catppuccin-gtk.override { + # size = "compact"; + # variant = "macchiato"; + # accents = [ + # "mauve" + # ]; + # }; + # }; + # cursorTheme = { + # name = "catppuccin-macchiato-dark-cursors"; + # package = pkgs.catppuccin-cursors.macchiatoDark; + # }; + # iconTheme = { + # name = "Papirus-Dark"; + # package = pkgs.catppuccin-papirus-folders.override { + # flavor = "macchiato"; + # accent = "mauve"; + # }; + # }; + }; +} diff --git a/modules/nixos/desktop/wayland/swaylock/default.nix b/modules/nixos/desktop/wayland/swaylock/default.nix new file mode 100755 index 0000000..27dc8e4 --- /dev/null +++ b/modules/nixos/desktop/wayland/swaylock/default.nix @@ -0,0 +1,3 @@ +{ + security.pam.services.swaylock.text = "auth include login"; +} diff --git a/modules/nixos/desktop/wayland/thunar/default.nix b/modules/nixos/desktop/wayland/thunar/default.nix new file mode 100755 index 0000000..9dc6381 --- /dev/null +++ b/modules/nixos/desktop/wayland/thunar/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + programs.thunar = { + enable = true; + plugins = [ + pkgs.xfce.thunar-archive-plugin + pkgs.xfce.thunar-volman + pkgs.xfce.thunar-media-tags-plugin + ]; + }; +} diff --git a/modules/nixos/desktop/xserver/default.nix b/modules/nixos/desktop/xserver/default.nix new file mode 100755 index 0000000..6fa2898 --- /dev/null +++ b/modules/nixos/desktop/xserver/default.nix @@ -0,0 +1,24 @@ +{ + services = { + xserver = { + enable = true; + xkb = { + layout = "us"; + # variant = "colemak_dh" + }; + }; + libinput = { + enable = true; + touchpad = { + scrollMethod = "twofinger"; + naturalScrolling = true; + middleEmulation = true; + accelSpeed = "5"; + accelProfile = "adaptive"; + disableWhileTyping = true; + }; + mouse.accelProfile = "flat"; + }; + }; + console.useXkbConfig = true; +} diff --git a/modules/nixos/hardware/android/default.nix b/modules/nixos/hardware/android/default.nix new file mode 100755 index 0000000..49f045d --- /dev/null +++ b/modules/nixos/hardware/android/default.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: +{ + programs = { + adb.enable = true; + droidcam.enable = true; + }; + services.udev = { + enable = true; + packages = builtins.attrValues { + inherit (pkgs) + android-udev-rules + ; + }; + extraRules = '' + # Amazon Fire Tablet + SUBSYSTEM=="usb", ATTR{idVendor}=="1949", ATTR{idProduct}=="0632", MODE="0666", GROUP="adbusers" + SUBSYSTEM=="usb", ATTR{idVendor}=="1949", ATTR{idProduct}=="0632", SYMLINK+="android_adb" + SUBSYSTEM=="usb", ATTR{idVendor}=="1949", ATTR{idProduct}=="0632", SYMLINK+="android_fastboot" + + # General Android rules + SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666" + SUBSYSTEM=="usb", ATTR{idVendor}=="1949", MODE="0666", GROUP="adbusers" + ''; + }; +} diff --git a/modules/nixos/hardware/audio/default.nix b/modules/nixos/hardware/audio/default.nix new file mode 100755 index 0000000..f0b90b8 --- /dev/null +++ b/modules/nixos/hardware/audio/default.nix @@ -0,0 +1,13 @@ +{ + security.rtkit.enable = true; + services = { + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + pulseaudio.enable = false; + }; +} diff --git a/modules/nixos/hardware/bluetooth/default.nix b/modules/nixos/hardware/bluetooth/default.nix new file mode 100755 index 0000000..655e030 --- /dev/null +++ b/modules/nixos/hardware/bluetooth/default.nix @@ -0,0 +1,29 @@ +{ + pkgs, + config, + flake, + ... +}: +let + inherit (flake.config.machines) devices; + hostname = config.networking.hostName; +in +{ + hardware = { + bluetooth = { + enable = true; + package = pkgs.bluez; + powerOnBoot = true; + settings = { + General = { + Experimental = true; + Disable = "Headset"; + }; + }; + disabledPlugins = [ + "sap" + ]; + }; + }; + services.blueman.enable = if hostname == devices.deimos.name then false else true; +} diff --git a/modules/nixos/hardware/default.nix b/modules/nixos/hardware/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/hardware/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/hardware/moonlander/default.nix b/modules/nixos/hardware/moonlander/default.nix new file mode 100755 index 0000000..0047fcd --- /dev/null +++ b/modules/nixos/hardware/moonlander/default.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +{ + hardware.keyboard.zsa.enable = true; + + environment = { + enableAllTerminfo = true; + systemPackages = builtins.attrValues { + inherit (pkgs) + zsa-udev-rules + keymapp + kontroll + ; + }; + }; +} diff --git a/modules/nixos/hardware/printing/default.nix b/modules/nixos/hardware/printing/default.nix new file mode 100755 index 0000000..f5dc58a --- /dev/null +++ b/modules/nixos/hardware/printing/default.nix @@ -0,0 +1,56 @@ +{ + flake, + pkgs, + ... +}: +let + inherit (flake.config.machines.devices) + printer0 + printer1 + ; + genericPPD = "drv:///sample.drv/generic.ppd"; + pageSize = "Letter"; +in +{ + services = { + printing = { + enable = true; + drivers = with pkgs; [ + brlaser + cups-brother-hll2375dw + ]; + }; + }; + + hardware.printers = { + ensurePrinters = [ + { + name = printer0.label; + location = "Downstairs"; + deviceUri = "https://${printer0.ip.address0}"; + model = genericPPD; + ppdOptions = { + PageSize = pageSize; + }; + } + { + name = printer1.label; + location = "Upstairs"; + deviceUri = "https://${printer1.ip.address0}"; + model = genericPPD; + ppdOptions = { + PageSize = pageSize; + }; + } + ]; + ensureDefaultPrinter = printer1.label; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + 631 + ]; + }; + }; +} diff --git a/modules/nixos/hardware/razer/default.nix b/modules/nixos/hardware/razer/default.nix new file mode 100755 index 0000000..2feafa1 --- /dev/null +++ b/modules/nixos/hardware/razer/default.nix @@ -0,0 +1,3 @@ +{ + hardware.openrazer.enable = false; +} diff --git a/modules/nixos/hardware/tablet/default.nix b/modules/nixos/hardware/tablet/default.nix new file mode 100755 index 0000000..d4cae11 --- /dev/null +++ b/modules/nixos/hardware/tablet/default.nix @@ -0,0 +1,6 @@ +{ + hardware.opentabletdriver = { + enable = true; + daemon.enable = true; + }; +} diff --git a/modules/nixos/programs/coreCtrl/default.nix b/modules/nixos/programs/coreCtrl/default.nix new file mode 100755 index 0000000..63fbcfb --- /dev/null +++ b/modules/nixos/programs/coreCtrl/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + programs.corectrl = { + enable = true; + package = pkgs.corectrl; + gpuOverclock = { + enable = true; + ppfeaturemask = "0xffffffff"; + }; + }; +} diff --git a/modules/nixos/programs/default.nix b/modules/nixos/programs/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/programs/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/programs/disks/default.nix b/modules/nixos/programs/disks/default.nix new file mode 100755 index 0000000..4f0eb47 --- /dev/null +++ b/modules/nixos/programs/disks/default.nix @@ -0,0 +1,4 @@ +{ + programs.gnome-disks.enable = true; + services.udisks2.enable = true; +} diff --git a/modules/nixos/programs/firejail/default.nix b/modules/nixos/programs/firejail/default.nix new file mode 100755 index 0000000..fd95580 --- /dev/null +++ b/modules/nixos/programs/firejail/default.nix @@ -0,0 +1,3 @@ +{ + programs.firejail.enable = true; +} diff --git a/modules/nixos/programs/goldwarden/default.nix b/modules/nixos/programs/goldwarden/default.nix new file mode 100755 index 0000000..00ea95e --- /dev/null +++ b/modules/nixos/programs/goldwarden/default.nix @@ -0,0 +1,3 @@ +{ + # programs.goldwarden.enable = true; +} diff --git a/modules/nixos/programs/steam/default.nix b/modules/nixos/programs/steam/default.nix new file mode 100755 index 0000000..3f9d680 --- /dev/null +++ b/modules/nixos/programs/steam/default.nix @@ -0,0 +1,21 @@ +{ pkgs, ... }: +{ + programs = { + steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + extraPackages = builtins.attrValues { + inherit (pkgs) + curl + ; + }; + gamescopeSession.enable = true; + }; + java.enable = true; + }; + hardware.steam-hardware.enable = true; + programs.gamescope = { + enable = true; + }; +} diff --git a/modules/nixos/programs/virtManager/default.nix b/modules/nixos/programs/virtManager/default.nix new file mode 100755 index 0000000..479e95f --- /dev/null +++ b/modules/nixos/programs/virtManager/default.nix @@ -0,0 +1,4 @@ +{ + programs.virt-manager.enable = true; + virtualisation.libvirtd.enable = true; +} diff --git a/modules/nixos/services/acme/default.nix b/modules/nixos/services/acme/default.nix new file mode 100755 index 0000000..0c23a31 --- /dev/null +++ b/modules/nixos/services/acme/default.nix @@ -0,0 +1,87 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.people) user0; + inherit (flake.config.people.users.${user0}) email; + inherit (flake.config.services) instances; + domain0 = instances.web.domains.url0; + domain1 = instances.web.domains.url1; + domain3 = instances.web.domains.url3; + dns = instances.web.dns.provider0; + instanceName = service: (instances.${service}.subdomain); + dnsConfig = { + dnsProvider = dns; + directory = instances.acme.paths.path0; + environmentFile = config.sops.secrets."dns/namecheap".path; + }; +in +{ + security.acme = { + acceptTerms = true; + defaults = { + email = email.address0; + server = "https://acme-v02.api.letsencrypt.org/directory"; + }; + certs = builtins.listToAttrs ( + (map + (service: { + name = "${instanceName service}.${domain0}"; + value = dnsConfig; + }) + [ + "jellyfin" + "minecraft" + "ollama" + "syncthing" + "searx" + "vaultwarden" + "audiobookshelf" + ] + ) + ++ (map + (service: { + name = "${instanceName service}.${domain3}"; + value = dnsConfig; + }) + [ + "peertube" + "forgejo" + "mastodon" + ] + ) + ++ (map + (name: { + name = name; + value = dnsConfig; + }) + [ + domain0 + domain1 + domain3 + ] + ) + ); + }; + sops = + let + sopsSecrets = [ + "pass" + ]; + sopsPath = secret: { + path = "/var/lib/secrets/${instances.acme.name}/${dns}-${secret}"; + owner = "root"; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map (secret: { + name = "dns/${dns}"; + value = sopsPath secret; + }) sopsSecrets + ); + }; +} diff --git a/modules/nixos/services/audiobookshelf/default.nix b/modules/nixos/services/audiobookshelf/default.nix new file mode 100755 index 0000000..3ac183b --- /dev/null +++ b/modules/nixos/services/audiobookshelf/default.nix @@ -0,0 +1,58 @@ +{ flake, config, ... }: +let + inherit (flake.config.services.instances) audiobookshelf web; + inherit (flake.config.machines.devices) ceres; + service = audiobookshelf; + host = "${service.subdomain}.${web.domains.url0}"; + localhost = web.localhost.address0; +in +{ + services = { + audiobookshelf = { + enable = true; + host = localhost; + port = service.ports.port0; + dataDir = service.name; + openFirewall = true; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + redir /.well-known/carddav /remote.php/dav/ 301 + redir /.well-known/caldav /remote.php/dav/ 301 + + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + + encode gzip zstd + ''; + }; + }; + }; + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/caddy/default.nix b/modules/nixos/services/caddy/default.nix new file mode 100755 index 0000000..00ac4a8 --- /dev/null +++ b/modules/nixos/services/caddy/default.nix @@ -0,0 +1,39 @@ +{ flake, ... }: +let + inherit (flake.config.services.instances) + caddy + web + ; + + domain0 = web.domains.url0; + + service = caddy; +in +{ + services.caddy = { + enable = true; + virtualHosts = { + "${domain0}" = { + extraConfig = '' + tls /var/lib/acme/${domain0}/fullchain.pem /var/lib/acme/${domain0}/key.pem + encode zstd gzip + ''; + }; + }; + }; + + users.users.${service.name}.extraGroups = [ + "acme" + "nextcloud" + "mastodon" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + service.ports.port1 + ]; + }; + }; +} diff --git a/modules/nixos/services/default.nix b/modules/nixos/services/default.nix new file mode 100755 index 0000000..da65bd2 --- /dev/null +++ b/modules/nixos/services/default.nix @@ -0,0 +1,11 @@ +let + importList = + let + content = builtins.readDir ./.; + dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content); + in + map (name: ./. + "/${name}") dirContent; +in +{ + imports = importList; +} diff --git a/modules/nixos/services/flatpak/default.nix b/modules/nixos/services/flatpak/default.nix new file mode 100755 index 0000000..1ff0c53 --- /dev/null +++ b/modules/nixos/services/flatpak/default.nix @@ -0,0 +1,3 @@ +{ + services.flatpak.enable = true; +} diff --git a/modules/nixos/services/forgejo/default.nix b/modules/nixos/services/forgejo/default.nix new file mode 100755 index 0000000..ef3c041 --- /dev/null +++ b/modules/nixos/services/forgejo/default.nix @@ -0,0 +1,120 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) smtp forgejo web; + service = forgejo; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url3}"; +in +{ + services = { + forgejo = { + enable = true; + database.type = "postgres"; + lfs.enable = true; + secrets = { + mailer.PASSWD = config.sops.secrets."${service.name}-smtp".path; + database.PASSWD = config.sops.secrets."${service.name}-database".path; + }; + dump = { + interval = "5:00"; + type = "zip"; + file = "forgejo-backup"; + enable = true; + }; + settings = { + server = { + DOMAIN = host; + ROOT_URL = "https://${host}/"; + HTTP_PORT = service.ports.port0; + }; + # If you need to start from scratch, don't forget to turn this off again + service.DISABLE_REGISTRATION = true; + actions = { + ENABLED = true; + DEFAULT_ACTIONS_URL = "github"; + }; + mirror = { + ENABLED = true; + }; + mailer = { + ENABLED = true; + SMTP_ADDR = smtp.hostname; + FROM = service.email.address0; + USER = service.email.address0; + PROTOCOL = "smtp+starttls"; + SMTP_PORT = smtp.ports.port0; + SEND_AS_PLAIN_TEXT = true; + USE_CLIENT_CERT = false; + }; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + }; + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "smtp" + "database" + ] + ); + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 755 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 755 ${service.name} ${service.name} -" + ]; + + users.users.${service.name}.extraGroups = [ + "caddy" + "postgres" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/hLedger/default.nix b/modules/nixos/services/hLedger/default.nix new file mode 100755 index 0000000..b88433d --- /dev/null +++ b/modules/nixos/services/hLedger/default.nix @@ -0,0 +1,72 @@ +{ + flake, + pkgs, + ... +}: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) + hledger + web + ; + service = hledger; + localhost = web.localhost.address0; +in +{ + services = { + hledger-web = { + enable = true; + host = localhost; + # baseUrl = "https://${host}"; + stateDir = service.paths.path0; + port = service.ports.port0; + journalFiles = [ + ".hledger.journal" + ]; + allow = "edit"; + }; + }; + + environment = { + systemPackages = builtins.attrValues { + inherit (pkgs) + hledger + hledger-ui + ; + }; + }; + + users = { + users.${service.name} = { + isSystemUser = true; + group = service.name; + home = service.paths.path0; + }; + groups.${service.name} = { }; + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/jellyfin/default.nix b/modules/nixos/services/jellyfin/default.nix new file mode 100755 index 0000000..9de69c2 --- /dev/null +++ b/modules/nixos/services/jellyfin/default.nix @@ -0,0 +1,79 @@ +{ flake, ... }: +let + inherit (flake.config.people) + user0 + ; + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) + jellyfin + web + ; + service = jellyfin; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url0}"; +in +{ + services = { + jellyfin = { + enable = true; + openFirewall = true; + user = user0; + }; + jellyseerr = { + openFirewall = true; + enable = true; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + redir /.well-known/carddav /remote.php/dav/ 301 + redir /.well-known/caldav /remote.php/dav/ 301 + + reverse_proxy ${localhost}:${toString service.ports.port1} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + }; + + fileSystems = + let + settings = { + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + in + { + "/var/lib/${service.name}" = { + device = service.paths.path0; + } // settings; + "/var/cache/${service.name}" = { + device = "${service.paths.path0}/cache"; + } // settings; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${user0} ${service.name} -" + "Z ${service.paths.path0}/cache 0755 ${user0} ${service.name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + service.ports.port1 + service.ports.port2 + ]; + }; + }; +} diff --git a/modules/nixos/services/logrotate/default.nix b/modules/nixos/services/logrotate/default.nix new file mode 100755 index 0000000..6cb4dce --- /dev/null +++ b/modules/nixos/services/logrotate/default.nix @@ -0,0 +1,3 @@ +{ + services.logrotate.enable = true; +} diff --git a/modules/nixos/services/mastodon/config/chars.patch b/modules/nixos/services/mastodon/config/chars.patch new file mode 100755 index 0000000..e48a993 --- /dev/null +++ b/modules/nixos/services/mastodon/config/chars.patch @@ -0,0 +1,34 @@ +diff --git a/app/javascript/mastodon/features/compose/components/compose_form.jsx b/app/javascript/mastodon/features/compose/components/compose_form.jsx +index 9222b2dc8..962310a28 100644 +--- a/app/javascript/mastodon/features/compose/components/compose_form.jsx ++++ b/app/javascript/mastodon/features/compose/components/compose_form.jsx +@@ -100,7 +100,7 @@ class ComposeForm extends ImmutablePureComponent { + const fulltext = this.getFulltextForCharacterCounting(); + const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0; + +- return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (isOnlyWhitespace && !anyMedia)); ++ return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 5000 || (isOnlyWhitespace && !anyMedia)); + }; + + handleSubmit = (e) => { +@@ -297,7 +297,7 @@ class ComposeForm extends ImmutablePureComponent { + + +
+- ++ +
+ + +diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb +index dc841ded3..9cb1ec94b 100644 +--- a/app/validators/status_length_validator.rb ++++ b/app/validators/status_length_validator.rb +@@ -1,7 +1,7 @@ + # frozen_string_literal: true + + class StatusLengthValidator < ActiveModel::Validator +- MAX_CHARS = 500 ++ MAX_CHARS = 5000 + URL_PLACEHOLDER_CHARS = 23 + URL_PLACEHOLDER = 'x' * 23 \ No newline at end of file diff --git a/modules/nixos/services/mastodon/config/twitter.txt b/modules/nixos/services/mastodon/config/twitter.txt new file mode 100755 index 0000000..44765cf --- /dev/null +++ b/modules/nixos/services/mastodon/config/twitter.txt @@ -0,0 +1,5500 @@ +/* Mastodon Bird UI by @rolle@mementomori.social + 2.0.0rc47 */ + +/* CSS variables */ +:root { + /* Brand colors */ + --color-brand-twitter: #cc6600; + --color-brand-twitter-bg: #15202b; + --color-brand-twitter-dim: #8b98a5; + --color-brand-twitter-mud: #273340; + --color-brand-twitter-dark: #232543; + --color-brand-twitter-threaded-line: #425364; + --color-brand-mastodon: #cc6600; + --color-brand-mastodon-links: #cc6600; + --color-brand-mastodon-bg: #1e2028; + --color-brand-mastodon-dim: #717c9b; + --color-brand-mastodon-mud: rgb(39 44 64 / .5); + --color-brand-mastodon-dark: #232543; + --color-brand-mastodon-threaded-line: #434264; + --color-brand-mastodon-text-light: #8493a7; + + /* Colors */ + /* Note: Remember to search for the DIM hex + and replace it inside the SVG icons if you decide to change it */ + --color-bg: var(--color-brand-mastodon-bg); + --color-bg-75: #1e2028bf; + --color-fg: #fff; + --color-border: #38384d; + --color-dim: var(--color-brand-mastodon-dim); + --color-accent: var(--color-brand-mastodon-links); + --color-accent-dark: var(--color-brand-mastodon); + --color-accent-dark-50: #595aff80; + --color-green: #00ba7c; + --color-red: #f91880; + --color-red-75: #f91880bf; + --color-yellow: #ffac33; + --color-light-shade: #ffffff05; + --color-focusable-toot: #ffffff09; + --color-light-text: #f7f9f9; + --color-mud: var(--color-brand-mastodon-mud); + --color-arsenic: #393f4f; + --color-black-coral: #5a5371; + --color-profile-button-hover: #f1eff41a; + --color-column-link-hover: #f7f7f91a; + --color-modal-overlay: #5b708366; + --color-dark: var(--color-brand-mastodon-dark); + --color-thread-line: var(--color-brand-mastodon-threaded-line); + --color-topaz: #dadaf3; + --color-light-purple: #9baec8; + --color-lighter-purple: #a5b8d3; + --color-dark-electric-blue: #576078; + --color-button-text: #f7f9f9; + --color-ghost-button-text: var(--color-button-text); + --color-verified: #79bd9a; + --color-destructive: #df405a; + --color-light-fuchsia-pink: #ff8cfd; + --color-hashtag: var(--color-accent); + --color-mention: var(--color-accent); + --color-link: var(--color-accent); + --color-bg-compose-form: rgb(39 44 64 / .4); + --color-bg-compose-form-focus: rgb(39 44 64 / .8); + + /* In the original UI this color is lighten($ui-base-color, 12%) */ + --color-outer-space: #42485a; + + /* Font related */ + --font-size: 15px; + --font-size-smaller: 13px; + --font-size-12: 12px; + --font-size-mid: 14px; + --font-size-bigger: 17px; + --font-size-title: 19px; + --font-size-heading: 20px; + --font-weight-regular: 400; + --font-weight-semibold: 500; + --font-weight-bold: 700; + --line-height: 22px; + --line-height-mid: 20px; + + /* Grids and gaps */ + --gap-default: 12px; + --gap-column-link: 12px; + + /* Element sizes */ + --size-avatar: 48px; + --size-avatar-small: 32px; + --width-main-panel: 600px; + --width-side-panel: 260px; + --width-compose-panel: 350px; + --border-radius: 16px; + --border-radius-badges: 4px; + --badges-distance-from-edge: 12px; + + /* Misc */ + --active-header-box-shadow: 0 1px 0 rgba(140, 141, 255, .3); + --active-header-radial-gradient: radial-gradient(ellipse, rgba(99, 100, 255, .23) 0, rgba(99, 100, 255, 0) 60%); + --compose-form-linear-gradient: linear-gradient(180deg, rgba(30, 32, 40, 1) 0%, rgba(30, 32, 40, 1) 53%, rgba(30, 32, 40, 0.8141631652661064) 76%, rgba(30, 32, 40, 0.7077205882352942) 87%, rgba(30, 32, 40, 0.458420868347339) 97%, rgba(30, 32, 40, 0) 100%); + + /* Logo */ + --logo: url('data:image/svg+xml, %3Csvg class="mastodon-logo" xmlns="http://www.w3.org/2000/svg" width="28px" height="28px" viewBox="0 0 216.4144 232.00976"%3E%3Cdefs xmlns="http://www.w3.org/2000/svg"%3E%3ClinearGradient xmlns="http://www.w3.org/2000/svg" id="gradient" x2="0%25" y2="100%25" gradientUnits="userSpaceOnUse"%3E%3Cstop offset="0%25" stop-color="%23595aff"%3E%3C/stop%3E%3Cstop offset="100%25" stop-color="%23595aff"%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath xmlns="http://www.w3.org/2000/svg" d="M211.80734 139.0875c-3.18125 16.36625-28.4925 34.2775-57.5625 37.74875-15.15875 1.80875-30.08375 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.39125 27.9425 21.11625.7225 39.91875-5.20625 39.91875-5.20625l.8675 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234 213.82 1.40609 165.31125.20859 116.09125c-.365-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67234 3.45375 78.20359.2425 107.86484 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.975 14.7525 32.975 65.0825 0 0 .41375 37.13375-4.59875 62.915" fill="url(%23gradient)"%3E%3C/path%3E%3Cpath d="M177.50984 80.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025 0-17.4175 7.5075-17.4175 22.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375 0-15.74 6.32875-15.74 18.7975v59.15H38.90484V80.077c0-12.455 3.17125-22.3525 9.54125-29.675 6.56875-7.3225 15.17125-11.07625 25.85-11.07625 12.355 0 21.71125 4.74875 27.8975 14.2475l6.01375 10.08125 6.015-10.08125c6.185-9.49875 15.54125-14.2475 27.8975-14.2475 10.6775 0 19.28 3.75375 25.85 11.07625 6.36875 7.3225 9.54 17.22 9.54 29.675" fill="%23fff"%3E%3C/path%3E%3C/svg%3E'); + + /* Icons */ + --icon-follow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%23717c9b" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7H214.7l.5-8.3c.7-9.8 1.4-11.5 8.2-18.5 8.6-9 7-8.7 41.4-9l30.2-.3V259h-9.5c-9.4 0-9.5 0-9.1-2.3.3-1.2 1.5-10.8 2.6-21.2 1.2-10.5 3-26.5 4.1-35.7 1-9.2 1.9-17.2 1.9-17.8 0-.7 12.3-1 38.5-1 23.5 0 40.3-.4 43.4-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%23717c9b" d="M317.2 207c-1.8 1.1-4.1 3.4-5.2 5.2-1.9 3.1-2 5.1-2 38V285h-34.7c-33 0-35 .1-38.1 2-6.7 4.1-7.2 6-7.2 30s.5 25.9 7.2 30c3.1 1.9 5.1 2 38.1 2H310v34.7c0 33 .1 35 2 38.1 4.1 6.7 6 7.2 30 7.2s25.9-.5 30-7.2c1.9-3.1 2-5.1 2-38.1V349h34.8c32.9 0 34.9-.1 38-2 6.7-4.1 7.2-6 7.2-30s-.5-25.9-7.2-30c-3.1-1.9-5.1-2-38-2H374v-34.8c0-32.9-.1-34.9-2-38-4.1-6.7-6-7.2-30-7.2-19.7 0-21.8.2-24.8 2z"/%3E%3Cpath fill="%23717c9b" d="M217.2 359.7c-5 43.2-5.5 50-4.2 54.7 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 8.9-5.3 12.3-11.7 13.4-25.4.9-10.2 3.5-33.2 4.2-36.6l.5-2.7-15.3-.4c-10.1-.2-16.1-.8-17.8-1.7-1.4-.7-5-3.8-8.1-6.8l-5.6-5.4-1.1 9.8z"/%3E%3C/svg%3E'); + --icon-unfollow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%2300ba7c" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7h38.8c21.3 0 38.8.4 38.8.9 0 1-2.3 21.5-5 45.1-5.9 52.1-6.4 57.6-5 62.4 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 5-3 8.7-6.7 10.1-10.1 1.2-2.9 1.1-3.1-10.8-15.1-6.7-6.7-12.6-13.2-13.2-14.4-1.5-2.9-1.4-25.8 0-28.6.6-1.2 9.2-10.3 19-20.3 24-24.2 24-20.9.3-44.4-9.6-9.6-18.2-18.7-19-20.2-2-3.8-2-25.8 0-29.6 1.7-3.2 34.2-35.5 37.3-37.1 1.2-.6 4.2-1.1 6.6-1.1 5.2 0 4.6 1.5 6.8-17.3l1.1-9.7h38.4c23.4 0 40.2-.4 43.3-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%2300ba7c" d="M277.5 223.2c-3.1 1.7-28.5 27-30.1 30-1.7 3.2-1.9 12-.3 15.1.6 1.2 11.7 12.9 24.7 25.9l23.7 23.8-23.7 23.7c-13 13.1-24.1 24.8-24.7 26-1.6 3.1-1.4 11.9.3 15.1 1.7 3.2 27.2 28.5 30.3 30.1 2.8 1.4 11.8 1.4 14.6 0 1.2-.6 12.9-11.7 26-24.7l23.7-23.7 23.8 23.7c13 13 24.7 24.1 25.9 24.7 2.8 1.4 11.8 1.4 14.6 0 3.1-1.6 28.6-26.9 30.3-30.1 1.7-3.2 1.9-12 .3-15.1-.6-1.2-11.7-12.9-24.7-26L388.5 318l23.7-23.8c13-13 24.1-24.7 24.7-25.9 1.6-3.1 1.4-11.9-.3-15.1-1.7-3.2-27.2-28.5-30.3-30.1-2.8-1.4-11.8-1.4-14.6 0-1.2.6-12.9 11.7-25.9 24.7L342 271.5l-23.7-23.7c-13.1-13-24.8-24.1-26-24.7-2.8-1.4-12.2-1.4-14.8.1z"/%3E%3C/svg%3E'); + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%2300ba7c' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status-prepend: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"%3E%3Cg%3E%3Cpath fill="%2300ba7c" d="M4.75 3.79l4.603 4.3-1.706 1.82L6 8.38v7.37c0 .97.784 1.75 1.75 1.75H13V20H7.75c-2.347 0-4.25-1.9-4.25-4.25V8.38L1.853 9.91.147 8.09l4.603-4.3zm11.5 2.71H11V4h5.25c2.347 0 4.25 1.9 4.25 4.25v7.37l1.647-1.53 1.706 1.82-4.603 4.3-4.603-4.3 1.706-1.82L18 15.62V8.25c0-.97-.784-1.75-1.75-1.75z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23f7f9f9' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-wrapper: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 136 136'%3E%3Cpath fill='%2300ba7c' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-reply-nofitication-filter-bar-active: url('data:image/svg+xml, %3Csvg viewBox="0 0 24 24" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath fill="%23f7f9f9" d="M1.751 10c0-4.42 3.584-8 8.005-8h4.366a8.13 8.13 0 0 1 8.129 8.13c0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067A8.005 8.005 0 0 1 1.751 10zm8.005-6a6.005 6.005 0 1 0 .133 12.01l.351-.01h1.761v2.3l5.087-2.81A6.127 6.127 0 0 0 14.122 4H9.756z"/%3E%3Cellipse fill="%23f7f9f9" fill-rule="evenodd" stroke-width="1.28569" cx="11.835" cy="10.2" rx="9.117" ry="8.123"/%3E%3C/svg%3E%0A'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-conversation: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-column-link: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-column-link-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23f7f9f9" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-reply-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-list: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EList%3C/title%3E%3Cpath fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M160 144h288M160 256h288M160 368h288"/%3E%3Ccircle cx="80" cy="144" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="256" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="368" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3C/svg%3E'); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23717c9b' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-hover: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23F91880' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%23f7f9f9'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-active-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-notification: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-star-column-link: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-column-link-active: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-notification: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="0" viewBox="0 0 24 24" fill="%23ffac33" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23ffac33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-heart-column-link: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23f7f9f9' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-column-link-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23f7f9f9'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-direct-messages: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-direct-messages-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="%23f7f9f9" stroke="%23232543" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-users-column-link: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-users-column-link-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%23f7f9f9" stroke-width="2.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%23f7f9f9" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-status-hover-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bell: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs-active: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-home-notification-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-home: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-more: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-more-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-close-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-checked-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-plus: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23e0245e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-cross-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-cross-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23e0245e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-cog: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' width='26' height='26' viewBox='0 0 512 512' fill='%23f7f9f9'%3E%3Cpath d='M456.7 242.27l-26.08-4.2a8 8 0 01-6.6-6.82c-.5-3.2-1-6.41-1.7-9.51a8.08 8.08 0 013.9-8.62l23.09-12.82a8.05 8.05 0 003.9-9.92l-4-11a7.94 7.94 0 00-9.4-5l-25.89 5a8 8 0 01-8.59-4.11q-2.25-4.2-4.8-8.41a8.16 8.16 0 01.7-9.52l17.29-19.94a8 8 0 00.3-10.62l-7.49-9a7.88 7.88 0 00-10.5-1.51l-22.69 13.63a8 8 0 01-9.39-.9c-2.4-2.11-4.9-4.21-7.4-6.22a8 8 0 01-2.5-9.11l9.4-24.75A8 8 0 00365 78.77l-10.2-5.91a8 8 0 00-10.39 2.21l-16.64 20.84a7.15 7.15 0 01-8.5 2.5s-5.6-2.3-9.8-3.71A8 8 0 01304 87l.4-26.45a8.07 8.07 0 00-6.6-8.42l-11.59-2a8.07 8.07 0 00-9.1 5.61l-8.6 25.05a8 8 0 01-7.79 5.41h-9.8a8.07 8.07 0 01-7.79-5.41l-8.6-25.05a8.07 8.07 0 00-9.1-5.61l-11.59 2a8.07 8.07 0 00-6.6 8.42l.4 26.45a8 8 0 01-5.49 7.71c-2.3.9-7.3 2.81-9.7 3.71-2.8 1-6.1.2-8.8-2.91l-16.51-20.34A8 8 0 00156.75 73l-10.2 5.91a7.94 7.94 0 00-3.3 10.09l9.4 24.75a8.06 8.06 0 01-2.5 9.11c-2.5 2-5 4.11-7.4 6.22a8 8 0 01-9.39.9L111 116.14a8 8 0 00-10.5 1.51l-7.49 9a8 8 0 00.3 10.62l17.29 19.94a8 8 0 01.7 9.52q-2.55 4-4.8 8.41a8.11 8.11 0 01-8.59 4.11l-25.89-5a8 8 0 00-9.4 5l-4 11a8.05 8.05 0 003.9 9.92L85.58 213a7.94 7.94 0 013.9 8.62c-.6 3.2-1.2 6.31-1.7 9.51a8.08 8.08 0 01-6.6 6.82l-26.08 4.2a8.09 8.09 0 00-7.1 7.92v11.72a7.86 7.86 0 007.1 7.92l26.08 4.2a8 8 0 016.6 6.82c.5 3.2 1 6.41 1.7 9.51a8.08 8.08 0 01-3.9 8.62L62.49 311.7a8.05 8.05 0 00-3.9 9.92l4 11a7.94 7.94 0 009.4 5l25.89-5a8 8 0 018.59 4.11q2.25 4.2 4.8 8.41a8.16 8.16 0 01-.7 9.52l-17.29 19.96a8 8 0 00-.3 10.62l7.49 9a7.88 7.88 0 0010.5 1.51l22.69-13.63a8 8 0 019.39.9c2.4 2.11 4.9 4.21 7.4 6.22a8 8 0 012.5 9.11l-9.4 24.75a8 8 0 003.3 10.12l10.2 5.91a8 8 0 0010.39-2.21l16.79-20.64c2.1-2.6 5.5-3.7 8.2-2.6 3.4 1.4 5.7 2.2 9.9 3.61a8 8 0 015.49 7.71l-.4 26.45a8.07 8.07 0 006.6 8.42l11.59 2a8.07 8.07 0 009.1-5.61l8.6-25a8 8 0 017.79-5.41h9.8a8.07 8.07 0 017.79 5.41l8.6 25a8.07 8.07 0 009.1 5.61l11.59-2a8.07 8.07 0 006.6-8.42l-.4-26.45a8 8 0 015.49-7.71c4.2-1.41 7-2.51 9.6-3.51s5.8-1 8.3 2.1l17 20.94A8 8 0 00355 439l10.2-5.91a7.93 7.93 0 003.3-10.12l-9.4-24.75a8.08 8.08 0 012.5-9.12c2.5-2 5-4.1 7.4-6.21a8 8 0 019.39-.9L401 395.66a8 8 0 0010.5-1.51l7.49-9a8 8 0 00-.3-10.62l-17.29-19.94a8 8 0 01-.7-9.52q2.55-4.05 4.8-8.41a8.11 8.11 0 018.59-4.11l25.89 5a8 8 0 009.4-5l4-11a8.05 8.05 0 00-3.9-9.92l-23.09-12.82a7.94 7.94 0 01-3.9-8.62c.6-3.2 1.2-6.31 1.7-9.51a8.08 8.08 0 016.6-6.82l26.08-4.2a8.09 8.09 0 007.1-7.92V250a8.25 8.25 0 00-7.27-7.73zM256 112a143.82 143.82 0 01139.38 108.12A16 16 0 01379.85 240H274.61a16 16 0 01-13.91-8.09l-52.1-91.71a16 16 0 019.85-23.39A146.94 146.94 0 01256 112zM112 256a144 144 0 0143.65-103.41 16 16 0 0125.17 3.47L233.06 248a16 16 0 010 15.87l-52.67 91.7a16 16 0 01-25.18 3.36A143.94 143.94 0 01112 256zm144 144a146.9 146.9 0 01-38.19-4.95 16 16 0 01-9.76-23.44l52.58-91.55a16 16 0 0113.88-8H379.9a16 16 0 0115.52 19.88A143.84 143.84 0 01256 400z'/%3E%3C/svg%3E"); + --icon-sliders-contrast: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-administration: url("data:image/svg+xml, %3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Cpath d='M218.1 167.17c0 13 0 25.6 4.1 37.4-43.1 50.6-156.9 184.3-167.5 194.5a20.17 20.17 0 00-6.7 15c0 8.5 5.2 16.7 9.6 21.3 6.6 6.9 34.8 33 40 28 15.4-15 18.5-19 24.8-25.2 9.5-9.3-1-28.3 2.3-36s6.8-9.2 12.5-10.4 15.8 2.9 23.7 3c8.3.1 12.8-3.4 19-9.2 5-4.6 8.6-8.9 8.7-15.6.2-9-12.8-20.9-3.1-30.4s23.7 6.2 34 5 22.8-15.5 24.1-21.6-11.7-21.8-9.7-30.7c.7-3 6.8-10 11.4-11s25 6.9 29.6 5.9c5.6-1.2 12.1-7.1 17.4-10.4 15.5 6.7 29.6 9.4 47.7 9.4 68.5 0 124-53.4 124-119.2S408.5 48 340 48s-121.9 53.37-121.9 119.17zM400 144a32 32 0 11-32-32 32 32 0 0132 32z' fill='none' stroke='%23f7f9f9' stroke-linejoin='round' stroke-width='36'/%3E%3C/svg%3E"); + --icon-moderation: url("data:image/svg+xml, %3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Cpath d='M80 320V144a32 32 0 0132-32h0a32 32 0 0132 32v112M144 256V80a32 32 0 0132-32h0a32 32 0 0132 32v160M272 241V96a32 32 0 0132-32h0a32 32 0 0132 32v224M208 240V48a32 32 0 0132-32h0a32 32 0 0132 32v192' fill='none' stroke='%23f7f9f9' stroke-linecap='round' stroke-linejoin='round' stroke-width='32'/%3E%3Cpath d='M80 320c0 117.4 64 176 152 176s123.71-39.6 144-88l52.71-144c6.66-18.05 3.64-34.79-11.87-43.6h0c-15.52-8.82-35.91-4.28-44.31 11.68L336 320' fill='none' stroke='%23f7f9f9' stroke-linecap='round' stroke-linejoin='round' stroke-width='36'/%3E%3C/svg%3E"); + --icon-sliders: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-globe: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%23f7f9f9' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%23f7f9f9' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-purple: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%238c8dff' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%238c8dff' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" viewBox="0 0 512 512"%3E%3Cpath d="M96.85 286.62a8 8 0 00-12.53 8.25C102.07 373.28 172.3 432 256 432a175.31 175.31 0 0052.41-8 8 8 0 00.79-15 1120 1120 0 01-109.48-55.61 1126.24 1126.24 0 01-102.87-66.77zM492.72 339.51c-4.19-5.58-9.11-11.44-14.7-17.53a15.83 15.83 0 00-26.56 5.13c0 .16-.11.31-.17.47a15.75 15.75 0 003.15 16.06c22.74 25 26.42 38.51 25.48 41.36-2 2.23-17.05 6.89-58.15-3.53q-8.83-2.24-19.32-5.46-6.76-2.08-13.79-4.49a176.76 176.76 0 0019.54-27.25c.17-.29.35-.58.52-.88A175.39 175.39 0 00432 256a178.87 178.87 0 00-1-19c-9.57-88.17-84.4-157-175-157a175.37 175.37 0 00-106.4 35.89 177.4 177.4 0 00-45.83 51.84c-.16.29-.34.58-.51.87a175.48 175.48 0 00-13.83 30.52q-5.59-4.87-10.79-9.67c-5.39-5-10.17-9.63-14.42-14-29.57-30.26-33.09-45.61-32.16-48.45 2-2.23 15.54-5.87 48.62 1.31A15.82 15.82 0 0096.22 123l.36-.44a15.74 15.74 0 00-8.67-25.43A237.38 237.38 0 0064.13 93c-30.72-3.53-50.83 2.52-59.78 18-3.24 5.58-6.35 15.09-2.72 28.6C7 159.66 26.14 184 53.23 209.5c8.63 8.13 18.06 16.37 28.12 24.64 7.32 6 15 12.06 22.9 18.08q7.91 6 16.15 12T137.1 276c25.41 17.61 52.26 34.52 78.59 49.69q14.34 8.26 28.64 16t28.37 14.81c21.9 11 43.35 20.92 63.86 29.43q13.19 5.48 25.81 10.16c11.89 4.42 23.37 8.31 34.31 11.59l1.1.33c25.73 7.66 47.42 11.69 64.48 12H464c21.64 0 36.3-6.38 43.58-19 9.09-15.62 4.08-36.32-14.86-61.5z"/%3E%3C/svg%3E'); + --icon-home-column-link-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-hashtag-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-star: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23717c9b" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-active: url("data:image/svg+xml, %3Csvg fill='%23717c9b' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23717c9b' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffac33' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg fill='%23ffac33' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="%23717c9b" stroke="%23717c9b" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-hover: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23ffac33" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-search: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23535C76' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-search-opaque: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-compose: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-edit'%3E%3Cpath d='M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'%3E%3C/path%3E%3Cpath d='M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z'%3E%3C/path%3E%3C/svg%3E"); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%23717c9b" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%23717c9b' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%23717c9b' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%23717c9b'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%23717c9b'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23717c9b' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%23717c9b' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%23717c9b' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%23717c9b' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%23717c9b" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* High Contrast theme */ +body.theme-contrast.layout-single-column { + --color-dim: #b8b3c0; + + /* Icons */ + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23f7f9f9' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-follow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%23b8b3c0" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7H214.7l.5-8.3c.7-9.8 1.4-11.5 8.2-18.5 8.6-9 7-8.7 41.4-9l30.2-.3V259h-9.5c-9.4 0-9.5 0-9.1-2.3.3-1.2 1.5-10.8 2.6-21.2 1.2-10.5 3-26.5 4.1-35.7 1-9.2 1.9-17.2 1.9-17.8 0-.7 12.3-1 38.5-1 23.5 0 40.3-.4 43.4-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%23b8b3c0" d="M317.2 207c-1.8 1.1-4.1 3.4-5.2 5.2-1.9 3.1-2 5.1-2 38V285h-34.7c-33 0-35 .1-38.1 2-6.7 4.1-7.2 6-7.2 30s.5 25.9 7.2 30c3.1 1.9 5.1 2 38.1 2H310v34.7c0 33 .1 35 2 38.1 4.1 6.7 6 7.2 30 7.2s25.9-.5 30-7.2c1.9-3.1 2-5.1 2-38.1V349h34.8c32.9 0 34.9-.1 38-2 6.7-4.1 7.2-6 7.2-30s-.5-25.9-7.2-30c-3.1-1.9-5.1-2-38-2H374v-34.8c0-32.9-.1-34.9-2-38-4.1-6.7-6-7.2-30-7.2-19.7 0-21.8.2-24.8 2z"/%3E%3Cpath fill="%23b8b3c0" d="M217.2 359.7c-5 43.2-5.5 50-4.2 54.7 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 8.9-5.3 12.3-11.7 13.4-25.4.9-10.2 3.5-33.2 4.2-36.6l.5-2.7-15.3-.4c-10.1-.2-16.1-.8-17.8-1.7-1.4-.7-5-3.8-8.1-6.8l-5.6-5.4-1.1 9.8z"/%3E%3C/svg%3E'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23b8b3c0' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23b8b3c0" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23b8b3c0" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-star: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23b8b3c0" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-active: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23b8b3c0' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="%23b8b3c0" stroke="%23b8b3c0" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%23b8b3c0" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%23b8b3c0' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%23b8b3c0' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%23b8b3c0'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%23b8b3c0'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23b8b3c0' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23b8b3c0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%23b8b3c0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%23b8b3c0" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* Light theme */ +body.theme-mastodon-light.layout-single-column { + --color-bg: #fff; + --color-fg: #000; + --color-border: #e6e1ed; + --color-dim: #9388a6; + --color-green: #17bf63; + --color-red: #e0245e; + --color-red-75: #e0245ebf; + --color-light-shade: #00000005; + --color-focusable-toot: rgba(0, 0, 0, 0.035); + --color-light-text: #1f1b23; + --color-mud: #e5e1ed; + --color-black-coral: #9188a6; + --color-profile-button-hover: #1e1b231a; + --color-column-link-hover: #1e1b231a; + --color-modal-overlay: #6a5b8366; + --color-dark: #f7f9f9; + --color-thread-line: #e1e8ed; + --color-topaz: #8899a6; + --color-light-purple: #9588a6; + --color-dark-electric-blue: #9088a6; + --color-bg-75: #ffffffbf; + --color-bg-90: #ffffffe6; + --color-accent: var(--color-accent-dark); + --color-ghost-button-text: var(--color-accent-dark); + --color-bg-compose-form: rgb(147 136 166 / .2); + --color-bg-compose-form-focus: rgb(147 136 166 / .3); + --color-hashtag: var(--color-accent-dark); + --color-mention: var(--color-accent-dark); + + /* Misc */ + --compose-form-linear-gradient: linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 1) 53%, rgba(255, 255, 255, 0.8141631652661064) 76%, rgba(255, 255, 255, 0.7077205882352942) 87%, rgba(255, 255, 255, 0.458420868347339) 97%, rgba(255, 255, 255, 0) 100%); + + /* Icons for light theme */ + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%239388a6' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%239388a6' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status-prepend: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"%3E%3Cg%3E%3Cpath fill="%2300ba7c" d="M4.75 3.79l4.603 4.3-1.706 1.82L6 8.38v7.37c0 .97.784 1.75 1.75 1.75H13V20H7.75c-2.347 0-4.25-1.9-4.25-4.25V8.38L1.853 9.91.147 8.09l4.603-4.3zm11.5 2.71H11V4h5.25c2.347 0 4.25 1.9 4.25 4.25v7.37l1.647-1.53 1.706 1.82-4.603 4.3-4.603-4.3 1.706-1.82L18 15.62V8.25c0-.97-.784-1.75-1.75-1.75z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%231f1b23' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-wrapper: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='24' height='24' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%2300ba7c' d='M6 4h15a1 1 0 0 1 1 1v7h-2V6H6v3L1 5l5-4v3zm12 16H3a1 1 0 0 1-1-1v-7h2v6h14v-3l5 4l-5 4v-3z'/%3E%3C/svg%3E"); + --icon-reply-nofitication-filter-bar-active: url('data:image/svg+xml, %3Csvg viewBox="0 0 24 24" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath fill="%231f1b23" d="M1.751 10c0-4.42 3.584-8 8.005-8h4.366a8.13 8.13 0 0 1 8.129 8.13c0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067A8.005 8.005 0 0 1 1.751 10zm8.005-6a6.005 6.005 0 1 0 .133 12.01l.351-.01h1.761v2.3l5.087-2.81A6.127 6.127 0 0 0 14.122 4H9.756z"/%3E%3Cellipse fill="%231f1b23" fill-rule="evenodd" stroke-width="1.28569" cx="11.835" cy="10.2" rx="9.117" ry="8.123"/%3E%3C/svg%3E%0A'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-conversation: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-column-link: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-column-link-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%231f1b23" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-reply-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-list: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EList%3C/title%3E%3Cpath fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M160 144h288M160 256h288M160 368h288"/%3E%3Ccircle cx="80" cy="144" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="256" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="368" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3C/svg%3E'); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%239388a6' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-hover: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23F91880' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%231f1b23'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-notification: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-column-link: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%231f1b23' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-column-link-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%231f1b23'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-star-column-link: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-column-link-active: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-direct-messages: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-direct-messages-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="%231f1b23" stroke="%23ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-users-column-link: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%231f1b23" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-users-column-link-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%231f1b23" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%231f1b23" stroke-width="2.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%231f1b23" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%239388a6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bell: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs-active: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-home-notification-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-home: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-more: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-more-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-close-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-cog: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' width='26' height='26' viewBox='0 0 512 512' fill='%231f1b23'%3E%3Cpath d='M456.7 242.27l-26.08-4.2a8 8 0 01-6.6-6.82c-.5-3.2-1-6.41-1.7-9.51a8.08 8.08 0 013.9-8.62l23.09-12.82a8.05 8.05 0 003.9-9.92l-4-11a7.94 7.94 0 00-9.4-5l-25.89 5a8 8 0 01-8.59-4.11q-2.25-4.2-4.8-8.41a8.16 8.16 0 01.7-9.52l17.29-19.94a8 8 0 00.3-10.62l-7.49-9a7.88 7.88 0 00-10.5-1.51l-22.69 13.63a8 8 0 01-9.39-.9c-2.4-2.11-4.9-4.21-7.4-6.22a8 8 0 01-2.5-9.11l9.4-24.75A8 8 0 00365 78.77l-10.2-5.91a8 8 0 00-10.39 2.21l-16.64 20.84a7.15 7.15 0 01-8.5 2.5s-5.6-2.3-9.8-3.71A8 8 0 01304 87l.4-26.45a8.07 8.07 0 00-6.6-8.42l-11.59-2a8.07 8.07 0 00-9.1 5.61l-8.6 25.05a8 8 0 01-7.79 5.41h-9.8a8.07 8.07 0 01-7.79-5.41l-8.6-25.05a8.07 8.07 0 00-9.1-5.61l-11.59 2a8.07 8.07 0 00-6.6 8.42l.4 26.45a8 8 0 01-5.49 7.71c-2.3.9-7.3 2.81-9.7 3.71-2.8 1-6.1.2-8.8-2.91l-16.51-20.34A8 8 0 00156.75 73l-10.2 5.91a7.94 7.94 0 00-3.3 10.09l9.4 24.75a8.06 8.06 0 01-2.5 9.11c-2.5 2-5 4.11-7.4 6.22a8 8 0 01-9.39.9L111 116.14a8 8 0 00-10.5 1.51l-7.49 9a8 8 0 00.3 10.62l17.29 19.94a8 8 0 01.7 9.52q-2.55 4-4.8 8.41a8.11 8.11 0 01-8.59 4.11l-25.89-5a8 8 0 00-9.4 5l-4 11a8.05 8.05 0 003.9 9.92L85.58 213a7.94 7.94 0 013.9 8.62c-.6 3.2-1.2 6.31-1.7 9.51a8.08 8.08 0 01-6.6 6.82l-26.08 4.2a8.09 8.09 0 00-7.1 7.92v11.72a7.86 7.86 0 007.1 7.92l26.08 4.2a8 8 0 016.6 6.82c.5 3.2 1 6.41 1.7 9.51a8.08 8.08 0 01-3.9 8.62L62.49 311.7a8.05 8.05 0 00-3.9 9.92l4 11a7.94 7.94 0 009.4 5l25.89-5a8 8 0 018.59 4.11q2.25 4.2 4.8 8.41a8.16 8.16 0 01-.7 9.52l-17.29 19.96a8 8 0 00-.3 10.62l7.49 9a7.88 7.88 0 0010.5 1.51l22.69-13.63a8 8 0 019.39.9c2.4 2.11 4.9 4.21 7.4 6.22a8 8 0 012.5 9.11l-9.4 24.75a8 8 0 003.3 10.12l10.2 5.91a8 8 0 0010.39-2.21l16.79-20.64c2.1-2.6 5.5-3.7 8.2-2.6 3.4 1.4 5.7 2.2 9.9 3.61a8 8 0 015.49 7.71l-.4 26.45a8.07 8.07 0 006.6 8.42l11.59 2a8.07 8.07 0 009.1-5.61l8.6-25a8 8 0 017.79-5.41h9.8a8.07 8.07 0 017.79 5.41l8.6 25a8.07 8.07 0 009.1 5.61l11.59-2a8.07 8.07 0 006.6-8.42l-.4-26.45a8 8 0 015.49-7.71c4.2-1.41 7-2.51 9.6-3.51s5.8-1 8.3 2.1l17 20.94A8 8 0 00355 439l10.2-5.91a7.93 7.93 0 003.3-10.12l-9.4-24.75a8.08 8.08 0 012.5-9.12c2.5-2 5-4.1 7.4-6.21a8 8 0 019.39-.9L401 395.66a8 8 0 0010.5-1.51l7.49-9a8 8 0 00-.3-10.62l-17.29-19.94a8 8 0 01-.7-9.52q2.55-4.05 4.8-8.41a8.11 8.11 0 018.59-4.11l25.89 5a8 8 0 009.4-5l4-11a8.05 8.05 0 00-3.9-9.92l-23.09-12.82a7.94 7.94 0 01-3.9-8.62c.6-3.2 1.2-6.31 1.7-9.51a8.08 8.08 0 016.6-6.82l26.08-4.2a8.09 8.09 0 007.1-7.92V250a8.25 8.25 0 00-7.27-7.73zM256 112a143.82 143.82 0 01139.38 108.12A16 16 0 01379.85 240H274.61a16 16 0 01-13.91-8.09l-52.1-91.71a16 16 0 019.85-23.39A146.94 146.94 0 01256 112zM112 256a144 144 0 0143.65-103.41 16 16 0 0125.17 3.47L233.06 248a16 16 0 010 15.87l-52.67 91.7a16 16 0 01-25.18 3.36A143.94 143.94 0 01112 256zm144 144a146.9 146.9 0 01-38.19-4.95 16 16 0 01-9.76-23.44l52.58-91.55a16 16 0 0113.88-8H379.9a16 16 0 0115.52 19.88A143.84 143.84 0 01256 400z'/%3E%3C/svg%3E"); + --icon-sliders-contrast: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-administration: url("data:image/svg+xml, %3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Cpath d='M218.1 167.17c0 13 0 25.6 4.1 37.4-43.1 50.6-156.9 184.3-167.5 194.5a20.17 20.17 0 00-6.7 15c0 8.5 5.2 16.7 9.6 21.3 6.6 6.9 34.8 33 40 28 15.4-15 18.5-19 24.8-25.2 9.5-9.3-1-28.3 2.3-36s6.8-9.2 12.5-10.4 15.8 2.9 23.7 3c8.3.1 12.8-3.4 19-9.2 5-4.6 8.6-8.9 8.7-15.6.2-9-12.8-20.9-3.1-30.4s23.7 6.2 34 5 22.8-15.5 24.1-21.6-11.7-21.8-9.7-30.7c.7-3 6.8-10 11.4-11s25 6.9 29.6 5.9c5.6-1.2 12.1-7.1 17.4-10.4 15.5 6.7 29.6 9.4 47.7 9.4 68.5 0 124-53.4 124-119.2S408.5 48 340 48s-121.9 53.37-121.9 119.17zM400 144a32 32 0 11-32-32 32 32 0 0132 32z' fill='none' stroke='%231f1b23' stroke-linejoin='round' stroke-width='36'/%3E%3C/svg%3E"); + --icon-moderation: url("data:image/svg+xml, %3Csvg width='24' height='24' xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Cpath d='M80 320V144a32 32 0 0132-32h0a32 32 0 0132 32v112M144 256V80a32 32 0 0132-32h0a32 32 0 0132 32v160M272 241V96a32 32 0 0132-32h0a32 32 0 0132 32v224M208 240V48a32 32 0 0132-32h0a32 32 0 0132 32v192' fill='none' stroke='%23f7f9f9' stroke-linecap='round' stroke-linejoin='round' stroke-width='32'/%3E%3Cpath d='M80 320c0 117.4 64 176 152 176s123.71-39.6 144-88l52.71-144c6.66-18.05 3.64-34.79-11.87-43.6h0c-15.52-8.82-35.91-4.28-44.31 11.68L336 320' fill='none' stroke='%231f1b23' stroke-linecap='round' stroke-linejoin='round' stroke-width='36'/%3E%3C/svg%3E"); + --icon-sliders: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23b8b3c0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-globe: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%231f1b23' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%231f1b23' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" viewBox="0 0 512 512"%3E%3Cpath d="M96.85 286.62a8 8 0 00-12.53 8.25C102.07 373.28 172.3 432 256 432a175.31 175.31 0 0052.41-8 8 8 0 00.79-15 1120 1120 0 01-109.48-55.61 1126.24 1126.24 0 01-102.87-66.77zM492.72 339.51c-4.19-5.58-9.11-11.44-14.7-17.53a15.83 15.83 0 00-26.56 5.13c0 .16-.11.31-.17.47a15.75 15.75 0 003.15 16.06c22.74 25 26.42 38.51 25.48 41.36-2 2.23-17.05 6.89-58.15-3.53q-8.83-2.24-19.32-5.46-6.76-2.08-13.79-4.49a176.76 176.76 0 0019.54-27.25c.17-.29.35-.58.52-.88A175.39 175.39 0 00432 256a178.87 178.87 0 00-1-19c-9.57-88.17-84.4-157-175-157a175.37 175.37 0 00-106.4 35.89 177.4 177.4 0 00-45.83 51.84c-.16.29-.34.58-.51.87a175.48 175.48 0 00-13.83 30.52q-5.59-4.87-10.79-9.67c-5.39-5-10.17-9.63-14.42-14-29.57-30.26-33.09-45.61-32.16-48.45 2-2.23 15.54-5.87 48.62 1.31A15.82 15.82 0 0096.22 123l.36-.44a15.74 15.74 0 00-8.67-25.43A237.38 237.38 0 0064.13 93c-30.72-3.53-50.83 2.52-59.78 18-3.24 5.58-6.35 15.09-2.72 28.6C7 159.66 26.14 184 53.23 209.5c8.63 8.13 18.06 16.37 28.12 24.64 7.32 6 15 12.06 22.9 18.08q7.91 6 16.15 12T137.1 276c25.41 17.61 52.26 34.52 78.59 49.69q14.34 8.26 28.64 16t28.37 14.81c21.9 11 43.35 20.92 63.86 29.43q13.19 5.48 25.81 10.16c11.89 4.42 23.37 8.31 34.31 11.59l1.1.33c25.73 7.66 47.42 11.69 64.48 12H464c21.64 0 36.3-6.38 43.58-19 9.09-15.62 4.08-36.32-14.86-61.5z"/%3E%3C/svg%3E'); + --icon-home-column-link-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-hashtag-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-search: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%239FA4BB' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-search-opaque: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%231f1b23' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%239FA4BB" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%239FA4BB' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%239FA4BB' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%239FA4BB'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%239FA4BB'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%239FA4BB' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239FA4BB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%239FA4BB' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%239FA4BB' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%239FA4BB' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%239FA4BB" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* Vars on iPad, landscape */ +@media (min-width: 1175px) and (max-width: 1260px) { + :root { + --width-main-panel: 500px; + --width-side-panel: 265px; + --width-compose-panel: 265px; + } +} + +/* Vars in mobile */ +@media (max-width: 500px) { + :root { + --font-size: 16px; + --line-height: 1.4; + --font-size-heading: 17px; + --badges-distance-from-edge: 10px; + } + + /* Hide scrollbar on mobile, since we can't pick the handle anyway */ + .layout-single-column::-webkit-scrollbar { + display: none; + } +} + +/* Search popout offset */ +.layout-single-column .search__popout, +.layout-single-column .search-popout { + left: calc(30px / 2); + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + max-width: calc(100% - 30px) !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: calc(100% - 30px) !important; +} + +body.layout-single-column { + background-color: var(--color-bg); + color: var(--color-fg); +} + +.layout-single-column .ui { + display: flex; + width: 100%; +} + +/* Text color */ +.layout-single-column .account__header__tabs__name h1, +.layout-single-column .account__header__bio .account__header__content, +.layout-single-column .reply-indicator__content, +.layout-single-column .status__content { + color: var(--color-fg); +} + +/* Link color variants */ +.layout-single-column .status-link.hashtag { + color: var(--color-hashtag); +} + +.layout-single-column .status-link.mention:not(.hashtag) { + color: var(--color-mention); +} + +/* stylelint-disable-next-line */ +.layout-single-column .status-link.mention:not(.hashtag):not(.mention) { + color: var(--color-link); +} + +/* Logo */ +.layout-single-column .ui__header__logo, +.layout-single-column .column-link.column-link--logo { + background-image: var(--logo); + background-position: center; + background-repeat: no-repeat; + background-size: 32px auto; + height: 50px; + padding: 0; + width: 50px; +} + +.layout-single-column .ui__header__logo img, +.layout-single-column .ui__header__logo svg { + display: none; +} + +/* Fixes a regression for 4.3.0-alpha.3-2024-04-06 caused by https://github.com/mastodon/mastodon/commit/4f068d4fcc4d134fcbd56faa8f39c608dd343417 */ +.layout-single-column .ui__header__logo { + flex-grow: unset; +} + +/* Things that should have the default font-size */ +.layout-single-column .notification__message, +.layout-single-column .status__content, +.layout-single-column .account__header__tabs__name h1 small, +.layout-single-column .button, +.layout-single-column .status__content__read-more-button, +.layout-single-column .status__prepend, +.layout-single-column .status__info, +.layout-single-column .status__relative-time, +.layout-single-column .status__info .status__display-name, +.layout-single-column .account__section-headline a, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar a, +.layout-single-column .notification__filter-bar button { + font-size: var(--font-size); + line-height: var(--line-height); +} + +/* Things that should have the mid font-size */ +.layout-single-column .account__header__extra__links, +.layout-single-column .columns-area__panels__pane--compositional .account__header__account-note textarea, +.layout-single-column .account__header__content, +.layout-single-column .columns-area__panels__pane--compositional .compose-form .autosuggest-textarea__textarea, +.layout-single-column .columns-area__panels__pane--compositional .compose-form .spoiler-input__input { + font-size: var(--font-size-mid); + line-height: var(--line-height-mid); +} + +/* Exceptions */ +.layout-single-column .account__header__content { + line-height: 18px; +} + +/* Things that will have even smaller font size */ +.layout-single-column .account__header__account-note label { + font-size: var(--font-size-12); +} + +/* Line heights */ +.layout-single-column .status__content { + line-height: var(--line-height); +} + +/* Modal overlay */ +.layout-single-column .modal-root__overlay { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + background-color: var(--color-modal-overlay) !important; + /* stylelint-disable-next-line */ + color: var(--color-light-text) !important; +} + +.layout-single-column .modal-root__modal .display-name strong, +.layout-single-column .modal-root__modal .status__content { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + color: var(--color-light-text) !important; +} + +/* Hide footer buttons in modals */ +.layout-single-column .picture-in-picture .picture-in-picture__footer { + display: none; +} + +/* Picture in picture fixes */ +.layout-single-column .picture-in-picture .audio-player, +.layout-single-column .picture-in-picture .video-player { + /* stylelint-disable-next-line */ + border-radius: 0 !important; + /* stylelint-disable-next-line */ + margin-left: 0 !important; +} + +/* Report modal */ +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text { + display: grid; + gap: 6px; +} + +/* Improve modal icon size and accessibility */ +.layout-single-column .image-loader .icon, +.layout-single-column .media-modal__navigation .icon { + color: var(--color-light-text); + height: 32px; + width: 32px; +} + +/* List adder input */ +.layout-single-column .list-editor input.setting-text, +.layout-single-column .list-adder input.setting-text { + background-color: transparent; + border-color: var(--color-black-coral); + height: 38px; +} + +.layout-single-column .list-editor .column-inline-form button, +.layout-single-column .list-adder .column-inline-form button, +.layout-single-column .list-editor .column-inline-form button::before { + min-height: 38px; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 100% !important; +} + +.layout-single-column .list-editor__search { + padding: 15px; +} + +.layout-single-column .embed-modal .embed-modal__container .embed-modal__html { + color: var(--color-light-text); +} + +.layout-single-column .embed-modal .embed-modal__container .embed-modal__html, +.layout-single-column .list-editor__search .search__input { + background-color: transparent; + border-color: var(--color-black-coral); + height: 38px; +} + +.layout-single-column .list-editor .drawer__inner.backdrop { + box-shadow: 2px 4px 15px rgba(0, 0, 0, .2); +} + +/* Search icon fix for 4.4.0-alpha.1+mementomods-2024-12-15 changes */ +.layout-single-column .search__icon { + right: 0; + top: 0; +} + +.layout-single-column .list-editor__search .search__icon .icon { + margin: 15px; +} + +.layout-single-column .list-editor .list__display-name, +.layout-single-column .list-adder .list__display-name { + align-items: center; + display: flex; + gap: var(--gap-default); +} + +.layout-single-column .list__display-name .icon-list-ul { + top: -2px; +} + +/* URL preview cards */ +.layout-single-column .status-card, +.layout-single-column .status-card:hover, +.layout-single-column .status-card:focus { + background-color: transparent; + border-color: var(--color-border); +} + +/* URL preview card summary text */ +.layout-single-column .status-card .status-card__host, +.layout-single-column .status-card .status-card__description { + color: var(--color-dim); +} + +/* URL preview card box */ +/* stylelint-disable-next-line */ +.layout-single-column .status-card .status-card__content { + padding: var(--gap-default); +} + +.layout-single-column .status-card.expanded .status-card__content { + display: grid; + gap: 8px; +} + +/* Preview cards */ +.layout-single-column .status-card { + background-color: var(--color-bg); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + transition: all 200ms; +} + +.layout-single-column .status-card.status-card.bottomless { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.layout-single-column .status-card.expanded { + display: block; +} + +.layout-single-column a.status-card .status-card__host { + font-size: var(--font-size); +} + +.layout-single-column .status-card a:active .status-card__author, +.layout-single-column .status-card a:active .status-card__title, +.layout-single-column .status-card a:focus .status-card__author, +.layout-single-column .status-card a:focus .status-card__title, +.layout-single-column .status-card a:hover .status-card__author, +.layout-single-column .status-card a:hover .status-card__title, +.layout-single-column a.status-card:active .status-card__author, +.layout-single-column a.status-card:active .status-card__title, +.layout-single-column a.status-card:focus .status-card__author, +.layout-single-column a.status-card:focus .status-card__title, +.layout-single-column a.status-card:hover .status-card__author, +.layout-single-column a.status-card:hover .status-card__title { + color: var(--color-fg); +} + +.layout-single-column .status-card a:active .status-card__host, +.layout-single-column .status-card a:hover .status-card__host, +.layout-single-column .status-card a:focus .status-card__host, +.layout-single-column a.status-card:active .status-card__host, +.layout-single-column a.status-card:focus .status-card__host, +.layout-single-column a.status-card:hover .status-card__host, +.layout-single-column a.status-card:focus .status-card__description, +.layout-single-column a.status-card:hover .status-card__description { + color: var(--color-dim); +} + +/* Show minimal status card if there's no image */ +.layout-single-column .status-card .status-card__image:not(:has(img)) { + display: none; +} + +/* Show iframe in status card if status contains embedded media */ +.layout-single-column .status-card .status-card-video:has(iframe) { + display: inherit; +} + +/* Hide empty YouTube description */ +.layout-single-column .status-card__description:empty { + display: none; +} + +.layout-single-column .status-card:focus, +.layout-single-column .status-card:hover { + background-color: rgba(255 255 255 / .03); +} + +.layout-single-column .status-card__image-image, +.layout-single-column .status-card__image-preview, +.layout-single-column .status-card .status-card__image { + background-color: var(--color-arsenic); + border-radius: 0; +} + +.layout-single-column a.status-card .status-card__content { + padding: 16px; +} + +.layout-single-column a.status-card .status-card__title { + color: var(--color-fg); + font-size: var(--font-size-title); + font-weight: var(--font-weight-semibold); + line-height: 1.3; + margin: 0; +} + +.layout-single-column a.status-card.expanded .status-card__title { + white-space: inherit; +} + +.layout-single-column .status-card.expanded .status-card__host { + color: var(--color-dim); + font-size: var(--font-size); + margin-bottom: 0; + margin-top: 0; +} + +.layout-single-column .status-card.expanded .status-card__description { + margin-top: 0; +} + +/* Announcements */ +.layout-single-column .announcements__pagination .icon, +.layout-single-column .announcements__pagination { + color: var(--color-dim); +} + +/* Dark panels like modals and boxes */ +.layout-single-column .account-memorial-banner, +.layout-single-column .follow-request-banner, +.layout-single-column .moved-account-banner, +.layout-single-column .about__meta, +.layout-single-column .about__section__title, +.layout-single-column .announcements, +.layout-single-column .report-dialog-modal, +.layout-single-column .report-modal__target, +.layout-single-column .compose-form .autosuggest-textarea__suggestions, +.layout-single-column .privacy-dropdown__dropdown, +.layout-single-column .drawer__backdrop, +.layout-single-column .list-editor__account, +.layout-single-column .list-editor, +.layout-single-column .list-editor__lists, +.layout-single-column .list-adder__account, +.layout-single-column .list-adder, +.layout-single-column .list-adder__lists, +.layout-single-column .dropdown-menu__arrow::before, +.layout-single-column .dropdown-menu, +.layout-single-column .dropdown-menu__item a, +.layout-single-column .dropdown-menu__item button, +.layout-single-column .emoji-mart-category-label span, +.layout-single-column .emoji-mart-bar:first-child, +.layout-single-column .emoji-picker-dropdown__menu, +.layout-single-column .privacy-dropdown.active .privacy-dropdown__value, +.layout-single-column .emoji-mart-search input, +.layout-single-column .emoji-mart-scroll, +.layout-single-column .emoji-mart-search, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .dismissable-banner, +.layout-single-column .block-modal__action-bar, +.layout-single-column .boost-modal__action-bar, +.layout-single-column .confirmation-modal__action-bar, +.layout-single-column .mute-modal__action-bar, +.layout-single-column .setting-text__wrapper, +.layout-single-column .setting-text, +.layout-single-column .report-modal__comment, +.layout-single-column .report-modal__container, +.layout-single-column .actions-modal, +.layout-single-column .block-modal, +.layout-single-column .boost-modal, +.layout-single-column .compare-history-modal, +.layout-single-column .confirmation-modal, +.layout-single-column .mute-modal, +.layout-single-column .report-modal, +.layout-single-column .column-header__collapsible-inner { + background-color: var(--color-dark); + border-color: var(--color-dark); + color: var(--color-light-text); +} + +/* Setting boxes */ +.layout-single-column .column-header__collapsible-inner { + background-color: var(--color-bg); + border-color: var(--color-border); +} + +/* Column-header border */ +.layout-single-column .column-header__collapsible { + border-bottom: 1px solid var(--color-border); + border-left: 0; + border-right: 0; +} + +.layout-single-column .column-header__collapsible, +.layout-single-column .column-header__collapsible.collapsed { + opacity: 1; +} + +/* Has dark 1px border */ +.layout-single-column .dismissable-banner { + border: 1px solid var(--color-dark); +} + +/* More subtle box-shadow for dropdown-menu */ +.layout-single-column .search-popout, +.layout-single-column .search__popout, +.layout-single-column .dropdown-menu { + box-shadow: 2px 4px 16px rgb(0 0 0 / .01); +} + +/* Autosuggest box shadow reset */ +.layout-single-column .search-popout, +.layout-single-column .search__popout, +.layout-single-column .dropdown-menu, +.layout-single-column .emoji-picker-dropdown__menu, +.layout-single-column .compose-form .compose-form__warning, +.layout-single-column .privacy-dropdown.active .privacy-dropdown__value, +.layout-single-column .privacy-dropdown__dropdown, +.layout-single-column .language-dropdown__dropdown, +.layout-single-column .compose-form .autosuggest-textarea__suggestions { + box-shadow: none; +} + +/* Composer form warnings */ +.layout-single-column .compose-form .compose-form__warning { + background-color: var(--color-light-purple); + color: var(--color-bg); +} + +/* Content warning placeholder */ +.layout-single-column .compose-form .autosuggest-textarea__textarea::placeholder, +.layout-single-column .compose-form .spoiler-input__input::placeholder { + color: var(--color-dim); +} + +/* Border colors */ +.layout-single-column .search-results__section__header, +.layout-single-column .account__header__bar, +.layout-single-column .about__meta__divider, +.layout-single-column .poll__footer, +.layout-single-column .report-dialog-modal .poll__option.dialog-option, +.layout-single-column .account, +.layout-single-column .report-dialog-modal__container, +.layout-single-column .dropdown-menu__item.edited-timestamp__history__item, +.layout-single-column .dropdown-menu__container__header, +.layout-single-column .compare-history-modal .report-modal__target, +.layout-single-column .account__section-headline, +.layout-single-column .detailed-status__action-bar, +.layout-single-column .column-back-button, +.layout-single-column .column-header, +.layout-single-column .audio-player, +.layout-single-column .video-player, +.layout-single-column .media-gallery, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form__poll-wrapper, +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .poll__option input[type="text"], +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .search__input, +.layout-single-column .setting-text, +.layout-single-column .dropdown-menu__separator, +.layout-single-column .status, +.layout-single-column .emoji-mart-search input, +.layout-single-column .conversation, +.layout-single-column .setting-text__wrapper { + border-color: var(--color-border); +} + +/* Change panel order */ +.layout-single-column .columns-area__panels__pane { + order: 3; +} + +.layout-single-column .columns-area__panels__main { + order: 2; +} + +.layout-single-column .columns-area__panels__pane.columns-area__panels__pane--start.columns-area__panels__pane--navigational { + order: 1; +} + +.layout-single-column .columns-area__panels__pane, +.layout-single-column .columns-area__panels__pane__inner { + min-width: var(--width-side-panel); + width: var(--width-side-panel); +} + +.layout-single-column .compose-panel { + width: var(--width-compose-panel); +} + +.layout-single-column .columns-area__panels__pane--compositional { + flex-grow: 1; + height: 100vh; + max-width: 350px; + min-height: 500px; + position: sticky; + top: 0; +} + +.layout-single-column .columns-area__panels__pane--compositional .columns-area__panels__pane__inner { + position: static; +} + +.layout-single-column .columns-area__panels__pane--compositional .columns-area__panels__pane__inner, +.compose-panel { + /* stylelint-disable-next-line */ + width: 100% !important; +} + +/* stylelint-disable-next-line */ +@media (min-width: 1175px) { + .layout-single-column .columns-area__panels__main { + max-width: calc(var(--width-main-panel) + calc(var(--gap-default) * 4)); + padding-left: calc(var(--gap-default) * 2); + padding-right: calc(var(--gap-default) * 2); + } + + .layout-single-column .navigation-panel { + margin-right: -20px; + /* stylelint-disable-next-line */ + padding-left: 0 !important; + padding-right: 20px; + } +} + +.layout-single-column .emoji-mart-anchor-bar, +.layout-single-column .column-link.column-link--logo svg { + display: none; +} + +/* Accented items like links */ +.layout-single-column .about__section__title, +.layout-single-column .account__header__bio .account__header__fields a, +.layout-single-column .column-back-button, +.layout-single-column .emoji-mart-anchor.emoji-mart-anchor-selected, +.layout-single-column .text-icon-button.active, +.layout-single-column .empty-column-indicator a, +.layout-single-column .follow_requests-unlocked_explanation a, +.layout-single-column .column-header__back-button, +.layout-single-column .link-button, +.layout-single-column .reply-indicator__content a.unhandled-link, +.layout-single-column .status__content a.unhandled-link, +.layout-single-column .column-header > .column-header__back-button, +.layout-single-column .reply-indicator__content a, +body.embed .status__content a, +.layout-single-column .status__content a, +.layout-single-column .column-link--transparent.active, +.layout-single-column .status__content__read-more-button { + color: var(--color-accent); +} + +/* Toggles */ +.layout-single-column .react-toggle .react-toggle-track { + background-color: var(--color-bg); +} + +/* Accented background colors */ +.layout-single-column .react-toggle--checked .react-toggle-track, +.layout-single-column .language-dropdown__dropdown__results__item.active, +.layout-single-column .icon-with-badge__badge, +.layout-single-column .button { + background-color: var(--color-accent-dark); +} + +.layout-single-column .block-modal__cancel-button, +.layout-single-column .confirmation-modal__cancel-button, +.layout-single-column .confirmation-modal__secondary-button, +.layout-single-column .mute-modal__cancel-button { + background-color: transparent; + color: var(--color-dim); + font-size: var(--font-size-mid); +} + +.layout-single-column .block-modal__cancel-button:focus, +.layout-single-column .confirmation-modal__cancel-button:focus, +.layout-single-column .confirmation-modal__secondary-button:focus, +.layout-single-column .mute-modal__cancel-button:focus, +.layout-single-column .block-modal__cancel-button:hover, +.layout-single-column .confirmation-modal__cancel-button:hover, +.layout-single-column .confirmation-modal__secondary-button:hover, +.layout-single-column .mute-modal__cancel-button:hover { + background-color: transparent; + color: var(--color-dark-electric-blue); +} + +.column-link--transparent .icon-with-badge__badge, +.layout-single-column .icon-with-badge__badge { + background-color: var(--color-accent-dark); + border-color: var(--color-bg); +} + +/* Accented strokes */ +.layout-single-column .trends__item__sparkline path:last-child { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + stroke: var(--color-accent) !important; +} + +/* Dropdown hovers */ +.layout-single-column .language-dropdown__dropdown__results__item:hover, +.layout-single-column .language-dropdown__dropdown__results__item:focus { + background-color: var(--color-accent-dark-50); + color: var(--color-light-text); +} + +/* Accented border colors */ +.layout-single-column .notification.unread::before, +.layout-single-column .status__wrapper.unread::before { + border-color: var(--color-accent); + display: none; +} + +/* Filtered post / Content warnings */ +body .status__wrapper.status__wrapper--filtered { + align-items: center; + background-color: var(--color-focusable-toot); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + color: var(--color-light-purple); + display: flex; + flex-wrap: nowrap; + font-size: var(--font-size-mid); + justify-content: space-between; + margin: var(--gap-default); + overflow: hidden; + padding: 4px 16px; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: calc(100% - calc(var(--gap-default) * 2)); +} + +body .columns-area__panels__pane--compositional .compose-form .spoiler-input__input, +body .content-warning { + background-color: var(--color-focusable-toot); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + color: var(--color-light-purple); + display: grid; + font-size: var(--font-size-mid); + grid-template-columns: minmax(0, 3fr) minmax(88px, 1fr); + padding: 10px 16px; + white-space: unset; +} + +body .compose-form__highlightable:has(.spoiler-input__input) { + border-top-left-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); +} + +body .compose-form:has(.spoiler-input__input) .spoiler-input .autosuggest-input { + border-bottom: 0; + border-radius: var(--border-radius); +} + +body .content-warning .link-button { + align-self: flex-start; + color: var(--color-fg); + font-size: var(--font-size-mid); + font-weight: var(--font-weight-semibold); + justify-self: flex-end; + text-align: right; + white-space: nowrap; +} + +/* New content warnings in 4.3.0.beta.1-mementomods-2024-08-23 */ +body .status:not(.status--in-thread) .content-warning { + margin-bottom: var(--gap-default); + margin-left: calc(var(--size-avatar) + var(--gap-default)); + margin-top: var(--gap-default); +} + +.notification-group__main__status:has(.content-warning) { + border: 0; + padding: 0; +} + +body .content-warning p { + margin-bottom: 0; +} + +body .spoiler-input__border, +body .content-warning::after, +body .content-warning::before { + display: none; +} + +.layout-single-column .notification:has(.status__wrapper--filtered) .notification__message { + display: none; +} + +/* Fix hover/focus on article that has filtered banner */ +.layout-single-column article:has(.status__wrapper--filtered):hover { + background-color: transparent; +} + +.layout-single-column .status__wrapper.status__wrapper--filtered button { + background-color: rgb(255 255 255 / 0); + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-fg); + font-weight: var(--font-weight-semibold); + margin-left: auto; + padding-bottom: 8px; + padding-left: 12px; + padding-right: 12px; + padding-top: 8px; + transition: 200ms background; + white-space: nowrap; +} + +.layout-single-column .status__wrapper.status__wrapper--filtered button:focus, +.layout-single-column .status__wrapper.status__wrapper--filtered button:hover { + background-color: rgb(255 255 255 / .1); + text-decoration: none; +} + +/* Fix load more icon dimensions */ +.load-more .icon { + height: 16px; + width: 20px; +} + +/* Unread message */ +.layout-single-column .notification-ungrouped--unread, +.layout-single-column .conversation--unread, +.layout-single-column .notification.unread:hover, +.layout-single-column .notification.unread, +.layout-single-column .status__wrapper.unread, +body .notification-group.notification-group--unread { + background-color: var(--color-dark); +} + +body .notification-group--unread::before, +body .notification-ungrouped--unread::before { + /* stylelint-disable-next-line */ + display: none; +} + +.layout-single-column .notification:hover .notification__message { + background-color: transparent; +} + +/* Things like notification status update text that should be dim */ +/* stylelint-disable-next-line selector-not-notation */ +.layout-single-column .notification .status-link.mention:not(.hashtag):not(.mention), +.layout-single-column .notification .status-link.hashtag, +.layout-single-column .notification .status-link.mention:not(.hashtag), +.layout-single-column .compose-form .autosuggest-textarea__textarea::placeholder, +.layout-single-column .compose-form .icon-button, +.layout-single-column .compose-form .spoiler-input__input::placeholder, +.layout-single-column .compose-form__poll-wrapper .button.button-secondary, +.layout-single-column .language-dropdown__dropdown__results__item__common-name, +.layout-single-column .report-dialog-modal__textarea::placeholder, +.layout-single-column .poll__link, +.layout-single-column .muted .poll, +.layout-single-column .status .status__relative-time, +.layout-single-column .status .status__visibility-icon, +.layout-single-column .block-modal__action-bar > div, +.layout-single-column .boost-modal__action-bar > div, +.layout-single-column .confirmation-modal__action-bar > div, +.layout-single-column .mute-modal__action-bar > div, +.layout-single-column .search-popout > h4, +.layout-single-column .search__popout > h4, +.layout-single-column .status-check-box__status .detailed-status__display-name, +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text, +.layout-single-column .status-card .status-card__description, +.layout-single-column .report-dialog-modal .dialog-option .poll__input, +.layout-single-column .dropdown-menu__container__header, +.layout-single-column .sign-in-banner p, +.layout-single-column .navigation-bar > a, +.layout-single-column .character-counter, +.layout-single-column .text-icon-button, +.layout-single-column .empty-column-indicator, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .poll__footer, +.layout-single-column .server-banner h4, +.layout-single-column .column-header__button, +.layout-single-column .search__icon .icon-times-circle, +.layout-single-column .timeline-hint, +.layout-single-column .status__display-name.muted, +.layout-single-column .setting-text-label, +.layout-single-column .account__header__bio .account__header__fields dt, +.layout-single-column .account__header__bio .account__header__fields dd, +.layout-single-column .link-footer p, +.layout-single-column .account__header__extra__links a, +.layout-single-column .trends__item__current, +.layout-single-column .emoji-mart-anchor, +.layout-single-column .emoji-mart, +.layout-single-column .emoji-mart-anchors, +.layout-single-column .reply-indicator .display-name *, +.layout-single-column .status__display-name, +.layout-single-column .status__prepend .status__display-name strong, +.layout-single-column .status__prepend, +.layout-single-column .compose-form .compose-form__modifiers, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .autosuggest-textarea__suggestions, +.layout-single-column .compose-form .autosuggest-account .display-name__account, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper, +.layout-single-column .account__section-headline a, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar a, +.layout-single-column .notification__filter-bar button, +.layout-single-column .attachment-list.compact .icon, +.layout-single-column .attachment-list__list a, +.layout-single-column .notification__message .icon-user-plus, +.layout-single-column .notification__message .icon-home, +.layout-single-column .notification__message .icon-retweet, +.layout-single-column .link-footer p a, +.layout-single-column .trends__item__name, +.layout-single-column .muted .status__content, +.layout-single-column .muted .status__content a, +.layout-single-column .muted .status__content p, +.layout-single-column .muted .status__display-name strong, +.layout-single-column .privacy-dropdown__option:not(.active) .privacy-dropdown__option__content { + color: var(--color-dim); +} + +/* Dim backgrounds */ +.layout-single-column .poll__chart { + background-color: var(--color-dim); +} + +/* Lighter border colors */ +.layout-single-column .report-dialog-modal .dialog-option .poll__input, +.layout-single-column .poll__input { + border-color: var(--color-brand-mastodon-text-light); +} + +/* Light grey things */ +.layout-single-column .navigation-bar, +.layout-single-column .navigation-bar strong { + color: var(--color-topaz); +} + +/* CW button */ +.layout-single-column .reply-indicator__content .status__content__spoiler-link, +.layout-single-column .status__content__spoiler-link { + background-color: var(--color-dark); + color: var(--color-light-purple); + font-weight: var(--font-weight-semibold); + + /* Need to override forced styles */ + /* stylelint-disable-next-line */ + margin-left: calc(var(--gap-default) / 2) !important; + vertical-align: baseline; +} + +.layout-single-column .reply-indicator__content .status__content__spoiler-link:focus, +.layout-single-column .reply-indicator__content .status__content__spoiler-link:hover, +.layout-single-column .status__content .status__content__spoiler-link:focus, +.layout-single-column .status__content .status__content__spoiler-link:hover { + background-color: var(--color-dark); + color: var(--color-lighter-purple); +} + +/* CW button in notifications */ +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link, +.layout-single-column .notification .status__content__spoiler-link { + background-color: var(--color-dark); + color: var(--color-dim); +} + +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link:focus, +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link:hover, +.layout-single-column .notification .status__content .status__content__spoiler-link:focus, +.layout-single-column .notification .status__content .status__content__spoiler-link:hover { + background-color: var(--color-dark); + color: var(--color-dim); +} + +/* Light purple things */ +.layout-single-column .announcements__pagination .icon-button:hover i, +.layout-single-column .server-banner__introduction, +.layout-single-column .account__header__tabs__name h1 small, +.layout-single-column .account .account__display-name, +.layout-single-column .column-settings__section, +.layout-single-column .setting-toggle__label, +.layout-single-column .server-banner__number-label { + color: var(--color-light-purple); +} + +/* White things */ +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .actions-modal ul li:not(:empty) a, +.layout-single-column .report-dialog-modal .status__content, +.layout-single-column .report-dialog-modal .status__content p, +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text strong, +.layout-single-column .report-dialog-modal__lead, +.layout-single-column .detailed-status__display-name strong, +.layout-single-column .dismissable-banner__message, +.layout-single-column .privacy-dropdown__option, +.layout-single-column .privacy-dropdown__option__content strong, +.layout-single-column .privacy-dropdown__option.active, +.layout-single-column .privacy-dropdown__option:hover .privacy-dropdown__option__content, +.layout-single-column .privacy-dropdown__option:focus .privacy-dropdown__option__content, +.layout-single-column .status__info .display-name strong.display-name__html, +.layout-single-column .reply-indicator .display-name strong.display-name__html, +.layout-single-column .notification__message, +.layout-single-column .getting-started__trends h4 a, +.layout-single-column .trends__item__name a, +.layout-single-column .emoji-mart-search input, +.layout-single-column .language-dropdown__dropdown__results__item, +.layout-single-column .reply-indicator__content, +.layout-single-column .compose-form .compose-form__modifiers:focus, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input:focus, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper:focus, +.layout-single-column .compose-form .compose-form__buttons-wrapper:focus, +.layout-single-column .autosuggest-textarea .autosuggest-textarea__textarea:focus, +.layout-single-column .account__section-headline a.active, +.layout-single-column .account__section-headline button.active, +.layout-single-column .notification__filter-bar a.active, +.layout-single-column .notification__filter-bar button.active { + color: var(--color-light-text); +} + +.layout-single-column .muted .status__info *, +.layout-single-column .muted .status__info .display-name * { + color: var(--color-light-text); +} + +/* Account names */ +.layout-single-column .status__info .display-name .display-name__account, +.layout-single-column .display-name__account { + color: var(--color-dim); +} + +/* Main panel column */ +.layout-single-column .columns-area__panels__main > div { + border-left: 1px solid var(--color-border); + border-right: 1px solid var(--color-border); +} + +/* Status header */ +.layout-single-column .status .status__info { + align-items: flex-start; + gap: var(--gap-default); + height: calc(var(--gap-default) * 2); + justify-content: flex-start; + margin-bottom: 0; + padding-bottom: 0; +} + +/* Status action bar */ +.layout-single-column .status__action-bar { + height: 27px; + margin-top: 12px; + max-height: 27px; +} + +/* Display name */ +.layout-single-column .status__info .status__display-name { + align-items: flex-start; + display: inline-flex; + gap: var(--gap-default); + order: 1; +} + +.layout-single-column .status__info .display-name { + display: flex; + gap: calc(var(--gap-default) / 2); +} + +/* The separator dot */ +.layout-single-column .status__info::before { + color: var(--color-dim); + content: "·"; + display: inline-block; + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + height: 20px; + margin-left: -6px; + margin-right: -10px; + order: 2; + position: relative; +} + +.layout-single-column .status__info .status__relative-time { + height: unset; + order: 3; +} + +/* Visibility icon */ +.layout-single-column .status .status__visibility-icon { + font-size: var(--font-size-mid); +} + +/* Panels and things that should be transparent */ +.layout-single-column .explore__search-results, +.layout-single-column .search-results__section__header, +.layout-single-column .status__wrapper-direct, +.layout-single-column .focusable:focus .detailed-status, +.layout-single-column .focusable:focus .detailed-status__action-bar, +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .poll__option input[type="text"], +.layout-single-column .language-dropdown__dropdown, +body.embed .activity-stream .entry, +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .drawer__inner, +.layout-single-column .column-inline-form, +.layout-single-column .scrollable .account-card, +.layout-single-column .scrollable .account-card__title__avatar .account__avatar, +.account__avatar, +.layout-single-column .scrollable .account-card__title__avatar img, +.layout-single-column .explore__search-header, +.layout-single-column .empty-column-indicator, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .column-link, +.layout-single-column .columns-area__panels__pane--navigational .navigation-panel, +.layout-single-column .tabs-bar__wrapper .column-back-button, +.layout-single-column .account__header, +.layout-single-column .column-header__back-button, +.layout-single-column .compose-form .compose-form__modifiers, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper, +.layout-single-column .column-header__button, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar button, +.layout-single-column .account__section-headline, +.layout-single-column .notification__filter-bar, +.layout-single-column .tabs-bar__wrapper, +.layout-single-column .column-header, +body.embed .detailed-status, +.layout-single-column .detailed-status, +.layout-single-column .detailed-status__action-bar, +.layout-single-column .column > .scrollable { + background-color: transparent; +} + +/* Avatar */ +.account__avatar[style="width: 46px; height: 46px;"], +.layout-single-column .status__avatar { + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + max-height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + max-width: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + min-height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + min-width: var(--size-avatar) !important; + + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + width: var(--size-avatar) !important; +} + +/* Avatars */ +body.embed .detailed-status__display-avatar > img, +.layout-single-column .account-card__title__avatar .account__avatar, +.layout-single-column .account-card__title__avatar img, +.layout-single-column .account__avatar > img, +.layout-single-column .column > .scrollable .status__avatar img { + background-color: var(--color-bg); + border: 0; + border-radius: 50%; + box-shadow: rgb(255 255 255 / 0.03) 0 0 2px inset; +} + +/* Things that should not have border */ +.layout-single-column .column-inline-form, +.layout-single-column .column > .scrollable, +.layout-single-column .error-column, +.layout-single-column .getting-started, +.layout-single-column .regeneration-indicator, +.layout-single-column .column-header { + border: 0; +} + +.layout-single-column .column-header__wrapper.active { + box-shadow: none; +} + +.layout-single-column .column-header__wrapper.active::before { + /* stylelint-disable-next-line */ + background: var(--active-header-radial-gradient); +} + +.layout-single-column .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form__buttons-wrapper { + border: 0; +} + +.layout-single-column article, +.layout-single-column .status__prepend, +.layout-single-column .notification__message, +.layout-single-column .status { + transition: all 200ms; +} + +/* Toot hover effect */ +.layout-single-column article:focus, +.layout-single-column article:hover { + background-color: var(--color-light-shade); +} + +/* Focusable toot and other hilighted items */ +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item.selected, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:active, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:focus, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:hover, +.layout-single-column .focusable:focus { + /* stylelint-disable-next-line */ + background: var(--color-focusable-toot); +} + +/* Search panel that opens when focusing Search or paste URL field */ +.layout-single-column .explore__search-header .search__popout, +.layout-single-column .compose-form__poll-wrapper option, +.layout-single-column .search__popout, +.layout-single-column .search-popout { + background-color: var(--color-dark); + border-color: var(--color-dark); + color: var(--color-dim); +} + +.layout-single-column .search__popout em, +.layout-single-column .search-popout em { + color: var(--color-light-text); +} + +/* Pill style tags */ +.layout-single-column .hashtag-bar a { + background-color: var(--color-dark); + border-radius: 9999px; + color: var(--color-light-purple); + display: inline-block; + font-size: var(--font-size-smaller); + font-weight: var(--font-weight-semibold); + line-height: 1.5; + margin: 0 4px 4px 0; + padding: 4px 8px; + text-decoration: none; +} + +.layout-single-column .hashtag-bar .link-button { + font-size: var(--font-size-smaller); +} + +.layout-single-column .hashtag-bar a:focus, +.layout-single-column .hashtag-bar a:hover { + background-color: var(--color-accent-dark); + /* It should be always light also on light mode, so not using variable here */ + color: #f7f9f9; +} + +.layout-single-column .hashtag-bar a:focus span, +.layout-single-column .hashtag-bar a:hover span { + text-decoration: none; +} + +/* Status update tinted to right */ +.layout-single-column .status:not(.status--in-thread) .hashtag-bar, +.layout-single-column .status__content--collapsed + .status__content__read-more-button, +.layout-single-column .status:not(.status--in-thread) .status__action-bar, +.layout-single-column .status:not(.status--in-thread) .attachment-list, +.layout-single-column .status:not(.status--in-thread) .status__content { + font-size: var(--font-size); + padding-left: calc(var(--size-avatar) + var(--gap-default)); + padding-top: 0; +} + +/* Translate link and other padding resets */ +.layout-single-column .conversation .attachment-list, +.layout-single-column .translate ~ .status__content__read-more-button { + padding-left: 0; +} + +/* Make sure read more/translate button is always aligned to center vertically and to left horizontally */ +.layout-single-column .status__content__read-more-button { + align-items: center; + display: flex; + justify-content: flex-start; + margin-inline-start: 0; +} + +/* Rtl version */ +[dir="rtl"] .layout-single-column .status__action-bar, +[dir="rtl"] .layout-single-column .attachment-list, +[dir="rtl"] .layout-single-column .status__content__read-more-button, +[dir="rtl"] .layout-single-column .status .status__content { + padding-left: 0; + padding-right: calc(var(--size-avatar) + var(--gap-default)); +} + +/* Reset padding from attachment-list on reply indicator */ +.layout-single-column .reply-indicator .attachment-list { + padding-left: 0; +} + +.layout-single-column .status__action-bar button, +.layout-single-column .detailed-status__action-bar button { + border-radius: 50%; +} + +.layout-single-column .detailed-status__action-bar .icon-button[disabled], +.layout-single-column .status__action-bar .icon-button[disabled] { + opacity: .5; + pointer-events: none; +} + +/* Grouped notification exceptions, pr30440 2024-07-11 */ +.layout-single-column .notification-ungrouped .status .hashtag-bar, +.layout-single-column .notification-ungrouped .status .status__content, +.layout-single-column .notification-ungrouped .status .status__action-bar { + padding-left: var(--gap-default); +} + +/* Fix spacing under quoted post in grouped notification */ +.notification-group .notification-group__embedded-status__content { + max-height: 100%; +} + +/* We don't need to show our own account when we know our own account is being mentioned */ +.notification-ungrouped.notification-ungrouped--mention .notification-ungrouped__header, +.notification-group .notification-group__embedded-status__account { + display: none; +} + +.layout-single-column .notification-ungrouped .notification-ungrouped__header { + padding-left: calc(24px + var(--gap-default)); +} + +/* Media inside status update tinted to right */ +.layout-single-column .status .audio-player, +.layout-single-column .status .video-player, +.layout-single-column .status .media-gallery { + margin-left: auto; + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + width: calc(100% - calc(var(--size-avatar) + var(--gap-default))) !important; +} + +/* Fix aspect-ratio for some videos in mastodon v4.1.5-nightly-2023-07-26 */ +.layout-single-column div[style*='aspect-ratio']:not([class]) { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + aspect-ratio: unset !important; +} + +/* Start: Experimental Threads-like media proportions, if the height is tall, show smaller media: https://mementomori.social/@rolle/111715197571142727 */ +body.embed .media-gallery__item.standalone img, +body.embed .video-player .media-gallery__preview, +.layout-single-column .media-gallery__item.standalone img, +.layout-single-column .video-player .media-gallery__preview { + object-fit: contain; +} + +body.embed .status .audio-player, +body.embed .status .media-gallery, +body.embed .status .video-player, +body.embed .audio-player, +body.embed .media-gallery, +body.embed .media-gallery__gifv, +body.embed .media-gallery__preview, +body.embed .video-player, +.layout-single-column .status .audio-player, +.layout-single-column .status .media-gallery, +.layout-single-column .status .video-player, +.layout-single-column .audio-player, +.layout-single-column .media-gallery, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview, +.layout-single-column .video-player { + margin-left: calc(var(--size-avatar) + var(--gap-default)); +} + +body.embed [data-component="Video"] > div { + /* stylelint-disable-next-line */ + aspect-ratio: unset !important; +} + +body.embed .spoiler-button + .media-gallery__item > .media-gallery__preview, +.layout-single-column .spoiler-button + .media-gallery__item > .media-gallery__preview { + /* stylelint-disable-next-line */ + margin-left: unset !important; + /* stylelint-disable-next-line */ + max-height: unset !important; + /* stylelint-disable-next-line */ + width: 100% !important; +} + +body.embed .media-gallery__gifv, +body.embed .detailed-status .audio-player, +body.embed .detailed-status .media-gallery, +body.embed .detailed-status .media-gallery__gifv, +body.embed .detailed-status .media-gallery__preview, +body.embed .detailed-status .video-player, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview, +.layout-single-column .detailed-status .audio-player, +.layout-single-column .detailed-status .media-gallery, +.layout-single-column .detailed-status .media-gallery__gifv, +.layout-single-column .detailed-status .media-gallery__preview, +.layout-single-column .detailed-status .video-player { + margin-left: 0; +} + +.layout-single-column .media-gallery__preview { + /* stylelint-disable-next-line */ + margin-left: 0 !important; + /* stylelint-disable-next-line */ + width: 100% !important; +} + +.layout-single-column .media-gallery__item { + outline: 0; +} + +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(odd), +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(odd) > a, +.layout-single-column .media-gallery__preview:nth-of-type(odd) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(even), +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(even) > a, +.layout-single-column .media-gallery__preview:nth-of-type(even) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +/* End: Experimental Threads-like media proportions, if the height is tall, show smaller media */ +.layout-single-column .status .status-card + .more-from-author, +.layout-single-column .status .status-card { + margin-left: calc(var(--size-avatar) + var(--gap-default)); +} + +.layout-single-column .media-gallery.media-gallery__item--tall, +.layout-single-column .media-gallery.media-gallery--layout-1, +.layout-single-column .media-gallery.media-gallery--layout-2, +.layout-single-column .media-gallery.media-gallery--layout-3, +.layout-single-column .media-gallery.media-gallery--layout-4, +.layout-single-column .media-gallery__preview, +.layout-single-column .video-player { + max-height: 430px; + /* stylelint-disable-next-line */ + width: unset !important; +} + +.layout-single-column .media-gallery:has(.spoiler-button) .media-gallery__preview { + /* stylelint-disable-next-line */ + width: 100% !important; +} + +/* Detailed status update */ +.layout-single-column .detailed-status .status__content { + font-size: var(--font-size-bigger); + line-height: 1.4; +} + +/* Embeds */ +body.embed .detailed-status__link { + margin-left: 4px; + top: 0; +} + +/* stylelint-disable-next-line */ +body.embed #mastodon-status { + overflow: hidden; +} + +body.embed .detailed-status__meta, +.layout-single-column .detailed-status__meta { + color: var(--color-dim); + font-size: var(--font-size); +} + +body.embed .detailed-status__meta { + line-height: 1.5; +} + +body.embed .detailed-status__reblogs, +body.embed .detailed-status__favorites, +.layout-single-column .detailed-status__favorites, +.layout-single-column .detailed-status__reblogs { + display: inline-flex; + font-size: var(--font-size); + gap: 4px; +} + +body.embed .detailed-status__meta .animated-number, +.layout-single-column .detailed-status__meta .animated-number { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +body.embed .detailed-status__reblogs, +.layout-single-column .detailed-status__reblogs { + font-size: var(--font-size); +} + +body.embed .detailed-status__reblogs, +body.embed .detailed-status__favorites { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +body.embed .activity-stream .entry { + background-color: var(--color-bg); +} + +body.embed > .activity-stream { + backface-visibility: hidden; + /* stylelint-disable-next-line */ + background: #313543 !important; + border: 1px solid var(--color-border); + border-radius: 10px; + overflow: hidden; +} + +/* Fix alignment */ +.layout-single-column .detailed-status__link { + top: 0; +} + +/* Profile lock icon alignment fix */ +.layout-single-column .account__header__tabs__name h1 small { + display: flex; + gap: 4px; + margin-top: 4px; +} + +/* Textual labels for detailed metrics */ +body.embed .detailed-status__link > .fa-reply + span::after, +.layout-single-column .detailed-status__link > .icon-reply + span::after { + color: var(--color-dim); + content: 'Replies'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__link > .fa-retweet + span::after, +.layout-single-column .detailed-status__link > .icon-retweet + span::after { + color: var(--color-dim); + content: 'Boosts'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__link > .fa-star + span::after, +.layout-single-column .detailed-status__link > .icon-star + span::after { + color: var(--color-dim); + content: 'Favourites'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__meta .detailed-status__link .fa-reply, +body.embed .detailed-status__meta .detailed-status__link .fa-star, +body.embed .detailed-status__meta .detailed-status__link .fa-retweet, +.layout-single-column .detailed-status__meta .detailed-status__link .icon-star, +.layout-single-column .detailed-status__meta .detailed-status__link .icon-retweet { + display: none; +} + +/* Icon buttons */ +.layout-single-column .icon-button { + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-dim); +} + +/* Hide/Show media button */ +.layout-single-column .spoiler-button.spoiler-button--minified > button { + background-color: var(--color-bg); + border-radius: var(--border-radius-badges); + color: var(--color-ghost-button-text); + opacity: .5; +} + +/* Alt badge */ +.layout-single-column .media-gallery__item__badges > span { + border-radius: var(--border-radius-badges); +} + +/* Distance from the edge */ +.layout-single-column .spoiler-button--minified { + inset-inline-start: var(--badges-distance-from-edge); + top: var(--badges-distance-from-edge); +} + +.layout-single-column .media-gallery__item__badges { + bottom: var(--badges-distance-from-edge); + inset-inline-start: var(--badges-distance-from-edge); +} + +.layout-single-column .spoiler-button.spoiler-button--minified > button:hover, +.layout-single-column .spoiler-button.spoiler-button--minified > button:focus { + opacity: 1; +} + +.layout-single-column .icon-button:hover { + color: var(--color-accent); +} + +/* Other general buttons */ +.layout-single-column .column-header__button.active:active, +.column-header__button.active:focus, +.layout-single-column .column-header__button.active:hover { + background-color: var(--color-focusable-toot); + color: var(--color-fg); +} + +/* Bars on panels */ +.layout-single-column .ui__header, +.layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, +.layout-single-column .tabs-bar__wrapper { + backdrop-filter: blur(12px); + background-color: var(--color-bg-75); + border-color: var(--color-border); + padding: 0; +} + +/* Fix Create account button not clickable on mobile */ +.ui__header:has(.button[href="/auth/sign_up"]) { + z-index: 4; +} + +@media (min-width: 1175px) { + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + margin-right: -2px; + } +} + +/* Hidden things */ +/* stylelint-disable-next-line */ +.layout-single-column .column-header .column-header__icon:not(.icon-user-plus):not(.icon-user-times) { + display: none; +} + +/* Column headers */ +.layout-single-column .column-header { + font-size: var(--font-size-heading); + font-weight: var(--font-weight-bold); +} + +/* Column sub-headers */ +.layout-single-column .column-subheading { + background-color: transparent; + color: var(--color-fg); + font-size: var(--font-size-bigger); + font-weight: var(--font-weight-bold); + text-transform: unset; +} + +/* "Your lists" view */ +.layout-single-column .column-subheading ~ article { + padding-left: var(--gap-default); + padding-right: var(--gap-default); +} + +/* Notifications */ +.layout-single-column .notification-group, +.layout-single-column .notification__message { + display: grid; + gap: var(--gap-default); + grid-template-columns: minmax(0, var(--size-avatar)) minmax(0, 1fr); +} + +.layout-single-column .notification__message { + height: calc(var(--gap-default) * 2); +} + +/* Make sure notification user is clickable */ +.layout-single-column .notification__display-name { + position: relative; + z-index: 99; +} + +/* Hack to display notification message title on one line */ +.layout-single-column .notification__message > span { + display: block; + margin-top: calc(var(--size-avatar-small) + 6px); + overflow: visible; +} + +.layout-single-column .notification__message > span > span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Truncate too long unfollow buttons and texts beside it so they don't overlap in notifications */ +@media (max-width: 600px) { + .layout-single-column .notification .account__relationship > .button, + .layout-single-column .notification__report__actions .button { + max-width: 24vw; + } + + .layout-single-column .notification__message > span > span { + max-width: 50vw; + } +} + +.layout-single-column .notification__message > div { + display: flex; + justify-content: flex-end; +} + +.layout-single-column .muted .status__avatar { + opacity: 1; +} + +.layout-single-column .notification .account__avatar-overlay-base { + display: none; +} + +.layout-single-column .notification .account__avatar, +.layout-single-column .notification .account__avatar-overlay-overlay .account__avatar, +.layout-single-column .notification .account__avatar-overlay-overlay { + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + height: var(--size-avatar-small) !important; + /* stylelint-disable-next-line */ + min-height: var(--size-avatar-small) !important; + /* stylelint-disable-next-line */ + min-width: var(--size-avatar-small) !important; + position: absolute; + /* stylelint-disable-next-line */ + width: var(--size-avatar-small) !important; +} + +.layout-single-column .notification .status__info .status__display-name { + overflow: visible; +} + +/* Fixes: User avatars in notifications are sometimes links to my profile instead of theirs #25 */ +.layout-single-column .notification.notification-reblog .status__info .status__display-name, +.layout-single-column .notification.notification-follow .status__info .status__display-name, +.layout-single-column .notification-group--favourite .status__info .status__display-name, +.layout-single-column .notification.notification-favourite .status__info .status__display-name { + pointer-events: none; +} + +/* Hack to show follow notification more minimal way */ +.layout-single-column .notification.notification-admin-report .notification__report, +.layout-single-column .notification.notification-admin-sign-up .account__wrapper, +.layout-single-column .notification.notification-update .account__wrapper, +.layout-single-column .notification.notification-follow .account__wrapper { + position: relative; +} + +.layout-single-column .notification.notification-admin-report .account__avatar-overlay-overlay { + top: calc(-1 * calc(var(--size-avatar-small) + var(--gap-default) + 4px)); +} + +/* Hack to show follow notification more minimal way */ +.layout-single-column .notification.notification-poll .display-name, +.layout-single-column .notification.notification-update .display-name__html, +.layout-single-column .notification.notification-update .display-name__account, +.layout-single-column .notification.notification-admin-sign-up .display-name__html, +.layout-single-column .notification.notification-admin-sign-up .display-name, +.layout-single-column .notification.notification-follow .display-name__html { + visibility: hidden; +} + +.layout-single-column .notification.notification-update .account__avatar-wrapper, +.layout-single-column .notification.notification-admin-sign-up .account__avatar-wrapper, +.layout-single-column .notification.notification-follow .account__avatar-wrapper, +.layout-single-column .notification .account__avatar-overlay { + left: calc(var(--size-avatar-small) + var(--gap-default) + 18px); + margin-top: calc(-1 * calc(var(--size-avatar-small) + var(--gap-default))); + position: absolute; + top: 4px; +} + +.layout-single-column .notification.notification-admin-report .account__avatar-overlay { + margin-top: 0; + top: 0; +} + +.layout-single-column .notification.notification-status .notification__message > span { + display: none; +} + +.layout-single-column .notification.notification-follow .verified-badge, +.layout-single-column .notification.notification-admin-sign-up .account__contents, +.layout-single-column .notification.notification-follow .account__contents, +.layout-single-column .notification.notification-follow .display-name, +.layout-single-column .notification.notification-admin-sign-up .display-name + span, +.layout-single-column .notification.notification-follow .display-name + span, +.layout-single-column .notification-group--favourite .status__wrapper-direct .status__prepend, +.layout-single-column .notification.notification-favourite .status__wrapper-direct .status__prepend, +.layout-single-column .notification.notification-reblog .display-name, +.layout-single-column .notification-group--favourite .display-name, +.layout-single-column .notification.notification-favourite .display-name { + display: none; +} + +/* Minimal boost notification fix */ +.layout-single-column .notification.notification-reblog .notification__message > span { + margin-top: calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)); +} + +/* Minimal follow notification fix */ +.layout-single-column .notification.notification-follow .notification__message > span { + margin-top: calc(calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)) + 6px); +} + +.layout-single-column .notification.notification.notification-admin-sign-up .account__relationship, +.layout-single-column .notification.notification-follow .account__relationship { + transform: translateY(-8px); +} + +/* stylelint-disable-next-line */ +.layout-single-column .notification.notification-follow .account__avatar-wrapper { + top: 6px; +} + +/* Minimal fav notification fix */ +.layout-single-column .notification.notification-favourite .notification__message > span { + margin-top: calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)); +} + +/* If a status content is empty and there's only attachment, remove gap */ +.layout-single-column .notification .status__content:has(.status__content__text:empty) + .attachment-list { + margin-top: 0; +} + +/* Less space before attachments if no status content */ +.layout-single-column .status .status__content:has(.status__content__text:empty) + .audio-player, +.layout-single-column .status .status__content:has(.status__content__text:empty) + .video-player, +.layout-single-column .status .status__content:has(.status__content__text:empty) + .media-gallery, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .audio-player, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .video-player, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .media-gallery:not(.compose-form__uploads) { + margin-top: calc(var(--gap-default) / 2); +} + +.layout-single-column .status__prepend { + padding-left: calc(var(--size-avatar) - 4px); +} + +.layout-single-column .notification.notification-update .account__display-name, +.layout-single-column .notification.notification-follow .account__display-name { + display: inline-flex; + gap: var(--gap-default); + padding-left: calc(var(--size-avatar) + var(--gap-default)); +} + +/* Admin reports and other admin notifications */ +.layout-single-column .notification-admin-report .notification__report { + border-color: var(--color-border); + display: flex; + font-size: var(--font-size); + gap: 16px; + margin-top: 22px; + padding: 16px; + padding-left: calc(var(--size-avatar) + var(--gap-default)); +} + +.layout-single-column .notification-admin-report .notification__report__details { + color: var(--color-dim); + font-size: var(--font-size); +} + +.layout-single-column .notification-admin-report .notification__report__details strong { + font-weight: var(--font-weight-regular); +} + +/* Revert hack for notification admin message that has no avatar visible */ +.layout-single-column .notification-admin-report .notification__message > span { + display: block; + margin-top: calc(var(--size-avatar-small) + 4px); + overflow: visible; +} + +/* Hide things in notifications */ +.layout-single-column .notification .status__relative-time, +.layout-single-column .notification .status__info::before { + display: none; +} + +/* Right side panel */ +.layout-single-column .navigation-panel { + box-sizing: border-box; + display: flex; + flex-wrap: nowrap; + margin-top: 0; + overflow-y: auto; + padding: 10px; +} + +.layout-single-column .navigation-panel hr { + /* Hide but reserve space */ + visibility: hidden; +} + +.layout-single-column .navigation-panel__logo hr { + margin: 0; +} + +/* Attempt to hide scrollbars for .navigation-panel for Firefox */ +.dropdown-menu__container__list--scrollable, +.layout-single-column .navigation-panel { + scrollbar-width: none; +} + +/* Hide scrollbars for .navigation-panel for Chrome and Safari */ +.dropdown-menu__container__list--scrollable::-webkit-scrollbar, +.layout-single-column .navigation-panel__menu::-webkit-scrollbar, +.layout-single-column .navigation-panel::-webkit-scrollbar { + display: none; + width: 4px; +} + +.layout-single-column .column-link { + align-items: center; + color: var(--color-light-text); + font-size: var(--font-size-heading); + gap: var(--gap-column-link); + overflow: visible; + padding-bottom: calc(var(--gap-column-link) + 4px); + padding-left: var(--gap-column-link); + padding-right: calc(var(--gap-column-link) * 1.5); + padding-top: calc(var(--gap-column-link) + 4px); + transition: all 100ms; + width: 100%; +} + +[dir="rtl"] .layout-single-column .column-link { + margin-left: auto; + margin-right: 0; +} + +.layout-single-column .column-link > i { + min-width: 1.3em; +} + +.layout-single-column .column-link > span { + position: relative; +} + +.layout-single-column .column-link > span::before { + background-color: var(--color-column-link-hover); + border-radius: 32px; + bottom: calc(2px - var(--gap-column-link) * 1.5); + content: ""; + inset-inline-end: calc(0px - (var(--gap-column-link) * 2)); + inset-inline-start: calc(-1.28571429em - (var(--gap-column-link) * 2)); + opacity: 0; + position: absolute; + top: calc(-4px - var(--gap-column-link)); + transition: opacity 200ms; +} + +/* Accessibility outlines for keyboard navigation */ +.layout-single-column .column-link:focus-visible { + border-color: transparent; + outline: 0; +} + +.layout-single-column .column-link:focus-visible > span::before { + outline: 3px solid var(--color-accent); +} + +.layout-single-column .column-link:focus-visible > span::before, +.layout-single-column .column-link:hover > span::before { + opacity: 1; +} + +.layout-single-column .account__section-headline a { + transition: all 200ms; +} + +.layout-single-column .dropdown-menu__item a:hover, +.layout-single-column .notification__filter-bar button:hover, +.layout-single-column .account__section-headline a:hover { + background-color: var(--color-column-link-hover); +} + +/* Mobile devices */ +@media (hover: none) { + .layout-single-column .notification__filter-bar button.active:hover, + .layout-single-column .account__section-headline a.active:hover { + background-color: transparent; + } +} + +/* Notification filter bar */ +.layout-single-column .notification__filter-bar { + border-bottom: 1px solid var(--color-border); + border-left: 0; + border-right: 0; +} + +.layout-single-column .column-link__icon { + margin: 0; +} + +/* Notification badge on side panel */ +.layout-single-column .icon-with-badge__badge { + align-items: center; + border-radius: 1em; + box-sizing: border-box; + display: flex; + font-size: 11px; + height: 1.7em; + justify-content: center; + left: 12px; + line-height: 1; + min-width: max-content; + padding: 0 0.4em; + top: -7px; + width: 1.7em; +} + +.layout-single-column .column-link--transparent.active { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +/* Top panel */ +.layout-single-column .account__section-headline a.active::after, +.layout-single-column .account__section-headline button.active::after, +.layout-single-column .notification__filter-bar a.active::after, +.layout-single-column .notification__filter-bar button.active::after { + background-color: var(--color-accent); + border: 0; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + bottom: -1px; + content: ""; + display: block; + height: 4px; + left: 50%; + min-width: 56px; + position: absolute; + transform: translateX(-50%); +} + +/* Notification icons */ +.layout-single-column .account__section-headline a.active::before, +.layout-single-column .account__section-headline button.active::before, +.layout-single-column .notification__filter-bar a.active::before, +.layout-single-column .notification__filter-bar button.active::before { + display: none; +} + +.layout-single-column .notification.notification-reblog .status__action-bar, +.layout-single-column .notification-group--favourite .status__action-bar, +.layout-single-column .notification.notification-favourite .status__action-bar { + display: none; +} + +.layout-single-column .status__prepend .icon-retweet { + background-image: var(--icon-boost-status-prepend); +} + +.layout-single-column .notification-group .notification-group__icon .icon, +.layout-single-column .notification .notification__message .icon { + align-self: start; + height: 27px; + justify-self: end; + margin-right: 4px; + max-width: 30px; + width: 27px; +} + +.layout-single-column .notification-group .notification-group__icon .icon { + margin-right: 0; +} + +.layout-single-column .notification-group .notification-group__icon { + justify-self: end; + margin-right: 4px; +} + +.layout-single-column .notification-group .notification-group__icon .icon-repeat, +.layout-single-column .notification .notification__message .icon.icon-retweet { + color: var(--color-green); + height: 24px; + width: 24px; +} + +.layout-single-column .notification-group .icon-person-add, +.layout-single-column .notification .icon.icon-user-plus:not(.icon-link) { + color: var(--color-accent-dark); +} + +.layout-single-column .account__relationship .icon.icon-user-plus:not(.icon-link), +.layout-single-column .notification .account__relationship .icon.icon-user-plus:not(.icon-link) { + color: var(--color-dim); +} + +.layout-single-column .notification .icon.icon-flag, +.layout-single-column .notification .icon.icon-tasks:not(.icon-link) { + color: var(--color-accent-dark); +} + +.layout-single-column .notification .icon.icon-home:not(.icon-link) { + color: var(--color-accent-dark); + height: 24px; + width: 24px; +} + +/* Follow/unfollow button */ +.layout-single-column .account__relationship .icon-button, +.layout-single-column .notification .account__relationship .icon-button { + background-color: transparent; +} + +.layout-single-column .notification .account__relationship .icon { + /* stylelint-disable-next-line */ + color: var(--color-dim); + font-size: 20px; +} + +.layout-single-column .list-adder__lists .icon-times::before, +.layout-single-column .account__wrapper .account__relationship .icon-button.active .icon, +.layout-single-column .explore__search-results .account__relationship .icon-button.active .icon, +.layout-single-column .notification .account__relationship .icon-button.active .icon { + /* stylelint-disable-next-line */ + color: var(--color-green); + opacity: .75; +} + +.layout-single-column .list-adder__lists .icon-times:hover::before, +.layout-single-column .explore__search-results .icon-button.active:hover .icon, +.layout-single-column .notification .account__relationship .icon-button.active:hover .icon { + /* stylelint-disable-next-line */ + color: var(--color-red); + opacity: 1; +} + +.layout-single-column .explore__search-results .icon-button:focus .icon, +.layout-single-column .notification .account__relationship .icon-button:focus .icon, +.layout-single-column .explore__search-results .icon-button.active:focus .icon, +.layout-single-column .notification .account__relationship .icon-button.active:focus .icon, +.layout-single-column .explore__search-results .icon-button:hover .icon, +.layout-single-column .notification .account__relationship .icon-button:hover .icon { + /* stylelint-disable-next-line */ + color: var(--color-green); + opacity: 1; +} + +.layout-single-column .notification .account__relationship { + border-radius: 50%; + height: 24px; + transform: translateY(-4px); +} + +/* Emoji-mart search input */ +.layout-single-column .emoji-mart-search-icon svg { + fill: var(--color-border); + opacity: 1; +} + +.layout-single-column .emoji-mart-search > input:focus-visible ~ .emoji-mart-search-icon svg { + fill: var(--color-accent); +} + +.layout-single-column .emoji-mart-search > input { + font-size: var(--font-size-smaller); +} + +.layout-single-column .compose-form__autosuggest-wrapper textarea::placeholder, +.layout-single-column .report-dialog-modal__textarea::placeholder, +.layout-single-column .emoji-mart-search > input::placeholder { + color: var(--color-dim); + opacity: 1; +} + +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .report-dialog-modal__textarea:focus, +.layout-single-column .emoji-mart-search > input:focus { + color: var(--color-light-text); +} + +.layout-single-column .emoji-mart-search-icon:disabled { + opacity: 1; +} + +/* Search */ +.layout-single-column .search .search__icon .icon-search { + background-image: var(--icon-search); + background-position: center; + background-repeat: no-repeat; + background-size: 20px; + display: inline-block; + height: 24px; + width: 24px; +} + +.layout-single-column .search .search__icon .icon { + inset-inline-start: unset; + position: absolute; + right: 14px; + top: 9px; +} + +.layout-single-column .search .search__icon .icon-search path { + display: none; +} + +.layout-single-column .search.active .search__input, +.layout-single-column input.setting-text, +.layout-single-column .search__input { + background-color: var(--color-mud); + border-color: var(--color-mud); + border-radius: 32px; + color: var(--color-dim); + font-size: var(--font-size); + height: 42px; + padding: 0 20px; +} + +/* Input texts */ +.layout-single-column .search.active .search__input, +.layout-single-column .poll__option input[type="text"], +.layout-single-column input.setting-text:focus, +.layout-single-column .search__input:focus { + color: var(--color-light-text); +} + +/* Poll input */ +.layout-single-column .poll__option input[type="text"] { + background-color: transparent; + border-color: var(--color-border); +} + +.layout-single-column .poll__option input[type="text"]:focus { + border-color: var(--color-accent); +} + +/* Placeholders */ +.layout-single-column .poll__option input[type="text"]::placeholder, +.layout-single-column .search__input::placeholder, +.layout-single-column input::placeholder, +.layout-single-column input.setting-text::placeholder { + color: var(--color-dim); + opacity: 1; +} + +/* Profile */ +.layout-single-column .getting-started__trends h4, +.layout-single-column .account__header__bar { + border-color: var(--color-border); +} + +.layout-single-column .account__header__bio .account__header__fields { + background-color: transparent; + border: 0; + color: var(--color-dim); + display: flex; + flex-wrap: wrap; + gap: var(--gap-default); + padding: 0; +} + +/* New popout styles */ +.layout-single-column .account__domain-pill__popout { + border: 1px solid var(--color-mud); + color: var(--color-light-purple); +} + +.layout-single-column .account__domain-pill__popout__parts > div:nth-child(2) svg { + background-image: var(--icon-globe-purple); + background-size: 24px; +} + +.layout-single-column .account__domain-pill__popout__handle { + background-color: var(--color-dark); + border: 0; + color: var(--color-accent); + padding: 12px 10px; +} + +/* Hide unnecessary header icon for minimalism */ +.layout-single-column .account__domain-pill__popout__header__icon { + display: none; +} + +.account__domain-pill__popout > p { + font-size: var(--font-size-smaller); + line-height: 1.3; +} + +/* Truncate too long links in the profile, like Nostr */ +.layout-single-column .account__header__bio .account__header__fields span > a:only-of-type { + display: block; + max-width: 220px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.layout-single-column .account__header__bio .account__header__fields dl::after { + content: '|'; + order: 2; +} + +/* Recognize empty field and remove pipe */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dd > span:empty)::after { + display: none; +} + +.layout-single-column .account__header__bio .account__header__fields dt { + order: 1; +} + +.layout-single-column .account__header__bio .account__header__fields dd { + order: 3; +} + +/* Hide the character in between Joined label */ +.layout-single-column .account__header__bio .account__header__fields dl:first-of-type::before, +.layout-single-column .account__header__bio .account__header__fields dl:first-of-type::after { + display: none; +} + +/* Make full width... */ +/* stylelint-disable no-duplicate-selectors */ +.layout-single-column .account__header__bio .account__header__fields dl { + width: 100%; +} +/* stylelint-enable no-duplicate-selectors */ + +/* ...except on those that have label with GitHub, github, YouTube or similar */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="website" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i], dt[title*="bandcamp" i]) { + max-width: 50%; + order: 9999; + width: auto; +} + +/* Hide labels that show "Website", "YouTube", etc. */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="website" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="bandcamp" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i]) dt { + display: none; +} + +/* Hide pipe after link icon and the link icon from the ones that already have an icon */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="website" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="bandcamp" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i])::before { + display: none; +} + +/* If GitHub etc. move even further from links */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title="bandcamp"], dt[title="facebook"], dt[title="friendica"], dt[title="pronouns"], dt[title="wordpress"], dt[title="fb"]) { + order: 99999; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i])::after { + content: var(--icon-github); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="discord" i])::after { + content: var(--icon-discord); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="linkedin" i])::after { + content: var(--icon-linkedin); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="IG"], dt[title*="instagram" i])::after { + content: var(--icon-instagram); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="youtube" i])::after { + content: var(--icon-youtube); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="twitch" i])::after { + content: var(--icon-twitch); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="x" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="twitter" i])::after { + content: var(--icon-twitter); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="patreon" i])::after { + content: var(--icon-patreon); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="paypal" i])::after { + content: var(--icon-paypal); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="kofi" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="ko-fi" i])::after { + content: var(--icon-kofi); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="bandcamp" i])::after { + content: var(--icon-bandcamp); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="facebook" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="fb" i])::after { + content: var(--icon-facebook); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="friendica" i])::after { + content: var(--icon-friendica); + height: 18.5px; + transform: scale(.9); + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="pronouns" i])::after { + content: var(--icon-genderless-pronouns); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="wordpress" i])::after { + content: var(--icon-wordpress); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="masto" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="mastodon" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="Alt account" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title~="account" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title~="Mastodon account" i])::after { + content: var(--icon-mastodon); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="threads" i])::after { + content: var(--icon-threads); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="bluesky" i])::after { + content: var(--icon-bluesky); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="nostr" i])::after { + content: var(--icon-nostr); + height: 18.5px; + width: 18.5px; +} + +/* Default link icon */ +.layout-single-column .account__header__bio .account__header__fields dl::before { + content: var(--icon-link); + height: 18.5px; + width: 18.5px; +} + +/* If the profile item has no link element, show just label icon */ +.layout-single-column .account__header__bio .account__header__fields dl:not(:has(a))::before { + content: var(--icon-label); + height: 18.5px; + width: 18.5px; +} + +/* Verified colors for Firefox before :has */ +.layout-single-column .account__details .verified-badge a, +.layout-single-column .account__header__bar .account__header__fields .verified__mark, +.layout-single-column .account__header__bar .account__header__fields .verified a, +.layout-single-column .account__header__bar .account__header__bio .account__header__fields .verified a, +.layout-single-column .account__header__bar .account__header__bio .account__header__fields .verified dd { + color: var(--color-verified); + font-weight: var(--font-weight-regular); +} + +/* Reset verified colors */ +.layout-single-column .account__details .verified-badge a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__bio .account__header__fields .verified a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__bio .account__header__fields .verified dd { + color: var(--color-accent); + font-weight: var(--font-weight-regular); +} + +/* Replace verified__mark */ +.layout-single-column .account__details .verified-badge .verified-badge__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark { + background-image: var(--icon-verified-smaller); + background-repeat: no-repeat; + height: 15px; + width: 15px; +} + +.layout-single-column .account__details .verified-badge .verified-badge__mark path, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark path { + display: none; +} + +.layout-single-column .account__details .verified-badge, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd { + align-items: center; + display: inline-flex; + gap: 4px; +} + +.layout-single-column .account__details .verified-badge .verified-badge__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd span:nth-child(1) { + align-items: center; + display: flex; + order: 2; +} + +.layout-single-column .account__details .verified-badge > span, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd span:nth-child(2) { + order: 1; +} + +/* Joined label */ +.layout-single-column .account__header__bio .account__header__fields dt:not([title]) { + display: inline-flex; + font-weight: var(--font-weight-regular); + gap: calc(var(--gap-default) / 2); + text-transform: unset; +} + +.layout-single-column h4, +.layout-single-column .search__popout h4, +.layout-single-column .search-popout h4, +.layout-single-column .server-banner h4 { + text-transform: unset; +} + +.layout-single-column .account__header__bio .account__header__fields dt:not([title])::before { + content: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" fill="%23717c9b" class="r-115tad6 r-4qtqp9 r-yyyyoo r-1xvli5t r-1d4mawv r-dnmrzs r-bnwqim r-1plcrui r-lrvibr"%3E%3Cg%3E%3Cpath d="M7 4V3h2v1h6V3h2v1h1.5C19.89 4 21 5.12 21 6.5v12c0 1.38-1.11 2.5-2.5 2.5h-13C4.12 21 3 19.88 3 18.5v-12C3 5.12 4.12 4 5.5 4H7zm0 2H5.5c-.27 0-.5.22-.5.5v12c0 .28.23.5.5.5h13c.28 0 .5-.22.5-.5v-12c0-.28-.22-.5-.5-.5H17v1h-2V6H9v1H7V6zm0 6h2v-2H7v2zm0 4h2v-2H7v2zm4-4h2v-2h-2v2zm0 4h2v-2h-2v2zm4-4h2v-2h-2v2z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dd, +.layout-single-column .account__header__bio .account__header__fields dt { + color: var(--color-dim); + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + text-transform: unset; +} + +/* stylelint-disable no-duplicate-selectors */ +.layout-single-column .account__header__bio .account__header__fields dl { + background-color: transparent; + border: 0; + color: var(--color-dim); + display: inline-flex; + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + gap: calc(var(--gap-default) / 2); + padding: 0; +} + +/* stylelint-enable no-duplicate-selectors */ +.layout-single-column .getting-started__trends h4 { + border: 0; + font-size: var(--font-size-heading); + font-weight: var(--font-weight-bold); + line-height: 24px; + margin-bottom: var(--gap-default); + text-transform: unset; +} + +.layout-single-column .getting-started__trends { + margin-top: calc(var(--gap-default) * 2); +} + +.layout-single-column .trends__item__name a { + font-size: var(--font-size); +} + +.layout-single-column .trends__item__name { + display: grid; + gap: 4px; +} + +.layout-single-column .account__header__image { + height: 200px; +} + +.layout-single-column .account__header__bar .avatar .account__avatar { + background-color: transparent; + border: 0; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 133.5px !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 133.5px !important; +} + +.layout-single-column .account__header__tabs { + overflow: visible; +} + +.layout-single-column .account__header__tabs .account-role { + display: none; + width: 133.5px; +} + +/* Follow/unfollow button */ +body.embed .button.logo-button, +.layout-single-column .notification__report__actions .button, +.layout-single-column .column-inline-form button, +.layout-single-column .explore__suggestions .account-card__actions__button button, +.layout-single-column .account__header__tabs__buttons .button, +.layout-single-column .account .account__relationship > .button, +.layout-single-column .notification .account__relationship > .button { + background-color: transparent; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-light-text); + font-size: var(--font-size); + max-width: 36vw; + overflow: hidden; + padding-left: 16px; + padding-right: 16px; + text-overflow: ellipsis; + transition: all 200ms; + white-space: nowrap; +} + +/* Dark button borders and other things that have borders all around */ +body.embed .button.logo-button, +.layout-single-column .notification__report__actions .button, +.layout-single-column .column-inline-form button, +.layout-single-column .explore__suggestions .account-card__actions__button button, +.layout-single-column .account__header__tabs__buttons .button, +.layout-single-column .account__header__tabs__buttons .icon-button, +.layout-single-column .notification .account__relationship > .button, +.layout-single-column .account .account__relationship > .button { + border: 1px solid var(--color-outer-space); +} + +.layout-single-column .account__header__tabs__buttons .icon-button { + color: var(--color-light-text); +} + +/* Fix focus overflow for 4.1.4-nightly */ +.layout-single-column .account__header__tabs__buttons { + overflow: visible; +} + +/* stylelint-disable-next-line */ +.layout-single-column .account__header__tabs__buttons .icon-button { + align-items: center; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + display: inline-flex; + height: 36px; + justify-content: center; + padding: 0; + width: 36px; +} + +/* Copy-icon size in profile */ +.layout-single-column .account__header__tabs__buttons .icon-button svg { + height: 18px; + width: 18px; +} + +body.embed .button.logo-button:hover, +.layout-single-column .column-inline-form button:hover, +.layout-single-column .explore__suggestions .account-card__actions__button button:hover, +.layout-single-column .account__header__tabs__buttons .icon-button.active { + color: var(--color-light-text); +} + +.layout-single-column .account__header__tabs__buttons .icon-button .icon-bell-o, +.layout-single-column .account__header__tabs__buttons .icon-button .icon-bell { + background-image: var(--icon-bell-header-tabs); +} + +.layout-single-column .account__header__tabs__buttons .icon-button.active .icon-bell-o, +.layout-single-column .account__header__tabs__buttons .icon-button.active .icon-bell { + background-image: var(--icon-bell-header-tabs-active); +} + +.layout-single-column .explore__suggestions .account-card__actions__button button:hover, +.layout-single-column .account__header__tabs__buttons .button:focus, +.layout-single-column .account__header__tabs__buttons .button:hover, +.layout-single-column .notification .account__relationship > .button:hover, +.layout-single-column .notification .account__relationship > .button:focus, +.layout-single-column .account .account__relationship > .button:hover, +.layout-single-column .account .account__relationship > .button:focus { + background-color: var(--color-profile-button-hover); +} + +.layout-single-column .detailed-status__action-bar .icon-button:focus, +.layout-single-column .status__action-bar .icon-button:focus, +.layout-single-column .detailed-status__action-bar .icon-button:hover, +.layout-single-column .status__action-bar .icon-button:hover { + background-color: transparent; +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover::after, +.layout-single-column .status__action-bar .icon-button:hover::after { + opacity: 1; +} + +.layout-single-column .detailed-status__action-bar .icon-button::after, +.layout-single-column .status__action-bar .icon-button::after { + background-color: rgba(96, 105, 132, .15); + border-radius: 50%; + content: ''; + height: 36px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: -8px; + transform: translateX(8px) translateY(1px); + width: 36px; + z-index: -1; +} + +.layout-single-column .conversation .icon-button::after { + transform: translateX(-8px) translateY(1px); +} + +.layout-single-column .conversation__content { + overflow: visible; +} + +.layout-single-column .detailed-status__button { + max-height: 24px; + max-width: 120px; + position: relative; +} + +.layout-single-column .detailed-status__button .icon-button.star-icon::after { + transform: translateX(3px); +} + +.layout-single-column .status__action-bar .icon-button.icon-button--with-counter::after { + transform: translateX(0) translateY(0); +} + +/* Misc UI fixes */ +.layout-single-column .search__icon .icon.active { + opacity: 1; +} + +/* Follow recommendations, "Who to follow" since Mastodon v4.3.0-alpha.1 (2024-02-01) */ +.layout-single-column .inline-follow-suggestions__body__scrollable__card .account__avatar { + background-color: transparent; + border: 0; +} + +/* Explore -> For you shade in bio */ +.layout-single-column .scrollable .account-card__bio::after { + /* stylelint-disable-next-line */ + background: linear-gradient(270deg, var(--color-bg), transparent); +} + +/* Empty column */ +.layout-single-column .empty-column-indicator { + min-height: 120px; +} + +.layout-single-column .status__prepend + .status { + padding-top: 10px; +} + +.layout-single-column .search__icon .icon-times-circle { + top: 9px; +} + +.layout-single-column .setting-text__toolbar { + align-items: center; +} + +.layout-single-column .timeline-hint strong { + display: block; + margin-bottom: var(--gap-default); +} + +.layout-single-column .timeline-hint br { + display: none; +} + +/* General fixes */ +.layout-single-column .account__header__bar .avatar { + /* stylelint-disable-next-line */ + margin-left: 0 !important; +} + +/* Fix for button line-height */ +.layout-single-column .button.logo-button { + line-height: 22px; +} + +/* Visual indicator about direct messages + @source https://github.com/mastodon/mastodon/issues/22158#issuecomment-1353661031 */ + +.notification-ungrouped--direct, +.layout-single-column .detailed-status-direct { + position: relative; +} + +.notification-ungrouped--mention.notification-grouped--direct::after, +.notification-ungrouped--mention.notification-ungrouped--direct::after { + border-left: 20px solid transparent; + border-top: 20px solid var(--color-accent); + /* Add a ribbon to the corner */ + content: ''; + height: 0; + position: absolute; + right: 0; + top: 0; + width: 0; +} + +/* Indicator for private mentions when grouped notifications are enabled in 4.3.0 */ +.notification-ungrouped--direct .status__wrapper-direct::after, +.notification-ungrouped--direct .detailed-status-direct::after { + display: none; +} + +.layout-single-column .notification .status__wrapper-direct::after { + top: -40px; +} + +/* Private message conversations */ +.layout-single-column .conversation .status__action-bar { + padding-left: 0; +} + +/* Default buttons */ +.layout-single-column .compose-form__buttons button, +.layout-single-column .button { + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; +} + +/* Compose hover and focus fix */ +.layout-single-column .report-dialog-modal__actions .button:hover, +.layout-single-column .server-banner .button, +.layout-single-column .sign-in-banner .button, +.layout-single-column .ui__header__links .button, +.layout-single-column .compose-form__publish-button-wrapper button { + background-color: var(--color-accent-dark); + border-color: var(--color-accent-dark); + color: var(--color-button-text); + transition: all 200ms; +} + +/* Compose form */ +.layout-single-column .compose-panel .compose-form__highlightable, +.layout-single-column .compose-panel .compose-form { + background-color: transparent; + border: 0; + margin-bottom: 0; + position: relative; + z-index: 4; +} + +body .compose-form .compose-form__uploads { + margin-left: 0; + margin-top: 0; + padding-left: 0; + padding-right: 0; +} + +/* New compose form buttons from 4.3.0-alpha 2024-01-27 */ +.layout-single-column .compose-form__dropdowns { + gap: 10px; +} + +.layout-single-column .compose-form .media-gallery__item, +.layout-single-column .compose-form .compose-form__uploads, +.layout-single-column .compose-form .media-gallery { + border: 0; + border-radius: 0; + outline: 0; +} + +.layout-single-column .compose-form__dropdowns .dropdown-button.active, +.layout-single-column .compose-form__dropdowns .dropdown-button { + background-color: transparent; + border: 0; + color: var(--color-dim); + padding: 0; +} + +.layout-single-column .compose-form__dropdowns .dropdown-button.active, +.layout-single-column .compose-form__dropdowns .dropdown-button:hover, +.layout-single-column .compose-form__dropdowns .dropdown-button:focus { + color: var(--color-accent); +} + +.layout-single-column .compose-form__submit { + flex: unset; +} + +.layout-single-column .compose-form__actions { + justify-content: space-between; +} + +.layout-single-column .compose-form__actions .icon-button.active { + background-color: transparent; + color: var(--color-accent); +} + +/* Footer items */ +.link-footer { + position: relative; + z-index: 5; +} + +.link-footer p .version { + white-space: normal; +} + +.layout-single-column .compose-form__footer { + gap: 4px; + padding-bottom: 6px; +} + +/* Add slight background color for the compose form */ +/* stylelint-disable-next-line no-duplicate-selectors */ +.layout-single-column .compose-form .compose-form__highlightable, +.layout-single-column .compose-form__highlightable .compose-form__buttons-wrapper, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper { + background-color: var(--color-bg-compose-form); + border-color: var(--color-bg-compose-form); + padding-top: 0; + transition: all 200ms; +} + +/* Smooth color transition on focus */ +.layout-single-column .compose-form .compose-form__highlightable:focus-within, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper:focus-within, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper:focus-within ~ .compose-form__buttons-wrapper, +.layout-single-column .compose-form__highlightable .compose-form__autosuggest-wrapper:focus-within ~ .compose-form__buttons-wrapper { + background-color: var(--color-bg-compose-form-focus); + border-color: var(--color-bg-compose-form-focus); +} + +/* Fixes bottom row padding when there's a background */ +.layout-single-column .compose-form__highlightable .compose-form__buttons-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper { + padding: calc(var(--gap-default) / 2); +} + +.layout-single-column .navigation-bar + .compose-form { + padding-top: 10px; +} + +.layout-single-column .server-banner .button:hover, +.layout-single-column .server-banner .button:focus, +.layout-single-column .sign-in-banner .button:hover, +.layout-single-column .sign-in-banner .button:hover:focus, +.layout-single-column .ui__header__links .button:hover, +.layout-single-column .ui__header__links .button:focus, +.layout-single-column .compose-form__publish-button-wrapper button:hover, +.layout-single-column .compose-form__publish-button-wrapper button:focus { + background-color: var(--color-brand-mastodon-links); + border-color: var(--color-brand-mastodon-links); + color: var(--color-button-text); +} + +/* Tertiary button */ +.layout-single-column .button.button-tertiary { + /* stylelint-disable-next-line */ + background-color: transparent !important; + /* stylelint-disable-next-line */ + border: 1px solid var(--color-accent-dark) !important; + color: var(--color-ghost-button-text); + padding: 6px 17px; +} + +.layout-single-column .button.button-tertiary:active, +.layout-single-column .button.button-tertiary:focus, +.layout-single-column .button.button-tertiary:hover { + border: 1px solid var(--color-accent-dark); +} + +/* Secondary button */ +.layout-single-column .button.button-secondary { + /* stylelint-disable-next-line */ + background-color: transparent; + border: 1px solid var(--color-dim); + color: var(--color-dim); +} + +.layout-single-column .button.button-secondary:hover { + /* stylelint-disable-next-line */ + background-color: var(--color-light-text); + border-color: var(--color-light-text); + color: var(--color-bg); +} + +.layout-single-column .button.button-tertiary:focus, +.layout-single-column .button.button-tertiary:hover { + /* stylelint-disable-next-line */ + background-color: var(--color-brand-mastodon-links) !important; + /* stylelint-disable-next-line */ + border-color: var(--color-brand-mastodon-links) !important; + /* stylelint-disable-next-line */ + color: var(--color-bg) !important; + + /* This is actually wrong in Mastodon default UI as well, hover should not have padding but yet it has */ + padding: 6px 17px; +} + +/* Smaller icon for back button */ +.layout-single-column .column-back-button i, +.layout-single-column .column-header__back-button i { + font-size: 12px; +} + +.layout-single-column .icon-button__counter { + font-size: var(--font-size-smaller); +} + +/* Smaller icons for status action bar */ +.layout-single-column .status__action-bar .icon { + font-size: 14.6px; + min-width: 18px; +} + +.layout-single-column .status__action-bar .icon.icon-retweet { + min-width: 21px; +} + +.layout-single-column .status__action-bar .icon-button--with-counter { + align-items: center; + display: inline-flex; + gap: 6px; +} + +.layout-single-column .status__action-bar .icon-button { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 24px !important; + /* stylelint-disable-next-line */ + min-width: 45.78px !important; + position: relative; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: unset !important; +} + +/* Fix reply button not starting from the beginning */ +.layout-single-column .status__action-bar .icon-button:nth-of-type(1) { + /* stylelint-disable-next-line */ + min-width: 42.22px !important; + /* stylelint-disable-next-line */ + width: 42.22px !important; +} + +.layout-single-column .status__action-bar .icon-button:nth-of-type(1)::after { + transform: translateX(4px) translateY(2px); +} + +.layout-single-column .status__action-bar .icon-button.icon-button--with-counter::after, +.layout-single-column .status__action-bar .icon-button.icon-button--with-counter:first-of-type::after { + transform: translateX(-5px) translateY(1px); +} + +.layout-single-column .navigation-panel__menu { + display: flex; + flex-wrap: wrap; +} + +@media screen and (max-height: 980px) { + .navigation-panel .column-link.column-link--optional { + display: none; + } +} + +/* Order of items in v4.3.0-beta2-2024-09-29 */ +.columns-area__panels__pane--navigational .navigation-panel__logo { + order: 1; +} + +.columns-area__panels__pane--navigational .navigation-panel__menu { + order: 2; +} + +.columns-area__panels__pane--navigational .flex-spacer { + order: 3; +} + +.columns-area__panels__pane--navigational .navigation-panel__portal { + order: 4; +} + +@media screen and (min-width: 890px) { + /* Hide the space between Lists and the actual lists */ + .layout-single-column .list-panel > hr, + .layout-single-column .list-panel + hr { + display: none; + } + + .layout-single-column .navigation-panel__menu { + align-items: flex-start; + display: flex; + flex: unset; + flex-wrap: wrap; + gap: 0; + overflow: visible; + position: relative; + } + + /* Hide lists if there's not enough space on desktop vertically */ + .layout-single-column .list-panel { + opacity: 0; + transition: all 200ms; + } + + .layout-single-column .list-panel:focus, + .layout-single-column .list-panel:hover, + .layout-single-column .column-link[href="/lists"]:focus ~ .list-panel, + .layout-single-column .column-link[href="/lists"]:hover ~ .list-panel { + opacity: 1; + } + + /* Order of the side nav items */ + .layout-single-column .column-link[href="/home"] { + order: 2; + } + + .layout-single-column .column-link[href="/notifications"] { + order: 3; + } + + .layout-single-column .column-link[href="/explore"] { + order: 4; + } + + .layout-single-column .column-link[href="/public/local"] { + order: 5; + } + + .layout-single-column .column-link[href="/public"] { + order: 6; + } + + .layout-single-column .column-link[href="/conversations"] { + order: 7; + } + + .layout-single-column .column-link[href='/follow_requests'] { + order: 8; + } + + .layout-single-column .column-link[href="/bookmarks"] { + order: 9; + } + + .layout-single-column .column-link[href="/favourites"] { + order: 10; + } + + .layout-single-column .column-link[href="/search"] { + order: 11; + } + + .layout-single-column .column-link[href="/lists"] { + order: 16; + } + + .layout-single-column .column-link[href="/admin/dashboard"] { + order: 11; + } + + .layout-single-column .column-link[href="/admin/reports"] { + order: 12; + } + + /* stylelint-disable-next-line no-duplicate-selectors */ + .layout-single-column .list-panel { + order: 22; + } + + .layout-single-column .column-link[href="/settings/preferences"] { + order: 11; + } + + .layout-single-column .navigation-panel__sign-in-banner, + .layout-single-column .navigation-panel__legal { + order: 14; + } + + .layout-single-column .getting-started__trends { + order: 16; + } + + .layout-single-column .status__action-bar .icon-button { + /* stylelint-disable-next-line */ + height: 24px !important; + position: relative; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 50px !important; + } + + .layout-single-column .conversation .status__action-bar .icon-button { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: auto !important; + } + + /* Fix list links if they are too short */ + .layout-single-column .list-panel .column-link { + display: flex; + } +} + +/* Replace bookmark icon */ +.layout-single-column .status .icon-button:hover:focus .icon-bookmark, +.layout-single-column .status .icon-button:focus .icon-bookmark, +.layout-single-column .status .icon-button.active .icon-bookmark { + background-image: var(--icon-bookmark-active); +} + +.layout-single-column .status button.icon-button:hover .icon-bookmark { + background-image: var(--icon-bookmark-status-hover); +} + +/* Replace the original icons (after 4.3.0) +------------------------------------------- + +/* Set size for the filter bar and profile icons */ +/* stylelint-disable-next-line */ +.layout-single-column .account__header__tabs__buttons .icon, +.layout-single-column .notification__filter-bar .icon { + --size-icon: 20px; +} + +/* Set size for the column link icons */ +.layout-single-column .column-link .icon { + --size-icon: 24px; + height: 26px; + width: 26px; +} + +/* Set size for the status icons */ +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon { + --size-icon: 19px; +} + +/* General for all column icons */ +/* stylelint-disable-next-line */ +.layout-single-column .notification-group--favourite .notification__message > .icon, +.layout-single-column .notification-favourite .notification__message > .icon, +.layout-single-column .notification-reblog .notification__message > .icon, +.layout-single-column .account__header__tabs__buttons .icon, +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon, +.layout-single-column .notification__filter-bar .icon, +.layout-single-column .column-link .icon { + background-position: center; + background-repeat: no-repeat; + position: relative; +} + +/* stylelint-disable-next-line */ +.layout-single-column .list-adder__lists .icon-plus, +.layout-single-column .list-adder__lists .icon-times, +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon, +.layout-single-column .notification__filter-bar .icon, +.layout-single-column .column-header__button .icon-sliders, +.layout-single-column .column-link .icon { + background-size: var(--size-icon) var(--size-icon); + height: var(--size-icon); + width: var(--size-icon); +} + +.layout-single-column .account__header__tabs__buttons .icon { + background-position: center; + background-size: var(--size-icon) var(--size-icon); +} + +.layout-single-column .status__prepend .icon.icon-at { + height: 18px; + position: relative; + top: 2px; + width: 18px; +} + +/* Hide the original icon from behind */ +.layout-single-column .list-adder__lists .icon-plus > path, +.layout-single-column .list-adder__lists .icon-times > path, +.layout-single-column .list-adder__lists .list__display-name svg > path, +.layout-single-column .status__prepend .icon.icon-retweet path, +.layout-single-column .notification-group--reblog > .notification-group__icon > .icon path, +.layout-single-column .notification-reblog .notification__message > .icon path, +.layout-single-column .notification-group--favourite > .notification-group__icon > .icon path, +.layout-single-column .notification-group--favourite .notification__message > .icon path, +.layout-single-column .notification-favourite .notification__message > .icon path, +.layout-single-column .account__header__tabs__buttons .icon path, +.layout-single-column .detailed-status__action-bar .icon path, +.layout-single-column .notification__filter-bar .icon path, +.layout-single-column .status__action-bar path, +.layout-single-column .column-link .icon path, +.layout-single-column .load-more path, +.layout-single-column .account__domain-pill__popout__parts > div:nth-child(2) path, +.layout-single-column .column-header__button .icon-sliders > path, +.compose-form .icon-close > path, +.layout-single-column .item-list .lists__item__title path, +.layout-single-column .lists__item .icon-button.active path, +.layout-single-column .dialog-modal__content .lists__item__title path { + display: none; +} + +/* ...except for these icons, we kinda like them as they are */ +.layout-single-column .icon-user-plus.column-link__icon path, +.layout-single-column .icon.icon-undefined path, +.layout-single-column .icon.icon-users path, +.layout-single-column .account__header__tabs__buttons .icon.icon-user-plus path, +.layout-single-column .notification__filter-bar .icon.icon-user-plus path, +.layout-single-column .account__header__tabs__buttons .icon.icon-tasks path, +.layout-single-column .notification__filter-bar .icon.icon-tasks path { + display: block; +} + +/* Home icon */ +.layout-single-column .column-link .icon-home { + background-image: var(--icon-home); +} + +.layout-single-column .column-link.active .icon-home { + background-image: var(--icon-home-column-link-active); +} + +.layout-single-column .notification__filter-bar .icon-home { + background-image: var(--icon-home-notification); +} + +.layout-single-column .notification__filter-bar .active .icon-home { + background-image: var(--icon-home-notification-active); +} + +.layout-single-column .list-adder__lists .icon-plus { + --size-icon: 20px; + background-image: var(--icon-plus); +} + +.layout-single-column .list-adder__lists .icon-times { + --size-icon: 20px; + background-image: var(--icon-checked-green); +} + +.layout-single-column .list-adder__lists .icon-button:hover .icon-plus { + background-image: var(--icon-plus-green); +} + +.layout-single-column .list-adder__lists .icon-button:hover .icon-times { + background-image: var(--icon-cross-red); +} + +/* Notifications icon */ +.layout-single-column .icon.icon-bell-o, +.layout-single-column .column-link .icon-bell { + background-image: var(--icon-bell); +} + +.layout-single-column .active .icon.icon-bell, +.layout-single-column .column-link.active .icon-bell { + background-image: var(--icon-bell-active); +} + +/* Explore icon */ +.layout-single-column .column-link .icon-explore, +.layout-single-column .column-link .icon-hashtag { + background-image: var(--icon-hashtag); +} + +.layout-single-column .column-link.active .icon-explore, +.layout-single-column .column-link.active .icon-hashtag { + background-image: var(--icon-hashtag-active); +} + +/* Live feeds icon */ +.layout-single-column .column-link .icon-globe { + background-image: var(--icon-globe); +} + +.layout-single-column .column-link.active .icon-globe { + background-image: var(--icon-globe-active); +} + +/* Private mentions icon */ +.layout-single-column .column-link .icon-at { + background-image: var(--icon-direct-messages); +} + +.layout-single-column .column-link.active .icon-at { + background-image: var(--icon-direct-messages-active); + transform: scale(1.15); +} + +/* Bookmarks icon */ +.layout-single-column .column-link .icon-bookmarks { + background-image: var(--icon-bookmark-column-link); +} + +.layout-single-column .column-link.active .icon-bookmarks { + background-image: var(--icon-bookmark-column-link-active); +} + +/* Preferences icon */ +.layout-single-column .column-link .icon-cog { + --size-icon: 24px; + background-image: var(--icon-sliders-contrast); +} + +/* Settings icon */ +.layout-single-column .column-header__button .icon-sliders { + --size-icon: 20px; + background-image: var(--icon-sliders); +} + +.column-header__button.active .icon-sliders { + /* Use contrast icon */ + background-image: var(--icon-sliders-contrast); + + /* Disable rotate */ + transform: none; +} + +/* Administration icon */ +.layout-single-column .column-link .icon-tachometer { + --size-icon: 24px; + background-image: var(--icon-administration); +} + +/* Moderation icon */ +.layout-single-column .column-link .icon-flag { + --size-icon: 24px; + background-image: var(--icon-moderation); +} + +/* Replace retweet icon */ +.layout-single-column .notification__filter-bar .icon-retweet { + background-image: var(--icon-boost-notification-filter-bar); +} + +.layout-single-column .notification__filter-bar .active .icon-retweet { + background-image: var(--icon-boost-notification-filter-bar-active); +} + +.layout-single-column .notification__filter-bar .active .icon-mailreply, +.layout-single-column .notification__filter-bar .active .icon-reply-all, +.layout-single-column .notification__filter-bar .active .icon-reply { + background-image: var(--icon-reply-nofitication-filter-bar-active); +} + +.layout-single-column .detailed-status button.icon-button .icon-retweet, +.layout-single-column .status button.icon-button .icon-retweet { + background-image: var(--icon-boost-status); + background-position: center; + background-repeat: no-repeat; +} + +/* Replace notification retweet icon */ +.layout-single-column .notification-group--reblog .icon-repeat, +.layout-single-column .notification-reblog .icon-retweet { + background-image: var(--icon-boost-notification-wrapper); +} + +/* stylelint-disable-next-line */ +.layout-single-column button.icon-button .icon-retweet { + --size-icon: 20px; + background-image: var(--icon-boost); + background-position: center; + background-repeat: no-repeat; +} + +.layout-single-column button.icon-button:hover .icon-retweet, +.layout-single-column button.icon-button.active .icon-retweet { + background-image: var(--icon-boost-active); + background-position: center; + background-repeat: no-repeat; +} + +/* Un-boost and un-bookmark styles */ +/* Mobile devices */ +.layout-single-column button.icon-button:not(.active):focus .icon-retweet, +.layout-single-column button.icon-button:not(.active):hover .icon-retweet { + animation: none; + background-image: var(--icon-boost); +} + +.layout-single-column .status button.icon-button:not(.active):focus .icon-bookmark, +.layout-single-column .status button.icon-button:not(.active):hover .icon-bookmark { + background-image: var(--icon-bookmark); +} + +/* Un-boost and un-bookmark numbers on explore page */ +.layout-single-column button.icon-button:not(.active):focus .icon-retweet ~ span, +.layout-single-column button.icon-button:not(.active):hover .icon-retweet ~ span { + color: var(--color-dim); +} + +/* Replace bookmark icon */ +.layout-single-column .detailed-status .icon-bookmark, +.layout-single-column .status .icon-bookmark { + background-image: var(--icon-bookmark); +} + +/* If a hover device */ +@media (hover: hover) { + .layout-single-column button.icon-button:not(.active):hover .icon-retweet, + .layout-single-column button.icon-button:not(.active):hover .icon-retweet ~ span { + color: var(--color-green); + } + + .layout-single-column .status button.icon-button:not(.active):hover .icon-bookmark { + /* stylelint-disable-next-line */ + background-image: var(--icon-bookmark-status-hover-red); + } + + .layout-single-column button.icon-button:not(.active):hover .icon-retweet { + /* stylelint-disable-next-line */ + background-image: var(--icon-boost-active) !important; + } +} + +.layout-single-column button.icon-button:hover .icon-retweet ~ span, +.layout-single-column button.icon-button.active .icon-retweet ~ span { + color: var(--color-green); +} + +.layout-single-column button.icon-button:hover .icon-star ~ span, +.layout-single-column button.icon-button.active .icon-star ~ span { + color: var(--color-red); +} + +/* Replace reply icon */ +.layout-single-column .notification__filter-bar .icon-mail-reply, +.layout-single-column .notification__filter-bar .icon-reply, +.layout-single-column .notification__filter-bar .icon-reply-all { + --size-icon: 19px; + position: relative; + top: 1px; +} + +.layout-single-column .conversation .icon-reply, +.layout-single-column .notification__filter-bar .icon-mail-reply, +.layout-single-column .notification__filter-bar .icon-reply, +.layout-single-column .notification__filter-bar .icon-reply-all, +.layout-single-column .detailed-status .icon-mail-reply, +.layout-single-column .detailed-status .icon-reply, +.layout-single-column .detailed-status .icon-reply-all, +.layout-single-column .status .icon-mail-reply, +.layout-single-column .status .icon-reply, +.layout-single-column .status .icon-reply-all { + background-image: var(--icon-reply); +} + +.layout-single-column .detailed-status__action-bar .icon-mail-reply, +.layout-single-column .detailed-status__action-bar .icon-reply, +.layout-single-column .detailed-status__action-bar .icon-reply-all { + background-image: var(--icon-reply-detailed-status-action-bar); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-mail-reply, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-reply, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-reply-all { + background-image: var(--icon-reply-detailed-status-action-bar-hover); +} + +.layout-single-column .conversation .icon-button:hover .icon-reply { + background-image: var(--icon-reply-conversation); +} + +.layout-single-column .detailed-status__action-bar .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar-hover); +} + +.layout-single-column .detailed-status__action-bar .icon-button.active .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar-active); +} + +.layout-single-column .status button.icon-button:hover .icon-mail-reply, +.layout-single-column .status button.icon-button:hover .icon-reply, +.layout-single-column .status button.icon-button:hover .icon-reply-all { + background-image: var(--icon-reply-status-hover); +} + +/* More icons */ +.layout-single-column .icon-list-ul { + background-image: var(--icon-list); + top: 1px; +} + +/* "More" icon */ +.layout-single-column .icon-ellipsis-h { + background-image: var(--icon-more-status-action-bar); +} + +.layout-single-column .icon-ellipsis-v { + background-image: var(--icon-more); +} + +.layout-single-column .icon-search { + background-image: var(--icon-search-opaque); +} + +/* Close icon */ +.layout-single-column .icon-close { + background-image: var(--icon-close); +} + +.layout-single-column .status .icon-close { + background-image: var(--icon-close-action-bar); +} + +.layout-single-column .relationship-tag { + background-color: var(--color-mud); + color: var(--color-light-text); + font-size: 11px; + font-weight: var(--font-weight-semibold); + line-height: 12px; + opacity: 1; +} + +/* iPad etc. */ +@media (max-width: 1174px) { + .layout-single-column .detailed-status__action-bar .icon-button::after, + .layout-single-column .status__action-bar .icon-button::after, + .layout-single-column .detailed-status__action-bar-dropdown .icon-button::after { + display: none; + } + + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + backdrop-filter: unset; + background-color: transparent; + border: 0; + padding: 0; + } + + /* Fix back button background on mobile */ + .app-body:not(.layout-multiple-columns):has(.column-back-button) .tabs-bar__wrapper::after { + background-color: var(--color-bg-90); + content: ""; + height: 50px; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: -1; + } + + .layout-single-column .columns-area__panels__main { + width: calc(100% - var(--width-side-panel)); + } +} + +/* In-between breakpoint */ +@media (min-width: 889px) and (max-width: 1174px) { + .layout-single-column .columns-area__panels__main > div { + border-right: 0; + } + + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + backdrop-filter: blur(12px); + background-color: var(--color-bg-75); + border-color: var(--color-border); + } + + .layout-single-column .columns-area__panels { + width: calc(100% - 1px); + } + + .layout-single-column .columns-area__panels__main > .tabs-bar__wrapper { + border-right: 0; + } +} + +/* Mobile */ +@media screen and (max-width: 889px) { + + /* Better blur overlay for ui-header */ + .layout-single-column .ui::after { + backdrop-filter: blur(12px); + /* stylelint-disable-next-line */ + -webkit-backface-visibility: hidden; + background-color: var(--color-bg-75); + content: ''; + /* Height is .ui__header + .tabs-bar__wrapper */ + height: calc(48px + 56px); + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 1; + } + + /* Fix navigation-bar getting underneath layer */ + .layout-single-column .navigation-bar { + z-index: 2; + } + + .layout-single-column .tabs-bar__wrapper { + margin-right: 0; + position: sticky; + top: 55px; + z-index: 2; + } + + .layout-single-column .columns-area__panels__main { + order: 1; + position: unset; + width: 100%; + } + + .layout-single-column .columns-area__panels { + flex-direction: column; + justify-content: flex-start; + } + + .layout-single-column .columns-area__panels__main::-webkit-scrollbar { + display: none; + } + + .layout-single-column .columns-area__panels__pane--navigational .columns-area__panels__pane__inner { + background-color: var(--color-bg); + border-top: 1px solid var(--color-border); + bottom: 0; + height: 3.5rem; + left: 0; + max-height: 16vh; + width: 100vw; + } + + .layout-single-column .columns-area__panels__pane--navigational .navigation-panel { + display: block; + padding: 0; + } + + .layout-single-column .columns-area__panels__pane--navigational .navigation-panel .flex-spacer { + display: none; + } + + .layout-single-column .columns-area__panels__pane--navigational .navigation-panel__menu { + flex-direction: row; + flex-wrap: nowrap; + gap: 0; + height: 100%; + overflow-x: auto; + overflow-y: hidden; + padding: 0; + } + + .layout-single-column .column-link { + align-items: center; + height: 56px; + justify-content: center; + margin-right: unset; + padding-bottom: 0; + padding-left: var(--gap-column-link); + padding-right: var(--gap-column-link); + padding-top: 0; + width: 38px; + } + + .navigation-panel__legal hr { + display: none; + } + + .layout-single-column .item-list .column-link { + height: auto; + justify-content: flex-start; + padding-bottom: 4px; + padding-left: 4px; + padding-top: 4px; + width: unset; + } + + .layout-single-column .column-link:hover, + .layout-single-column .column-link:focus { + /* stylelint-disable-next-line */ + background-color: transparent !important; + } + + .columns-area__panels__pane--navigational .column-link__icon.icon-home { + font-size: 27px; + } + + .columns-area__panels__pane--navigational .column-link__icon.icon-ellipsis-h { + background-image: var(--icon-more); + position: relative; + } + + .layout-single-column .columns-area__panels__main > div, + .layout-single-column .columns-area__panels__main > div.columns-area.columns-area--mobile { + border: 0; + } + + .layout-single-column .ui__header { + align-items: center; + border-bottom: 0; + box-sizing: border-box; + display: flex; + height: 56px; + justify-content: space-between; + position: sticky; + top: 0; + width: 100%; + z-index: 2; + } + + .layout-single-column .account__header__bar .avatar .account__avatar { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 106px !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 106px !important; + } + + .layout-single-column .account__header__image { + height: 157px; + } + + .layout-single-column .column > .scrollable { + padding-bottom: 55px; + } + + .layout-single-column .actions-modal ul li:not(:empty) a { + color: var(--color-light-text); + } + + /* "Your lists" view */ + .layout-single-column .column-subheading ~ article { + padding-bottom: calc(var(--gap-default) / 2); + padding-top: calc(var(--gap-default) / 2); + } + + .layout-single-column .compose-form { + padding-bottom: calc(3.5rem + calc(var(--gap-default) * 2)); + } + + /* Column items order */ + .layout-single-column .navigation-panel .column-link, + .layout-single-column .navigation-panel .list-panel, + .layout-single-column .navigation-panel hr, + .layout-single-column .navigation-panel .navigation-panel__logo { + order: 99; + } + + /* Make the column link 1/4 of width of the screen */ + .layout-single-column .navigation-panel .navigation-panel__legal, + .layout-single-column .navigation-panel .column-link { + border: 0; + flex: 0 0 calc(100vw / 4); + margin-inline: 0; + padding: 0; + padding-inline: 0; + } + + .layout-single-column .navigation-panel .navigation-panel__legal { + display: flex; + justify-content: center; + order: 999; + text-align: center; + } + + /* Home */ + .layout-single-column .column-link[href="/home"] { + order: 1; + } + + /* Explore */ + .layout-single-column .column-link[href="/explore"] { + order: 2; + } + + /* Notifications */ + .layout-single-column .column-link[href="/notifications"] { + order: 3; + } + + /* Lists */ + .layout-single-column .column-link[href="/lists"] { + order: 4; + } + + /* Fix "About" page's server thumbnail margins */ + .about__header__hero { + margin-top: 30px; + } +} + +/* Add bottom padding to the navigation panel for the + Safari PWA on iPhones with the portrait mode home bar */ +@media screen and (device-width: 375px) and (device-height: 812px) and (min-resolution: 2dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 12, iPhone 12 Pro, iPhone 13, iPhone 13 Pro, and iPhone 14 */ screen and (device-width: 390px) and (device-height: 844px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 14 Pro */ screen and (device-width: 393px) and (device-height: 852px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone XR and iPhone 11 */ screen and (device-width: 414px) and (device-height: 896px) and (min-resolution: 2dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone Xs Max and iPhone 11 Pro Max */ screen and (device-width: 414px) and (device-height: 896px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 12 Pro Max, iPhone 13 Pro Max, and iPhone 14 Plus */ screen and (device-width: 428px) and (device-height: 926px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 14 Pro Max */ screen and (device-width: 430px) and (device-height: 932px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone) { + .layout-single-column .columns-area__panels__pane--navigational .columns-area__panels__pane__inner { + padding-bottom: 26px; + } +} + +/* stylelint-disable media-feature-name-no-vendor-prefix */ +/* Fixes for iPhone Safari + iPhone Safari PWA */ +@media screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait), /* iPhone 12, iPhone 12 Pro, iPhone 13, iPhone 13 Pro, and iPhone 14 */ screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 14 Pro */ screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone XR and iPhone 11 */ screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait), /* iPhone Xs Max and iPhone 11 Pro Max */ screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 12 Pro Max, iPhone 13 Pro Max, and iPhone 14 Plus */ screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 14 Pro Max */ screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) { + /* Fix top header overlapping in /publish on iPhone */ + .layout-single-column .columns-area--mobile:has(.compose-form) { + top: 34px; + } +} + +.layout-single-column .detailed-status__action-bar .icon-button { + min-width: 24px; + position: relative; +} + +.layout-single-column .detailed-status__action-bar-dropdown .icon-button::after, +.layout-single-column .detailed-status__button .icon-button::after { + transform: translateX(-6px); +} + +/* Add border radius to media */ +.layout-single-column .media-gallery, +.layout-single-column .audio-player, +.layout-single-column .video-player, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview { + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + overflow: hidden; +} + +/* Fix double border on media */ +.layout-single-column .media-gallery .media-gallery__item .media-gallery__gifv { + border: 0; +} + +/* Exception for your own profile media gallery */ +.layout-single-column .account-gallery__container .media-gallery__gifv { + border-radius: 0; +} + +/* Hide autoplaying gifs in notifications (they get annoying if you have favs/boosts on) */ +.layout-single-column .notification.notification-reblog .media-gallery:has(.media-gallery__gifv.autoplay), +.layout-single-column .notification-group--favourite .media-gallery:has(.media-gallery__gifv.autoplay), +.layout-single-column .notification.notification-favourite .media-gallery:has(.media-gallery__gifv.autoplay) { + display: none; +} + +/* More distinct focus color for accessibility, instead of just white */ +.layout-single-column input:focus-visible { + outline-color: var(--color-accent); + outline-style: solid; +} + +/* Embeds outside Mastodon */ +body.embed { + /* stylelint-disable-next-line */ + background-color: #0e1014 !important; + /* Make sure with !important */ + /* stylelint-disable-next-line */ + border: 0; + /* stylelint-disable-next-line */ + overflow: hidden !important; +} + +body.embed .entry .detailed-status { + backface-visibility: hidden; + background-color: #00000059; + /* stylelint-disable-next-line */ + border: 0 !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + border-radius: 0 !important; + overflow: hidden; +} + +/* Destructive colors (For you -suggestions, users when focused to the follow button */ +.layout-single-column .button.logo-button.button--destructive:active, +.layout-single-column .button.logo-button.button--destructive:focus { + background-color: var(--color-destructive); + border-color: var(--color-destructive); +} + +/* Fix character counter color when it's over the limit */ +.layout-single-column .character-counter.character-counter--over { + color: var(--color-destructive); +} + +/* Show more in server banner */ +.layout-single-column .server-banner__meta__column { + max-width: 60%; + width: unset; +} + +/* Increase gap for server-banner__meta */ +.layout-single-column .server-banner__meta { + gap: 25px; +} + +/* Native Mastodon 4.1.2-nightly threaded lines */ +.layout-single-column .status__line--first { + height: calc(100% + var(--size-avatar)); +} + +.layout-single-column .status__line--full { + height: calc(100% + 32px); +} + +/* Default lines when replying in real time */ +.layout-single-column div[tabindex="-1"]:has(.status--in-thread) .status--in-thread:not(.status--first-in-thread) > .status__line:not(.status__line--full) { + height: 0; +} + +/* Hide line before first in thread */ +.layout-single-column div[tabindex="-1"]:has(.status--in-thread) + div[tabindex="-1"] > .status--in-thread.status--first-in-thread > .status__line:not(.status__line--full), +.layout-single-column div[tabindex="-1"]:has(.detailed-status__wrapper) + div[tabindex="-1"] > .status__wrapper .status__line:not(.status__line--full) { + height: 0; +} + +.layout-single-column div[tabindex="-1"] + div[tabindex="-1"] > .status__wrapper > .status-reply.status--in-thread > .status__line.status__line--full, +.layout-single-column .status__line--full.status__line--first { + height: 100%; + z-index: -1; +} + +.layout-single-column .detailed-status { + background-color: transparent; + border-top: 0; +} + +/* Threaded line, actually */ +.layout-single-column .status__line { + border-inline-start: 2px solid var(--color-thread-line); +} + +.layout-single-column .status__line--full::before { + background-color: var(--color-thread-line); +} + +/* Hide the "stub" from the first status line */ +div[tabindex="-1"] + div[tabindex="-1"] > .status__wrapper > .status-reply.status--in-thread > .status__line.status__line--full, +.layout-single-column .status-reply.status--in-thread.status--first-in-thread > .status__line, +.layout-single-column .status-reply.status--in-thread.status--first-in-thread > .status__line--full::before { + top: 32px; +} + +.layout-single-column .status--in-thread .status__action-bar, +.layout-single-column .status--in-thread .status__content { + padding-left: 4px; +} + +/* Scrollbars */ +*::-webkit-scrollbar, +.layout-single-column .drawer__inner::-webkit-scrollbar, +.layout-single-column textarea::-webkit-scrollbar, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar, +.layout-single-column .reply-indicator::-webkit-scrollbar, +.layout-single-column::-webkit-scrollbar { + height: 6px; + width: 6px; +} + +*::-webkit-scrollbar-thumb, +.layout-single-column textarea::-webkit-scrollbar-thumb, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb, +.layout-single-column::-webkit-scrollbar-thumb { + background-color: var(--color-border); + border: 0px solid var(--color-border); + border-radius: 50px; +} + +*::-webkit-scrollbar-thumb:hover, +.layout-single-column textarea::-webkit-scrollbar-thumb:hover, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb:hover, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb:hover, +.layout-single-column::-webkit-scrollbar-thumb:hover { + background-color: var(--color-light-purple); +} + +*::-webkit-scrollbar-thumb:active, +.layout-single-column textarea::-webkit-scrollbar-thumb:active, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb:active, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb:active, +.layout-single-column::-webkit-scrollbar-thumb:active { + background-color: var(--color-black-coral); +} + +*::-webkit-scrollbar-track, +.layout-single-column textarea::-webkit-scrollbar-track, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track, +.layout-single-column .reply-indicator::-webkit-scrollbar-track, +.layout-single-column::-webkit-scrollbar-track { + background-color: var(--color-bg); + border: 0px solid var(--color-border); + border-radius: 0; +} + +.layout-single-column textarea::-webkit-scrollbar-track:hover, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track:hover, +.layout-single-column .reply-indicator::-webkit-scrollbar-track:hover, +.layout-single-column::-webkit-scrollbar-track:hover { + background-color: var(--color-bg); +} + +.layout-single-column textarea::-webkit-scrollbar-track:active, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track:active, +.layout-single-column .reply-indicator::-webkit-scrollbar-track:active, +.layout-single-column::-webkit-scrollbar-track:active { + background-color: var(--color-bg); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-corner, +.layout-single-column textarea::-webkit-scrollbar-corner, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-corner, +.layout-single-column .reply-indicator::-webkit-scrollbar-corner, +.layout-single-column::-webkit-scrollbar-corner { + background-color: transparent; +} + +/* Drawer scollbars */ +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb { + background-color: var(--color-dim); + border: 0; + border-radius: 50px; +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb:hover { + background-color: var(--color-light-purple); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb:active { + background-color: var(--color-light-text); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-track { + background-color: var(--color-dark); + border: 0; + border-radius: 0; +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-track:hover, +.layout-single-column .drawer__inner::-webkit-scrollbar-track:active { + background-color: var(--color-dark); +} + +/* New onboarding in /start in v4.3.0-alpha.0+mementomods-2023-12-16 */ +.layout-single-column .onboarding__steps__item, +.layout-single-column .onboarding__link { + background-color: var(--color-dark); + margin-bottom: 10px; +} + +.layout-single-column .onboarding__steps__item__progress > svg > path { + fill: var(--color-dark); +} + +.layout-single-column .onboarding__links > * { + margin-bottom: 10px; +} + +/* Fixes for the design for v4.3.0-alpha.3-2024-03-22 with new popout layout */ +.layout-single-column .explore__search-results { + border: 0; +} + +.layout-single-column .column-back-button, +.layout-single-column .account__section-headline { + border-left: 0; + border-right: 0; +} + +.layout-single-column .column-back-button { + border-top: 0; +} + +/* Hide search (can be found under Explore in the mobile */ +.layout-single-column .ui__header__links .button.button-secondary[href="/search"] { + display: none; +} + +/* More compact compose button on mobile */ +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"] { + background-color: var(--color-accent-dark); + background-image: var(--icon-compose); + background-position: center; + background-repeat: no-repeat; + background-size: 22px; + border: 0; + box-sizing: border-box; + color: var(--color-light-purple); + height: 35px; + width: 45px; +} + +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"]:is(:hover, :focus, :active) { + background-color: var(--color-accent-dark-50); + color: var(--color-light-purple); +} + +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"] span { + color: transparent; +} + +/* Header on mobile */ +@media screen and (max-width: 1174px) { + .app-body:not(.layout-multiple-columns) .ui__header .ui__header__logo { + margin-left: 3px; + } + + /* stylelint-disable-next-line */ + .app-body:not(.layout-multiple-columns):not(:has(.ui .ui__header__links > .button[href="/auth/sign_in"])) .tabs-bar__wrapper { + z-index: 3; + } + + .app-body:not(.layout-multiple-columns):has(.ui .ui__header__links > .button[href="/auth/sign_in"]) .tabs-bar__wrapper :is(.column-back-button, .column-header > *) { + display: none; + } + + .app-body .column-header__icon { + display: none; + } + + .app-body:not(.layout-multiple-columns) .columns-area__panels { + z-index: 2; + } + + /* Set a backdrop blur background to both top bars */ + .app-body:not(.layout-multiple-columns) .ui__header { + background-color: var(--color-bg-90); + height: 55px; + z-index: 5; + } + + .app-body:not(.layout-multiple-columns):has(.column-header) .tabs-bar__wrapper::after { + background-color: var(--color-bg-90); + content: ""; + height: 49px; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 0; + } + + .ui:has([href="/auth/sign_in"]) .tabs-bar__wrapper::after, + .ui:has(.compose-form__submit) .tabs-bar__wrapper::after { + display: none; + } + + .layout-single-column .column-header__collapsible { + border-bottom: 1px solid var(--color-border); + } + + .layout-single-column .column-header__collapsible-inner { + background-color: var(--color-bg-90); + } + + .app-body:not(.layout-multiple-columns) .column-header__collapsible:not(.collapsed) { + border-bottom: 0; + } +} + +/* List panel */ +.layout-single-column .list-panel { + background-color: var(--color-bg); + margin: 0 0 5px; + padding: 5px 9px 50px 36px; + position: absolute; + top: 100%; +} + +.layout-single-column .list-panel .icon { + display: none; +} + +.app-body .list-panel .column-link span::before { + bottom: -10px; + left: -15px; + right: -15px; + top: -10px; +} + +@media screen and (min-width: 1175px) { + /* Fade in list panel, thanks for the idea @nileane@nileane.fr! https://github.com/nileane/TangerineUI-for-Mastodon */ + .layout-single-column .column-link[href="/lists"]:is(.active, :hover) + .list-panel, + .layout-single-column .list-panel:hover { + animation: fadein .4s 1; + } +} + +/* Spare animations */ +@keyframes fadein { + from { + opacity: 0; + transform: translateY(-10%); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* + * Heart animation micro-interaction start + * --------------------------------------- + */ + +@keyframes heart-animate { + 100% { + background-position: -2800px; + } +} + +/* Left sidebar column links */ +.layout-single-column .column-link .icon-star { + background-image: var(--icon-heart-column-link); +} + +.layout-single-column .column-link.active .icon-star { + background-image: var(--icon-heart-column-link-active); +} + +.layout-single-column .notification-group--favourite .icon-star, +.layout-single-column .notification-favourite .icon-star { + background-image: var(--icon-heart-notification); + background-repeat: no-repeat; +} + +.layout-single-column .notification__filter-bar .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button .icon-star, +.layout-single-column .status__action-bar .icon-button .icon-star { + background-image: var(--icon-heart); +} + +.layout-single-column .notification__filter-bar .active .icon-star { + background-image: var(--icon-heart-active); +} + +.layout-single-column .detailed-status__action-bar .active:not(.activated) .icon-star, +.layout-single-column .status__action-bar .active:not(.activated) .icon-star { + background-image: var(--icon-heart-active-red); +} + +.icon-button.star-icon.active, +.notification-group--favourite .star-icon, +.notification-favourite .star-icon { + color: var(--color-red); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, +.layout-single-column .detailed-status button.icon-button:hover .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-heart-hover); +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon { + max-height: 23px; + max-width: 42.22px; + min-height: 23px; + min-width: 42.22px; + position: relative; +} + +.layout-single-column .status__action-bar .icon-button.star-icon::after { + left: -3px; +} + +/* Disable default Mastodon animation: spring-rotate-in 1s linear; */ +.layout-single-column.no-reduce-motion .icon-button.star-icon .icon-star { + /* stylelint-disable-next-line */ + animation: none !important; +} + +/* While active, hide the original icon */ +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate:hover .icon-star { + /* stylelint-disable-next-line */ + content: '' !important; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + /* stylelint-disable-next-line */ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAC1QAAABkCAMAAAAM7mAaAAADAFBMVEUAAACzq8zkMFXkJlOxqc3iJk3jJk3Ci+fiKVTiJk3iJU3LlO3iJ07jJUziJk3jJk3iJk3jJk/hJ0/iJk3iJk3Mj/XiJk3iJk3Nj/XiJk3iJk3iJk3iJk3Mj/biJk2U1avNj/bjJk3Nku3Kk/PjJk3LkfXLkPXjJ1DMj/XNjvaXuNrou4DiJU3MjvXMjvXjJk3Lj/R5vtTiJk3iJk3jJk3MjvbMk/XAXMnjJk3NkPXXZ7PhJUys5qSm7bbMjvXMkPTMjvWf4s+Tr97Nj/biJU2xxria4LeeMOLSjrTiJk3bhL63WM/0ujCwtvrWnPTMkPbjKFHMj/ab2MPgyoCb37rgoJ6Y5cOfx/ozn+/TldOX5sLstpHut3yg3sKT37nVb8LNkvXJrMXqqmfTasHB6pCV0++nn7aclsbVa8CT58Cf5MCV48Kcx/rSasLIxp+Vz/XqwnCz25iJlvNnnNmgZ8zdRoiU0ffJ7IzdmbijyfDgvZHEXNKr5JWq2KGutMQ8oO3Fp/rL6ozeRoiV1fHsl6XdRojimKbev46sUdVgmvPGuouV1POiNd/OZ8PnvI/uuUc+x5bUar/Wb8On5qLTasCrusO306PdRohan+XeRYifNeKspr9cod/aesuTwI2R0vmsu8Myn+/Mp8ymp8PTms2iTNdYw5E7yY2Ll+/xvjfkJU3iJk2V5MKimr1MoOu7y7HLxp0qyo3dRojbj8ToykXL6n22sviVyI1ByI6s1sr3v5CbyPrzvzCqtcHQodOfZ8ud2djdR4iQmN6S4ciw9prnvZCfMOLalctlm+vor5czoe9omuSKmeqU2uWwxcWb3dTCqvr0jqmhmrjLxJa9rPqwy8LEkfSgZ8udL+PdRomquMK/Ws2SlfFVur/qqmdOw54zr+Kw9prbktC/vNyzQt5Qwb7Tyrix063lIlKwkfXi0UziJk3MjvXUar/dRoiquMKR0vqM6MOw1aWW2On0jqew9pqxwsXglMW7vNywkfXi0UyzQt7U4GjBnPJbtsN52bDbH1E9AAAA63RSTlMABAUMCPPkDBT92hQZafm1fSUh7ZRLpp1BzL5zOyPFD7tBHTOuezgslqEeF9T87EcrFWCMhfViFVmIQTIb/uJay/4qrkwzJ/78Uiwi/fz+UTDV/Sf+/F7+/v6hNA1NPXNt/fqPPDP+/ebIinZfW/57UVX9/fvhmHhUSf77rW1pU/7+v76noId2bf360aimlngz+MzMvaudi3VXUUZB/vvn4d6ciXo++rJjOzc04aaPiGf89LWs1J+Jhv373c/Lx8W6ZVD74t7Z2NK9tbWJ8evo4+PgzMK0qZt/c/Hb0MypY/z46ebSm/zx7+bhp+NmuQAAKXNJREFUeNrs3UFIU3EcB/DvHx68wzsPdhmTDaMGxbpMDGXhKMF4EzssCGZGLbBejCBGDysGXYLqUnSZmKF4MzoEExnUoahTJaEkdMuOHiaBChL0VzpEJQTtCw2/H9j5u+OX7/s9HkRERERERERERERERERERERERERERERERERERERERERERERERERa5LADulIKdGEJdEEIuiAAXVAGXakMERGRPSuRiYFtfCoEW3HpEtgKo6cNyAprow7Iii9n6Rmlt+/pGamvk6BrNEBXLoOurwQREZG9yssNdRtwpfP5/D5w9W1ubobgis/PzxdBNtvbS88YXVsbBtnFtbXDILOl2oDMVMqgS6UgIiIiPJGFhU6QHbCFNwOuTpvRDa6btlRPg+uwLdUFkI329h7HH7XXUh2/WMCu2unERERERKiCet0Dl1O1kuDq4BdeZG3GCLi8lc3NYyC79G7JAVnPpWGIiIiI7BGh7/uL4HKr1iC4MrbwJsFlOju6Dci8UI/QRURERFoobDQqBjSuC6DuWy5YYglYi9XqggeWZBLboiNp0IQh6AoF/EoZuzh+HHSOTjJERESogkYjAFng+wHcUxYvKlOtZnaS/AWw2Pk4C8DJjCTAEsnnIyCzbw/2gW1+HnSnT+NP2q7wioiISNsrnbL6TLlSNmBxfcvZSaqAZcHOx4Cp+4slsOTy+RzIMvwXFOGtrHhgKxYhIiIislcEp6yg0mw2K2BJ+ZbnNKhLtb3JWATZYD4/CDKns9OgFboc7Mq0JsKdccF2YsYBW60GNuf2DNi6+Bk4Np0C25U5B2xzc6C7fgVszoMesMWvgy5+HiIibKlyOQWuvp2lurkNNHXfrwOlW40yaGL1egJsnodWGHj27Bq43PsTE0fANTA29ukEuGpbW18MuJb7+5dBdre/fwZkL65eNSD7cOEJ2B49GgbbqwfYRVuValzRpbyIyN9xJ5vNyTi4wjt3Qkw2bRJ4ku3zRS9n6uzzcVCZNxsbGwOgOjMxMXEfXOfGxsbOgOvu1tYWu7jbwvsaZDajBrKPV1+AbfrDONiGbxiwxeMQEZG9JGxaIYi8ZDQaiUSjZRsU4P/nPHy8dAxUN89aBkyJDesaftdmpfqMLdWXwXWbv1Sjxi+8OHF32YDMmemCiIhImzGxaCSbjURjBiTpTHduqGkN5bozabSeSf7891NBNpI0+DfxQtEB1dP19fXHBkxTZy0PTOYzf6nusucf7MLr3vt0zoCsdrsLbK4LERER+YUXGdmf6zh6tCO3fyTigSCRPTB0cPWHg0MHsgm0mDOYO7S6zW82/W/2t3ooN+iglWKRNH6TjsTwD3pmT54cdcC0tG71gGncdurn2FW73FTDDHgQERGR7+zdP2gTURwH8O+LBydkDnQJlYQE45FSh6Q0lDQQ2iFGpIYKbc6mxA5WEeNQ4z+EVKkOalAqoiBIqUPAQTR1EBFFRFy6iIOLgzjJSzGLSO3gi8Y/oU3u7t09EX2fqTSQL78p3/x4ufdvUmK5fRfnr1yZv7gvF1PgvN7+BG2R6O+Fo9ToFrrOlqgK5/i2Nhp1T7J/sMvv9fobx513Nv6x1QdbJn7ds+z3EGyIePzgdmA3swfCNDfVywRCHVtYkHVUkiRJkqS/Vl9u/nLtN5fnc31wkhJN0A0kogqc4g700A31BNxwhi8UpnQk0Ium7R+Zo72BEUrDIR/4HazX6webW2qCtojH+xeX6u6ry7eGIEmSJEmS9L+Kzdc2MB+DU0g0TtuIR4kzEZMR2lZkkjgREYjQcDKI35xp/lgxmAzTSIA7RKk3dAPE4zY6QMMZMrSbGYAkSZIkSZIkRuxKrY0rMTjCn6AdJPxORIzQjkbsh3jZFMletNh++OhxfNObZJN4wWd7vWE7fF0w1OUDl4nxA/JKZ0mSJEmSJMDlgvP6LtY6uNjnxII3TDsKBwhsmmQRBiGTsGcwQuMedOCJ08gg+EyzTj0NvxcmeP1gFu8vKhAse3ZOg2B6+W0GopWrFYiWqRYgGimXIVyhCOEGigqEK3ZDuOwAxJNXiEiSJDlp8/VrszP3Vlbuzcxeu74ZDortr3W0Pwab3FuooS1u2KGEqAkhBdwGxu98DieNjmYkKQ2Aw/De4fHp8e4uN0xxdwGLY2NjC7BgaIjAIm10dPQlzCNDPlj2Np/PW8lIKbCskk6nCUxTU+DwKJ3W8Y3LRFafCg6F1VUN3+gVzTiDgMfSWvOtSaVinAEuU6UBfJeZIjBAwKeo4Tt9ShcUAYX8HGkAwmUyEE7PQrwsgXCaDuF0DeL9Kxk6QRvyC6j0Z7mezq60mH3qgkNyNUM52OIboSaM+MBPXV/bI/F4ZH11VwEbm+QnMBSgtN8dCHhhyUF22nkY6FJND9yFx6xUv7P2ZI7XsCg7ylh7iPQx7lJNspq56w5fKFyl2gUm8/ZtAUbU/TdzsK6afuRCQzmdLsNA38mTO2CdVq2S73+wCm80yY4vF8AjU/gx0eqq0SC37V7vXVhbW0JnNy7AHn2ptKQYzLEDNhVLpQHRH/dTpdIURHt14hxEO/fwEkTTH76EcJeeQ7jsQwLhLukQLqNBPB2SZMD1ZmZlnZk3LjhhX82EfbDBG6emxL3gpbR26p5Q1K+CUf3RUE9rq1bAgUxMdNeZaRgbDFMW2eOGFbuZcQRVmKYGF1ipfgzTlE/MMMem+iyQWlw0NY+bPUN6AVYV8vlyM2vO3HWHKe7jH3qeycJA6ubN+7DO1dwda2mmYlR4m6WaV5llPDLKeH8edmirDDpTzyuwpbq2tqZBLNZFxZfRpVLpCAQ7UirdhWjPxZdqFFiGcJcKEC6TRRuyJ0rS3yk2s7KhmZgznVpwq3bHqUlxN/iQZEtv9pCWFz0tjTtJYBlhW+o7z1ipHocJu8KUGbReqr0+WOALPh574Z8MTRKYQpZZqd4Gi1JzczpSrL6/UM1ksFK9CMs0DczcKKPB0P3GpppXNs+UYSR3PwV+mTRTgIFUCvZLtVjkw+rqBwhWZJtqArGUpZLwDBxZOqVAMFIsKhBNm4IkSdK/iVxbaesaEX32w/4JECVBTUso4NL/+3sEsU4wQX/ph2UTdebzs/r0MMwIUCZo+RHSe/2wxK8ShFhSCObsXV4+DS4LY8wgTPAtnlbA6ewokzETQsBNyzMFCPaI9V0dYukspALBKtVqBaIVihpEIxkCSZIk6T+3aXalg9lNsOVQzbRD4LOVWrAVPDz0p0gUG4pG6E8evlL9AN0waYv16j6xZ9hjeW64aYMKoZql+hgEO9b8UaRIzbMmounlsgbhNNkTpa/s3b+v0lAUB/CvrS200AIFrQUk1l9ooqA8VAyJGsWBOIiridHRxd3Jwai7RgfjYqKTbu7+De7+C7dq/ANMLHjB2xcRbjk1VvvZLnmPk8NJ+m7PPfRlMplMhmBPTbGrvvL409oeX0EcVwMpVyGv0Anmzp3AEifOBXOdAmRd//r1w06J7vy1oHMIkg7vgKQdhwtB6HgOCePjH0m7++BRNjuYyWQymUwmCcr9zyvcVxDfk08SniCGXCeQ0slt0gu/UMBShQsb9MP3fPt2AusrnJIeqsbOA5B2YOdRnk7C9r5+ncP/TW36EwUCZeI3VZBS2hMHEc6koiCTyWQymczGHn5e6WHywx/cHYrhD/oBkAPB3LUCfqNwLZg7AEnX5MY59sTIZBdi2LXj9JHT2RCA2u31hhC87fW6Kgj5dYMxprkOOMfVGGNGyQeZye7pW+pbeXD5reo06O426CjdvlvrFbFQtGpuv5vt3DOZTCbzj3v+eQ3PEVPu9icpt3OQtfd4IOn4XkjaF3Cd/fit/Z2A2yc9w3JOKvf907SPQsbOE4jhRPace6Do2iykW+AsnYVstwgiiss4rYeZnsa4mgIafYP9UB1gZlDlLxhlUBnrbMquqZhRazab0scg1HU976ClglOtg57ndkFN3b7MZDKZTKJyly/nIqs0nWLn331ew7t8kk/+EN0kaFSTt6oPrP8FxF1xW9UXpP5LIv9e5IWEG9X81/5+6mSoCqvhRAUlv8q4eh6hfJ1x1SZIKCX2Ux+hPvvpoAIKu9lPDYTK7KcaaNTYnFlBqGKyuS1QmXhsRp/fHOhsxmuD0LikMbs+ADeo20wrjUFL7VrWGyy8sawkevqKGomZnRr8B/5AzZWiowgrpwguPdf2mXyzmRdXb/IgV2z6Ygy/WUxnjD9Qj4vPvoSeXd62Sgtx+IN+AGTn7U+Sbu+EnMLxQNrxAqQcDbijpD8rOhxj1LvQkXuo3h7Esgd/u0nJYMw+2MZM+6A9HZqYgMxbmy2YeSBvsgV7CApbTNQAGkzUB4HoW1qAte0FCuK9QLUCVKqUaXC+tuwGRPNBJV9iP7SKCBVbfFnKg45SnqVijjEzNmdJlBVQUsvHDKZvFecTPzozjpVV0Gq6LbPUU3havZLZcpsg1t6qe7vH8xjj3V59qw3yPLxoHh59HoOSXvUaKq9Ow6vqpQFAXHNTqHlxWnOTtuZ8Pk1zK5GVk65r+1SzPhuzG2JmOI3I6sRF91ssVHqLmbclFmolEcOYxxjyGOmrx70v3L1tq3RwPq/JoZmopp+qvhXEcAsycqcWz/SQeE7IqZxcv/0IuKR+ae8OxLJjL/5ulsFmDGvbiohqMkFLUTwmMFVsrmIwkdFsbnuhgo0VbSayh2+iMbQ8NtdkIlNVTSZqgoIjbtTL0YZ7tQga6jE2pzuAo7M5TwUVtS6O+Cg1xtVV0Jno/KMZITSq8qTaIKS6vOJDhIa86q4CQkrNYFPH2gi1f9TH2FLSlsf89kz3EfJ5dVp5EBryd9XGCI01HnECQiP+rnYPoZ7NI47SdG0Xz+uMBkINgy8bfyBGOW0x/kQ9bnxZuDfbU6dsV80b1Um1qp9+kvYUsmMTMVyAjPMBd1bqv8Scl9m4Ck1nqfb2DvoxDvr5j+IbB5zzpghig2Ud3gFoNFhEv88iGpSDGZxpsiiXsBnOHeMxSPvIdRbhuiyiDgoHmajbZaKDoOEuvzlwwVFmUgNqtFlwFY1xxgAYGMI5AhllUXfbFw8S6gpA/2FpTaCpCR9VUnnY9HmI51z2CBgtYphq8jXXCGvuG78+9TL8FF3bQ9ayGBbINKJNgNTG+BP1OPnxy08vXgiLjyeRAuq7z2t6p0LemU8xnIGM/UEs+yHh0rz3XFj3WXczl6S2x+cQw7ngMPUYB/38x7A+3cF1EfKn3aX6EJTyGlsw/C5l65XTWYRhsAgdG1M0tkJVIUhjBRMba7MVKiAPom9LrA2QB3Fd2hDcgAl6PSYYgIrHFuy34iSTR9sk47RKRWML5UQ2P1VHPKyw0pXHbiFGuy3E2I001VzVl52s6Wp6ru2AYy+7QbcdEKlEYoxSGyPZenCvvghevhRXr5ACzz+v7TnF9Af9/Mf5IJbzkNARdskSe/AO1ncoOIoYjkp8uzFXQEyFHDbg29vvbG0fhPrLN1h9UBiyFdrY1Fu20hAbqrCVHIJuyQoW1c5nuTIo1NhvbJHufbiqxgQeiIyWn06MaP/Ycq1WIn9s1ap44iHGqKogUvwDeUwiVfaYoJ1Izc1kat5YHsNKzbU9VFseowYi7j8SI9l6cO+/LPUSKfCdvfuKjaMI4wD+v907+2xfP9f4fGebwzaJHXO2gWBMC3aMsRAgIEKBBCSKgEAoCiD6A70KRC+iCFFEhxcQEgJEEVVIVAFCwAMCNGcnAQXBA2WAlQlmd6cwH8pY+T0nHo/Hnv3vd9/O8u4Pyv6Po2c0HK0YK3UoRdgd/ZO4OOfvCGmd/l9cPFQnZPWIjg1zBP9VTzzPPFNTzJOPw5x60tIrt4z5MFtUnGICBi6GXUyoQBNFTe/vaRaqDBP6WYh+GJFjIRLGCqOBWswVkQMNAaD+M5wimgdRUAw0Avo1b4YhRRaoaM3eHv4BXg0MyS+QMf6P9YhsCGHD8b5nzEo7g7yl2nMjeUs1t5dOMbwBUho0yuF7VPXOkFboGmmCL2c4xtq6gK42Fht2xP9Vv6yYz1N8mOqwEA4AG6qvc4GBMDgMMqEugqs5QY5rY6HaYEKMhYjBQ7gkg/QXwn4Y0iJecMr7tWGb5rGIBUrbFH5SLFDMmr0diLMQcRiRWCBj0K8HV9oQYjG2evFZBXEoO35Gw/FQsVNVy05KrRl/OQiSvNcqqrRmVAci0BAZqNZCUlNIDKob/KtJo9l8qC4GljJs2UyGxJVqGwLvw0xoNzsq1UUWahFxZuBSoP8MZMqiClaZBSrbVH1Ni+ZBe0vYBvo1z/8fgdeavR3ICfvhiJ80ycKIbOgY9qwHopZXqkdnFYzqPKdI/aRiQ1VTg3qHyT6qDzbuoFtxJqlwN4VErbkqcsF4qK6hvJpzrujumT7xDpLuup6soR2Rdl/MMIEMQYQjiT81LEQN6CvVXRZVLQWBl7qK3GjTPIos0KIFUqlOWbO3b6tUb23rAdyzIdCnIFAolwsEzykSPak4PaNlGvI6qpo61A//6IOkPtUUjp7AfhQ3M5yID2fcwO6XHkhqlUlBGePHf9QH7ezW9JIl6LMoYkwgRhATCX5c4+St4dwIeW7nFtEXw5ElrpJ5E6EPccP0rRnIhKy4TfMIDe4WrXlYcLdmb+dijL6NJWwMx54xiNfDc9OGQDfBPPdbxr51YcxLswpegqr9ZrTsp/QCcU3bQVqn/ynV4pOqOyGrKfDfNjJW3x9ci+msNkFSj36o7jH9iWoa5qTJexTrWah64ghnaiplJtBMfwNSFwd5ch8kzlfciD0f04dNZMSmhwjHQ1bcpnm0s0DJbTcH8nu7TTcgxQUyBvV6eO9TDHQBzOtlXC+M+WRWwSdQNTqjZRTyWquaWtVD9faQtL1yqD7glw+ioYcQ1Ad+bwdArHJsFOiRuYws0wzVyytKBaYMlI2VqJ/Yj5QElyjCy1SSCQxRJgbPlCX9zm6MMfKyTIGFKFgUTLroO0wQryO8i/K4KRYg5do0jywLlLVpzYdYoGU2ncbSzgK1w5DMAhmDfj24yv/7nKJTz+OVs61SveAq1Wdu3Hj38rDyYjrwe2uF0En8qx+LHonLSF1cK1RXrvrhh1NU2oV7oaj04t57r4SvRPCFMAEFq3ff/YaSziN+j0DWMa98dV4EfuIpFioVh5zIzTecV9LIolzMhZza+x67Q/PuIAlJtZdfHtU7Y6QFsmpvnyY/ais6rXmU4jgMcWoCp+GAvNyXBsifhizDqnn0kx/GAicf/BIpm25yBHu7ETn6DixkF8gYovUg7v+4CRRyIyO5bT3VC66nurKROzPsWaZxQU+18KtfhVaJgNKs90rFM3/glstfpxZB1Yl7c2PwVTZS7Ivszp2ocYZbEdJe2bx58/mBy2AkKZ7//fff3wx/jYYq7vcdd9xxi7WqyHkXkl5Yv/5jBCmYucd5bXJymrjyU/va5NVagbce0qY/+2xaq4SVgbT9bjxSrzdjHNIOv3iJXvm1S2GMU0E/jyM0y31JSDtC97GDDIxpoXxuVLy30/cPpreNQbAeYhMbAkzAAgfOKjgQqmpntNRuZad/9KkWnjtVU/jyjdxFIWmr+b+c/nHsxj+gSfyW1lRO70i9i37gzpa/FnZB1aq9uQn42s3ICXGl3blV8DVlpmkispk7C74ONPTSxpt5qD4P/rJ1LARffEnP81B9B3Ev8vr1618g7h/cZXJy8nbxWwI9em/Xu39y8jXqgHXyuedeDkhMRH8aOHLffbXKr/2Qd/Ghl2q1FhUh79XnIuTzeO5a6fd7c1pv917y3BKAeM0P95+GeDupy8qPIZiGcG8nbfQqwJiuBTKGYD1oS9U3wQburAJ3qzynemlVy1KNc6r3gKQ9lM+pvoqn3pPgy0nzoODCX+0vP65aA4HS3X9G9ib4axeXMZpQGkOIU3imfqcifXdbhrKVPFO/G1XrBmiGkht4qF6tfrZsEfLO27z5qxUyk9CfyjE8VJ+vdYp0I2RdcNxx79UqZ1G1N2l+vH795VoNzw9D2tWTr+2iU+Fth7TI1ZOXCxr6fKg1+e1yzY276HRbZiBv+pqTtU4HHIS8wy9dopV+CjBXqca4gXks0etGHoI8bwjKNRdrJCxUi/d28vJrGfSP06dtG4N+PbjKp77n6Vnw5peF8UbFzqqWTsg7oOrphpTuqucAyFq+//6nIICTbHcQoOflTZs2VSBw9t0br1oeXG4uC3eRppWHHHJCCYEip1x10bEIksjPi1YJ+Ik8ccPN0eBU/eKqFYED+Oa4mN8wS558MgJ/pRNXrdYIcQWfQQ6Hv+j5Z00gQC5loIjMTZx/DIIkzAReTNxRIj/dYHpasLcb2N13AXHgFRukfZzMmwj1NLiyIJeQNRy0wLp5BLwQy7Y1j/u/gyAODcp7u0E5/zFyMCibYj5S1o0hWA/KA0AugB0umZV2CdQdPaPhaKjoq2rp0+nb3hlSdlbu295zwCtrq7pvE7caQtEDdm7YDgHcRYwLqYej5xBuLQRqa+Fv8J8PQw4GdwM/AS1D0oWf99et0xqjUaG+e/g551xL/hT6ZVdeBnVJpeNFSs+cD3VOm1JRf+w6aIjnlW4NotBRqGM+6grWBUW/idQ9DKMSeUG+IkpxfAz6eSRgVDbmk0uyoF/zAoyaUuo+J9jbKQ+1SMKo9gUyBvF6eG6ytflD7UnF26BulPREPa+MrOUAcKrtHJ1qxfM9lAY4CBo+2sStkPh3P//8XUc3ArhlxpVdBOhecQh3IsK9ffrpD8n8sbfD3xPeI3Zhbn398Qh8NMuWLNetW/c+wl14a8XnRxRUtXR98u4557yKcJWKUhh18C9XXnkl+ekGp911VwnqelOMk40NDz6wAhrGVZ4nu+6p66BjROUT9GdlxxD/ZvW78FfSGwPtKj0sUQiJb52922fDCik2T6qAQFvvPIYojqETN4BkYFgjTfOHeG83rCz4cIKoOSNt4xj068FFn98wz/MlWMI5Q7r7w4G66PUzyq6PQkXDQFXDQAOg/p7ygQ5I6BhQe0u51xi+UwSq1j768k+PnrASQt0/c9u3IlCyJp9EoFacwEP1GoRafjonkU5GEGCCh+rTEOrOK6644kL4cNvYPG0u/Ny8bt2Tgkx92GFv4t928/9o7UD828GvnnOZYIwvv1ws+Skkl89Bo1J95+dfCOpwwnpf6bxnEGrN2sh/7hn94tkIwoyNwdewwgEmpWdL0OH4nVzjwN91JVNly3wWASIVU1fCZhjXLsjtJDXFJGDjPBoFv7kmlOnX3CkK/jz0iPd2w9x6wX2tAfF/jVEft3EM4vXwLJ73svJ7LGmoBnfLrKRboOOaGWXXAPRN1Z1Q0VT19Ck1pDSpPAo5wP+5otVemVo2VDdBUxNKa09cA4lQLS6bZMK6gSdERWQeqm+Fn0SN5Ae2EweLiuGHHXavICmKykvRJQj3+JdfXihdfa0bh46vf/0cPrrqGGeo3rfqtzXyzTKN0HLDefKBN+1ojjEmf5FyoWc1gnSl5i1GF/REIwjiFpnHp9WLKCk2gsCI33Ey9s3DmZd4yw50Sa950YVx8f55WTQOA4R7u3G5+WPkYFw2P2+MrJ1jkK+Hl6ptzdSIPz0r5ek4dIwSd39we1Y17AkVkaU+pWphoXppBNJ69uzjhW1FazdxKyGjj7d/NHTXQkttd2ntKvE4bwW3f3BTMcbFpvBfRN+64vWASWRrDO0llTfvvVC2FyCjPYZ/F0u7wddhLf76OvhJGuyJW7EyolDh1RxjjL5iMgb6C0gEgabq2BZSUyDgtgX9pKjSaCNIDPtlavvm4aT97gbtW/NEPdtCfQIGCPd2Ar15toV8L4BtY5CuhzhVW5qpgVuUCtX0h+odD0W1S6vKltZC72nIToXKeR9UdFR3atCpVK+BlB1ba4FWaGmNnMAHWguRxRWEyJUZK+cQprJ6hYG/dLK/80by9kE0ErwEnebmQHw5DyyT2VQlm3cBqc+CwviWZ8WPg4S7KKhOTZN4h0Ek4/N7a+E8tqxVNzsg4RYJ/wA9iX42pz+BEFvz3g70bjlGL8BtG4NwPcQqz8/1U1dgFfcMqY5qF3pOnlF0MlRtX1W2PdR0D1Q9R0HgqKpnoFu1jWVXKHrx5ZdXQpp+qF6ziXsU/1Uuh1CrvSNGNCXamKeYQIixNaWt92PhFvLg7iUG4nqf2xZURCZL1W1xwGNbaEAhzzz5Aog4LczT4oBKMuXdGiRBZpnXhB5bhr9ZOI8R4no75zQL1tzo3VrahYCRvZ1Irp952nLw0I3Rb/UYxOvhid634U/3RWGZ0VkJo9DkHK9YqHagqmGnqhr1mjB2mPuvPQjVM/fN7AA1PfzbUp54j+IY0NADL1RTO+EQrgRtTqOXQx3Be7y/mYCeEeny7sFPnhbZWoM7fV+qd6klL426acbIr+humnoILtdGfT3nhmKMiw2B0G79jOvfDYR62xhXzGILNs5jsIZxNYMglKRfcydTx7i6jAMBI3s7GbfFu/9wQcZtXhhjUK+HZ+J5Xqa+A/b5ZFboE2gbVe6opi9Vbw9VHXNZeWkHQnQsnUvfHVDUqZrDd/C6UYhL1a3w2j+oPXoINwboKxQZKxYQJvINP2TkQ2gaSjFPagghJvjRfTdDS0Y6uEevffWNJdCRrGNz6pIIE33ysoO1C6OyZbKS7ocHzjDzjDgg055iXKodhJz2GGOxdgeUEi2xWGMCpJxksZh0QGtZOr0M81g4DzdTX59xQSrH17wlAVK9acbSvSDl7e2kBvsZa+sCqXE+Rv8gtmTlGN56UFtsVzf1nEtk3/tCfwDINdAQ+Z29+4tpqwzDAP58epJj7BKDyZJq0oBtqG1NsZ2htV1XWFFAiOmIiZLpHAkbTDacjG2iDpcA4hC37E/CcGu2LE4gRtDpxXalk0wz5xbDlkwvXBZNvDszDYx4pfEDGscoPT09Xz8Dy/u74QLoC/SCp+95ztc6LSd1TCS4lziQkaNEJLh7NStyYE3dNyk5VVsB8BsVN0C6Fp6pX4OYggLoUya5IzBr9YOpK2vroGfgdY7BjNQtnQZu6+TnYb/9A0x58k7d4DHoOsAPxH5CYDFqZE1WeeLEiUqY89jsE/LgY8jm5tDQQaFg8jCyKhweNj0DD6x62lC+OnjOLxAVDcbEg8vuiisReM6FPfAApCsogHTrHod0q1dDutXrsJhl93wsW+y9LJmaQUBwSw7ljyDMcHq1HHidyJ1SdydVx5FBvOROcFeQs5AWtcAwS1QLIVc+FTlSffi/sK2vtfgh2wAP1Z0i1zpnNorZrnR+LhCqUcB3AEaubx/gofo7mLPioVSjYQX0fcB9YTaLPjQ7ImsaPctD9VnzG8VHH12VPTYoQ0NDw7KDybkzZ4YhmV/6DO7c0A3I5r9xQ4Fs45dVyKaMK5COXuQQspwc1T/4Q0z40C2DDoVhTrHE8keKb15z26ViEaprXmvbh9wp5VoRg0GsSCtXkLOVuX/DPUbpHGiDiPufe+5+ZBG5lnqTGXNWPciXr6uQxRs8VB+AWc/xYuojzyCbazxUvwyzPn3qqdXIqo2H6k7IxXioPgcBSyhUn4Fsw0NDhZAs8c8/Mch2sT0B2UZ2jEC6Xy9DuhH5M8BGIN8yrQyQe8pHX2Y8oPojiGoVOPnDoArNsAqYE9DuiAYYFmCBqHZHAGbwRrYLBrlS7e4cMStyYmUgJijPPgER69YhuzcOvM+kncaS8sKBa19AtrN7zjJIdnD4XCGkStU/ZLspfwYO/nETsrHBQUiXGFQgm/+yB9KNxCBdbBzSsXHIF4N8Kv1nJPpWvJeh+rEC4jbeMmQjTFOKNIOKFJgU0uaJFtsxj704qs0TgjlWr1ZsdDfvtcIMiw858FlACCGEEEJyEO76M01XGHnReshA96MVAtRyzZByFaa5tLvUhQJOm8VicwZCddpdXDCrjAdygwG/DObYbDl9LSGEEEIIyc3jR3f9Oc+uo48jX8Jbst6jGIYQtcjQnlqFgJBmSAjmBbyae3v3bg/S1XTUYI7q1rwBmOWwwyC7A4QQQgghJHcF3x7t6tq1q6vr6LcFyKfaw7d0Ha6FIMWlZeVSIKTYq2XlLYaIlaXPJ5PJkwwLddy+fTuMGb46rXQlzPPZYIjNB0IIIYQQsqSwjYd0qh8bGcTFSzRdJXGIska1LKJWiHG8lOQ2Y6EeHqp7ACjFpVrUARF2Jwxw2kEIIYQQQpaaYOOhDJG6MYi8sLg1HW6LhBEShuxOcgEs1MtDdS9w+nevdl2FGCXOkAWL08mohBBCCCFLUrBxyyJlah6p88ZZlLFN7UR+WOu0jOqsEOfpTyaff+mlYhV3eaVnoscS+J1H69PCE2LM6oMunxWEEEIIIWSJYuHGw3dVqRvDDHnlcJdqaUrdDuQNi5driyqPM+SFZ3OSK3WX2TGPvYz/an+lSiCCq/B+jxq3YBE1vR0MsMRVEEIIIYSQpSwYbm1s3L+/sbE1HIQEapk7qs0TdZepyC+HqyStsO1yIG+2Jbm/Z1bfFaGGQDweaAhV1Glc+YR4qH4rye0GLHF7eqaeeXh73NHba4cI5mHIRqF+CSGEEELI0ma3NoRcbrcr1GC1Qwpfw/Xy0tQevPx6gw/5NLOpPukoLkoNSI0pKrbh5YnbEzUQsj3J9Su7+8/HrFbLwuI2ZwlWcyrM23xl6spmAJ4NESwiaAcw3tz8MWTbOxiDdPTWWoQQQgghQiw2n89mQf5t6+/eDEBxlIXcFUVFFe5QmUPBjPtq7hNO7Nzu7VNTU92Aal1p9amYpfqsM0eMTKCjmuuAef38wfuBV9euXfss0mysrv6KoZmLwTTlxa2Vsx9bjryITAbb29sViItsQkbsUv0YZIuNJUAIIYQQQpaSbSeT3YXdUxzmqDaf0+mzqcArPbcnOhCu5mpgGpuawbCeh+qW9M/ORnYmFqrZ+VRg37pmzZpKpPOMe4AxHqpjMK3yVQUzNv02vQeZJOrr6/0QpgwMFCKjU/WnkAcePzJL9P0I6UacIIQQQgi5VyhAalOd5gkGoLe6uhcCuucevIUH361IM7cHf7e5eVQg767l1oPP4KH6WaQ5ziP7cSTa2wWCIn/ozyLg3pyevoBM/DzwMpgV6Uz98G2Tk53I6FJeQnWsqUknuA/2XYQ45edjyMyz41fkQRB6XNchnZ1eHBBCCCFk1kyn2oNMVBUiPN1Xuj1A4fmf1hcizWle/1AAvweCoboFQOTImvVIN9o8m9n9CQazlDVcy+ywC9NvYhFj7RdjgH+vH2bxHfh0G2ZnTE5uQiZ8hgdmRQb2tBkJ1cpgAmax48cZZtXu/AY6RsYhLli1DzrKAsiDXxh0OBogv43fAfnobmFCCCFkGaupYRDFqyU/VSKjj5uF74MsTIVqjhViEYn21CLcvD3T09NHUuMiWMxg/am9EHJkcnIy9ZeKebCovXsZhIw2NY1izie1kGPfzm9qMedYEHLU/nLsv3EMktQCKa3IgFIzIYQQQv4vG170IzN19OqoKprb0+rakkK1DqW+XrT5Mcm1Qc9Yff0liGBNnAo9sYt9IxCh7Ny582foG7nsgQj2fVXVJ9Cn+iDmw6oPIdu+/bWQrSYMQgghhBAD2IbOiO7nf2xvT0BI5ML0hU26M8RD9R4eqiPQc4oPgZCrTU1XoWusr68PIlj2UD2+Q7CyrVZVVR2DLjXqDUFEkM9Qoa/ha6vYjHfe2Y8sLB0qRKjV1WFIpvzQA9nY+y9DuldACCHk3/btUDWuKIoC6L7wXHV1oDGhQ0RNxzwRArExj4gSFZgPyKgRbRmq0kKpLLENLdSkE12RuEIhHxBIdL4jf/CeuFwRWEsf2HZzOAfGvOlSqfRdRq1/1J5/bH3cHKTtpjr7l5f7GXX+pfYP8tfNzTyjfteW6tz9+zpRNbd3d/eab6oPD69To9y//5wJ1ycXzUv11eNVasyOjrrJme9Dagx//2fSUCozTtPa7FtJa2UIADCirNddGuvO/7xOY+X2YTut7ey9TGs7796mSplnysXJz1SZv8qUzeMmVY6HTFl+WqXK6XRGX5nRnc0y6cOifale9KkxnKW54TgAAM/IizRXDkpaK8uttFZWfZpbDWlutUhzy0WaG/o0V7z4AgBApRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKk8L88Rzkq8L2QAAAABJRU5ErkJggg==) !important; + background-position: 0px; + background-repeat: no-repeat; + background-size: unset; + /* stylelint-disable-next-line */ + content: '' !important; + height: 100px; + left: -38px; + pointer-events: none; + position: absolute; + top: -37px; + transform: scale(.58); + width: 100px; +} + +@media (max-width: 890px) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + top: -40px; + } +} + +@media (prefers-reduced-motion: no-preference) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + /* 28 frames */ + /* stylelint-disable-next-line */ + animation: heart-animate 0.8s steps(28) forwards !important; + } +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .status .icon-button.star-icon.activate .icon-star { + left: -28px; +} + +/* If number enabled in core */ +/* stylelint-disable-next-line */ +/* If number enabled in core */ +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .status .icon-button.icon-button--with-counter.star-icon .icon-star { + left: 0; + margin-top: 1px; + position: absolute; +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .status .icon-button.icon-button--with-counter.star-icon.activate .icon-star { + left: -40px; + margin-top: -1px; + position: absolute; +} + +.layout-single-column.no-reduce-motion .star-icon.icon-button--with-counter .icon-button__counter { + margin-left: 20px; +} + +.animated-number { + z-index: 99; +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .detailed-status__action-bar .icon-button.star-icon.activate .icon-star { + left: -29px; +} + +@media screen and (max-width: 889px) { + /* stylelint-disable-next-line */ + .layout-single-column.no-reduce-motion .status .icon-button.star-icon.activate .icon-star { + left: -28px; + } +} + +/* + * -------------------------------------- + * Heart animation micro-interaction ends + */ + +/* + * Star animation micro-interaction start (depends on the hearts above) + * ------------------------------------------------------------------------- + */ + +/* 1/2: If you prefer stars remove this line and the last line of this file +@media (hover: hover) { + .layout-single-column button.icon-button:not(.active):hover .icon-star ~ span, + .layout-single-column button.icon-button:not(.active):hover .icon-star { + color: var(--color-yellow); + } + + .layout-single-column button.icon-button.active:hover .icon-star ~ span { + color: var(--color-dim); + } +} + +.layout-single-column .column-link .icon-star { + background-image: var(--icon-star-column-link); +} + +.layout-single-column .column-link.active .icon-star { + background-image: var(--icon-star-column-link-active); +} + +.layout-single-column .notification-group--favourite .icon-star, +.layout-single-column .notification-favourite .icon-star { + background-image: var(--icon-star-notification); + background-repeat: no-repeat; +} + +.layout-single-column .notification__filter-bar .active .icon-star { + background-image: var(--icon-star-active); +} + +.layout-single-column button.icon-button:hover .icon-star ~ span { + color: var(--color-dim); +} + +.layout-single-column button.icon-button.activate .icon-star ~ span, +.layout-single-column button.icon-button.active .icon-star ~ span { + color: var(--color-yellow); +} + +.layout-single-column .notification__filter-bar .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button .icon-star, +.layout-single-column .status__action-bar .icon-button .icon-star { + --size-icon: 20px; + background-image: var(--icon-star-detailed-status-action-bar); +} + +.layout-single-column .notification__filter-bar button.icon-button.active .icon-star, +.layout-single-column .detailed-status__action-bar button.icon-button.active .icon-star, +.layout-single-column .status__action-bar button.icon-button.active .icon-star { + background-image: var(--icon-star-detailed-status-action-bar) !important; + display: block; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + background-color: unset !important; + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + background-position: center; + color: var(--color-yellow); + left: unset !important; + position: relative; + top: 0; + transform: none; + width: unset; + height: unset !important; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.active .icon-star { + animation: none !important; + background-image: var(--icon-star-detailed-status-action-bar-active) !important; +} + +@media (prefers-reduced-motion: no-preference) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + animation: sparkles-width .65s 1, sparkles-size .65s 1, popping .5s 1 !important; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + animation: sparkles-width .65s 1, sparkles-size .65s 1; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.activate.star-icon::before, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon::before { + animation: ring-border-width .35s 1, ring-size .35s 1; + } +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + background-color: unset !important; + content: ''; + height: 50px !important; + left: 50% !important; + margin-left: -24px; + margin-top: -20px; + opacity: unset; + position: absolute; + top: calc(50% + 1px); + transform: none; + width: 50px !important; + z-index: unset; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star, +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + display: block !important; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.activate.star-icon::before, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::before { + border: 0px solid var(--color-yellow); + border-radius: 10em; + content: ''; + height: 0em; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + transform-origin: 50px 50px; + width: 0em; +} + +.layout-single-column .icon-button.star-icon.active, +.layout-single-column .notification-group--favourite .star-icon, +.layout-single-column .notification-favourite .star-icon { + color: var(--color-yellow); +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.deactivate:hover .icon-star, +.layout-single-column .status__action-bar button.icon-button.deactivate.star-icon:hover .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button.deactivate .icon-star, +.layout-single-column .detailed-status button.icon-button.deactivate .icon-star, +.layout-single-column .status button.icon-button.deactivate .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-hover) !important; + color: var(--color-dim); +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate:hover .icon-star, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon:hover .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, +.layout-single-column .detailed-status button.icon-button:hover .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + color: var(--color-yellow); + position: relative; + top: 0; +} + +.layout-single-column .detailed-status__action-bar .icon-button:focus .icon-star, +.layout-single-column .detailed-status button.icon-button:focus .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + color: var(--color-dim); +} + +.layout-single-column button:focus, +.layout-single-column .icon-button:focus { + outline: 0; +} + +.layout-single-column button:focus-visible, +.layout-single-column .icon-button:focus-visible { + outline: 2px solid var(--color-accent); +} + +.layout-single-column .search__popout__menu__item { + align-items: initial; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.icon-button--with-counter.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.star-icon.activate.star-icon::after { + left: calc(50% - 8px) !important; + top: calc(50% + -1px) !important; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before, +.layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before { + left: calc(50% - 8px) !important; +} + +.layout-single-column button.icon-button.icon-button--with-counter.activate.star-icon > .icon-star { + left: 0 !important; + position: absolute !important; + top: unset !important; +} + +@media (hover: none) { + .layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate:hover .icon-star, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon:hover .icon-star, + .layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, + .layout-single-column .detailed-status button.icon-button:hover .icon-star, + .layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + } +} + +@media (max-width: 888px) { + .layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.star-icon.activate.star-icon::after { + left: calc(50% - 11px) !important; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before, + .layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before { + left: calc(50% - 11px) !important; + } +} + +@keyframes popping { + 0% { + transform: scale(0, 0); + } + + 40% { + transform: scale(0, 0); + } + + 75% { + transform: scale(1.3, 1.3); + } + + 100% { + transform: scale(1, 1); + } +} + +@keyframes ring-border-width { + 0% { + border-width: 0; + } + + 50% { + border-width: 0.22em; + } + + 100% { + border-width: 0; + } +} + +@keyframes ring-size { + 0% { + height: 0; + width: 0; + } + + 100% { + height: 2em; + width: 2em; + } +} + +@keyframes sparkles-width { + 0% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 1% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 2% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.9' fill='transparent' /%3E%3C/svg%3E"); + } + + 3% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 4% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.5' fill='transparent' /%3E%3C/svg%3E"); + } + + 5% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 6% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.1' fill='transparent' /%3E%3C/svg%3E"); + } + + 7% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 8% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.7' fill='transparent' /%3E%3C/svg%3E"); + } + + 9% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13' fill='transparent' /%3E%3C/svg%3E"); + } + + 10% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 11% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='15.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 12% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='16.9' fill='transparent' /%3E%3C/svg%3E"); + } + + 13% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='17.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 14% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='17.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 15% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='18' fill='transparent' /%3E%3C/svg%3E"); + } + + 16% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 17% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 18% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 19% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 20% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14' fill='transparent' /%3E%3C/svg%3E"); + } + + 21% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 22% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 23% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 24% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 25% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13' fill='transparent' /%3E%3C/svg%3E"); + } + + 26% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 27% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 28% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 29% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 30% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12' fill='transparent' /%3E%3C/svg%3E"); + } + + 31% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 32% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 33% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 34% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 35% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11' fill='transparent' /%3E%3C/svg%3E"); + } + + 36% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 37% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 38% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 39% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 40% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10' fill='transparent' /%3E%3C/svg%3E"); + } + + 41% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 42% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 43% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 44% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 45% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9' fill='transparent' /%3E%3C/svg%3E"); + } + + 46% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 47% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 48% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 49% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 50% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8' fill='transparent' /%3E%3C/svg%3E"); + } + + 51% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 52% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 53% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 54% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 55% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7' fill='transparent' /%3E%3C/svg%3E"); + } + + 56% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 57% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 58% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 59% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 60% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6' fill='transparent' /%3E%3C/svg%3E"); + } + + 61% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 62% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 63% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 64% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 65% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 66% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 67% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 68% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 69% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4' fill='transparent' /%3E%3C/svg%3E"); + } + + 70% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 71% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 72% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 73% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 74% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3' fill='transparent' /%3E%3C/svg%3E"); + } + + 75% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 76% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 77% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 78% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 79% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2' fill='transparent' /%3E%3C/svg%3E"); + } + + 80% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 81% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 82% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 83% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 84% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1' fill='transparent' /%3E%3C/svg%3E"); + } + + 86% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 87% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 88% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 89% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 90% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 91% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 92% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 93% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 94% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 95% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 96% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 97% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 98% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 99% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 100% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } +} + +@keyframes sparkles-size { + 0% { + transform: scale(0.1, 0.1); + } + + 5% { + transform: scale(0.1, 0.1); + } + + 85% { + transform: scale(1, 1); + } +} + +2/2: If you prefer stars remove this line too */ diff --git a/modules/nixos/services/mastodon/default.nix b/modules/nixos/services/mastodon/default.nix new file mode 100755 index 0000000..62da572 --- /dev/null +++ b/modules/nixos/services/mastodon/default.nix @@ -0,0 +1,214 @@ +{ + flake, + config, + pkgs, + lib, + ... +}: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) smtp mastodon web; + service = mastodon; + host = "${mastodon.subdomain}.${web.domains.url3}"; + localhost = web.localhost.address0; +in +{ + # If you need to start fresh for some reason, run these to create the new Admin account: + # sudo -u mastodon mastodon-tootctl accounts create nick --email=nick@localhost --confirmed --role=Owner + # sudo -u mastodon mastodon-tootctl accounts approve nick + + # If you fuck up and lose the password, use this: + # sudo mastodon-tootctl accounts modify --reset-password nick + + # If you really fuck up and name yourself wrong, use this shit + # sudo mastodon-tootctl accounts modify username --remove-role + + # nixpkgs.overlays = [ + # ( + # final: prev: { + # mastodon = prev.mastodon.overrideAttrs (oldAttrs: { + # postPatch = + # (oldAttrs.postPatch or "") + # + '' + # patch -p1 < ${./chars.patch} + # ''; + # }); + # } + # ) + # ]; + + services = { + mastodon = { + enable = true; + localDomain = host; + secretKeyBaseFile = "/var/lib/mastodon/secrets/secret-key-base"; + streamingProcesses = 7; + trustedProxy = localhost; + automaticMigrations = true; + database = { + createLocally = true; + name = service.name; + host = "/run/postgresql"; + user = service.name; + passwordFile = config.sops.secrets.mastodon-database.path; + }; + extraConfig = { + SINGLE_USER_MODE = "true"; + SMTP_AUTH_METHOD = "plain"; + SMTP_DELIVERY_METHOD = "smtp"; + SMTP_ENABLE_STARTTLS_AUTO = "true"; + SMTP_SSL = "false"; + }; + mediaAutoRemove = { + enable = true; + olderThanDays = 14; + }; + redis = { + createLocally = true; + enableUnixSocket = true; + }; + sidekiqThreads = 25; + sidekiqProcesses = { + all = { + jobClasses = [ + ]; + threads = null; + }; + default = { + jobClasses = [ + "default" + ]; + threads = 5; + }; + ingress = { + jobClasses = [ + "ingress" + ]; + threads = 5; + }; + push-pull = { + jobClasses = [ + "push" + "pull" + ]; + threads = 5; + }; + mailers = { + jobClasses = [ + "mailers" + ]; + threads = 5; + }; + }; + smtp = { + authenticate = true; + createLocally = false; + fromAddress = "upRootNutrition <${service.email.address0}>"; + host = smtp.hostname; + passwordFile = config.sops.secrets.mastodon-smtp.path; + port = smtp.ports.port0; + user = service.email.address0; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + handle_path /system/* { + file_server * { + root /var/lib/mastodon/public-system + } + } + + handle /api/v1/streaming/* { + reverse_proxy unix//run/mastodon-streaming/streaming.socket + } + + route * { + file_server * { + root ${pkgs.mastodon}/public + pass_thru + } + reverse_proxy * unix//run/mastodon-web/web.socket + } + + tls ${service.ssl.cert} ${service.ssl.key} + + handle_errors { + root * ${pkgs.mastodon}/public + rewrite 500.html + file_server + } + + encode gzip + + header /* { + Strict-Transport-Security "max-age=31536000;" + } + header /emoji/* Cache-Control "public, max-age=31536000, immutable" + header /packs/* Cache-Control "public, max-age=31536000, immutable" + header /system/accounts/avatars/* Cache-Control "public, max-age=31536000, immutable" + header /system/media_attachments/files/* Cache-Control "public, max-age=31536000, immutable" + ''; + }; + }; + }; + }; + + systemd.services.caddy.serviceConfig.ReadWriteDirectories = lib.mkForce [ + "/var/lib/caddy" + "/run/mastodon-web" + ]; + + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "smtp" + "database" + "redis" + ] + ); + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 0755 ${service.name} ${service.name} -" + ]; + + users.users.${service.name}.extraGroups = [ + "postgres" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + ]; + }; + }; +} diff --git a/modules/nixos/services/minecraft/default.nix b/modules/nixos/services/minecraft/default.nix new file mode 100755 index 0000000..c92ce69 --- /dev/null +++ b/modules/nixos/services/minecraft/default.nix @@ -0,0 +1,102 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) + minecraft + ; + service = minecraft; +in +{ + services = { + minecraft-server = { + enable = true; + eula = true; + openFirewall = true; + declarative = true; + serverProperties = { + "rcon.password" = config.sops.secrets."${service.name}-pass".path; + allow-flight = false; + allow-nether = true; + difficulty = 2; + enable-command-block = false; + enable-rcon = true; + enable-status = true; + force-gamemode = true; + gamemode = 0; + generate-structures = true; + hardcore = false; + hide-online-players = false; + level-name = "Brix on Nix"; + level-seed = "9064150133272194"; + max-players = 10; + max-world-size = 64000000; + motd = "A cool Minecraft server powered by NixOS"; + online-mode = true; + pvp = true; + server-port = service.ports.port0; + spawn-animals = true; + spawn-monsters = true; + spawn-npcs = true; + spawn-protection = 16; + view-dtstance = 32; + white-list = true; + }; + whitelist = { + Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3"; + Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85"; + EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993"; + Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49"; + }; + }; + }; + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "pass" + ] + ); + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 0755 ${service.name} ${service.name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/mullvad/default.nix b/modules/nixos/services/mullvad/default.nix new file mode 100755 index 0000000..28c51b7 --- /dev/null +++ b/modules/nixos/services/mullvad/default.nix @@ -0,0 +1,6 @@ +{ + services.mullvad-vpn = { + enable = true; + enableExcludeWrapper = false; + }; +} diff --git a/modules/nixos/services/nextcloud/default.nix b/modules/nixos/services/nextcloud/default.nix new file mode 100755 index 0000000..7c8d3b3 --- /dev/null +++ b/modules/nixos/services/nextcloud/default.nix @@ -0,0 +1,129 @@ +{ + flake, + config, + pkgs, + ... +}: +let + inherit (flake.config.people) user0; + inherit (flake.config.people.users.${user0}) name; + inherit (flake.config.machines.devices) ceres; + inherit (flake.config.services.instances) nextcloud nginx web; + service = nextcloud; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url1}"; +in +{ + services = { + nextcloud = { + appstoreEnable = true; + autoUpdateApps.enable = true; + configureRedis = true; + enable = true; + hostName = host; + https = true; + package = pkgs.nextcloud30; + phpOptions."opcache.interned_strings_buffer" = "24"; + extraAppsEnable = true; + extraApps = { + inherit (config.services.service.package.packages.apps) + contacts + calendar + ; + }; + config = { + adminpassFile = config.sops.secrets."${service.name}-pass".path; + adminuser = name; + dbtype = "pgsql"; + }; + database = { + createLocally = true; + }; + settings = { + default_phone_region = "CA"; + log_type = "file"; + mail_sendmailmode = "pipe"; + mail_smtpmode = "sendmail"; + maintenance_window_start = 4; + overwriteprotocol = "https"; + trusted_proxies = [ + localhost + ]; + }; + }; + + nginx = { + enable = true; + virtualHosts.${host}.listen = [ + { + addr = web.localhost.address1; + port = nginx.ports.port0; + } + ]; + }; + + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString nginx.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + }; + + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "pass" + ] + ); + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 750 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 750 ${service.name} ${service.name} -" + ]; + + users.users.${service.name}.extraGroups = [ + "caddy" + "nginx" + "postgres" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + nginx.ports.port0 + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/ollama/default.nix b/modules/nixos/services/ollama/default.nix new file mode 100755 index 0000000..8616bcb --- /dev/null +++ b/modules/nixos/services/ollama/default.nix @@ -0,0 +1,118 @@ +{ + flake, + config, + pkgs, + ... +}: +let + inherit (flake.config.machines.devices) + mars + ceres + ; + inherit (flake.config.services.instances) + ollama + web + ; + service = ollama; + localhost = web.localhost.address0; + hostname = config.networking.hostName; + host = "${service.subdomain}.${web.domains.url0}"; + + caddyLogic = + if hostname == ceres.name then + { + caddy = { + virtualHosts = { + ${host} = { + extraConfig = '' + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + } + else + { }; + + mountLogic = + if hostname == ceres.name then + { + "/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + } + else + { }; +in +{ + services = { + ollama = + { + enable = true; + group = service.name; + host = "http://${localhost}"; + user = service.name; + } + // ( + if hostname == mars.name then + { + # models = service.paths.path1; + acceleration = "rocm"; + package = pkgs.ollama.override { + config = { + rocmSupport = true; + cudaSupport = false; + }; + }; + } + else + { + port = service.ports.port1; + acceleration = false; + models = service.paths.path0; + } + ); + open-webui = { + enable = true; + host = localhost; + port = service.ports.port0; + environment = { + ENABLE_OLLAMA_API = "True"; + ANONYMIZED_TELEMETRY = "False"; + DO_NOT_TRACK = "True"; + SCARF_NO_ANALYTICS = "True"; + OLLAMA_BASE_URL = "http://${localhost}:${toString service.ports.port1}"; + WEBUI_AUTH = "True"; + }; + }; + } // caddyLogic; + + systemd.tmpfiles.rules = [ + ( + if hostname == mars.name then + "Z ${service.paths.path1} 0777 ${service.name} ${service.name} -" + else + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + ) + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + # 8080 + service.ports.port0 + service.ports.port1 + ]; + }; + }; + fileSystems = mountLogic; +} diff --git a/modules/nixos/services/owncast/default.nix b/modules/nixos/services/owncast/default.nix new file mode 100755 index 0000000..b35ed40 --- /dev/null +++ b/modules/nixos/services/owncast/default.nix @@ -0,0 +1,43 @@ +{ flake, ... }: +let + inherit (flake.config.services.instances) + owncast + web + ; + service = owncast; + localhost = web.localhost.address1; + host = "${service.subdomain}.${web.domains.url1}"; +in +{ + services = { + owncast = { + enable = true; + listen = localhost; + port = service.ports.port0; + openFirewall = true; + }; + + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + service.ports.port1 + ]; + }; + }; + + # OBS Server rtmp://192.168.50.140:1935/live +} diff --git a/modules/nixos/services/peertube/default.nix b/modules/nixos/services/peertube/default.nix new file mode 100755 index 0000000..091cd90 --- /dev/null +++ b/modules/nixos/services/peertube/default.nix @@ -0,0 +1,151 @@ +{ + flake, + config, + pkgs, + ... +}: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) + caddy + peertube + smtp + web + ; + service = peertube; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url3}"; +in +{ + services = { + peertube = { + configureNginx = false; + enable = true; + enableWebHttps = true; + group = service.name; + listenWeb = caddy.ports.port1; + listenHttp = service.ports.port0; + localDomain = host; + serviceEnvironmentFile = config.sops.secrets."${service.name}-root".path; + user = service.name; + plugins = { + enable = true; + plugins = builtins.attrValues { + inherit (pkgs) + peertube-plugin-livechat + peertube-plugin-matomo + peertube-plugin-transcoding-custom-quality + peertube-theme-dark + ; + }; + }; + + secrets = { + secretsFile = config.sops.secrets."${service.name}-secret".path; + }; + settings = { + instance = { + name = "upRootNutrition"; + }; + log = { + level = "debug"; + }; + smtp = { + transport = "smtp"; + disable_starttls = false; + from_address = service.email.address0; + hostname = smtp.hostname; + port = smtp.ports.port0; + username = service.email.address0; + tls = false; + }; + }; + database = { + createLocally = true; + passwordFile = config.sops.secrets."${service.name}-database".path; + }; + redis = { + enableUnixSocket = true; + createLocally = true; + passwordFile = config.sops.secrets."${service.name}-redis".path; + }; + smtp = { + createLocally = true; + passwordFile = config.sops.secrets."${service.name}-smtp".path; + }; + }; + + caddy = { + virtualHosts = { + ${host} = { + extraConfig = '' + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + + ''; + }; + }; + }; + }; + + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}-pass"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "smtp" + "database" + "redis" + "root" + "secret" + ] + ); + }; + + fileSystems."/var/lib/${service.name}" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 755 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 755 ${service.name} ${service.name} -" + ]; + + users.users.${service.name}.extraGroups = [ + "nginx" + "caddy" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + service.ports.port1 + service.ports.port2 + service.ports.port3 + service.ports.port4 + ]; + }; + }; +} diff --git a/modules/nixos/services/postgresql/default.nix b/modules/nixos/services/postgresql/default.nix new file mode 100755 index 0000000..4eeb552 --- /dev/null +++ b/modules/nixos/services/postgresql/default.nix @@ -0,0 +1,60 @@ +{ flake, ... }: +let + inherit (flake.config.machines.devices) + ceres + ; + inherit (flake.config.services.instances) + postgresql + ; + + service = postgresql; +in +{ + services = { + postgresqlBackup = { + enable = true; + location = service.paths.path0; + databases = [ + "mastodon" + "nextcloud" + "peertube" + "forgejo" + ]; + }; + postgresql = { + enable = true; + }; + }; + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; + + fileSystems."/var/lib/postgresql" = { + device = service.paths.path0; + fsType = "none"; + options = [ + "bind" + ]; + depends = [ + ceres.storage0.mount + ]; + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 700 ${service.name} ${service.name} -" + ]; + + users.users.${service.name}.extraGroups = [ + "nextcloud" + "mastodon" + "forgejo" + ]; + + system.activationScripts.postgresCommands = '' + chown -R ${service.name}:${service.name} ${service.paths.path0} + ''; +} diff --git a/modules/nixos/services/samba/default.nix b/modules/nixos/services/samba/default.nix new file mode 100755 index 0000000..3a0e051 --- /dev/null +++ b/modules/nixos/services/samba/default.nix @@ -0,0 +1,42 @@ +{ + pkgs, + flake, + ... +}: +let + inherit (flake.config.services.instances) + samba + jellyfin + audiobookshelf + ; + service = samba; +in +{ + # If you ever need to start fresh, you need to add yourself to the Samba users database: + # sudo smbpasswd -a username + services = { + samba = { + package = pkgs.samba4Full; + enable = true; + openFirewall = true; + settings = { + ${jellyfin.name} = { + path = jellyfin.paths.path0; + writable = "true"; + }; + ${audiobookshelf.name} = { + path = audiobookshelf.paths.path0; + writable = "true"; + }; + }; + }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/searx/default.nix b/modules/nixos/services/searx/default.nix new file mode 100755 index 0000000..48a577a --- /dev/null +++ b/modules/nixos/services/searx/default.nix @@ -0,0 +1,207 @@ +{ + flake, + lib, + config, + ... +}: +let + inherit (flake.config.machines.devices) ceres; + inherit (flake.config.services.instances) searx web; + service = searx; + hostname = config.networking.hostName; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url0}"; +in +{ + services = + { + searx = { + enable = true; + redisCreateLocally = true; + uwsgiConfig = { + socket = "/run/searx/searx.sock"; + http = ":${builtins.toString service.ports.port0}"; + chmod-socket = "660"; + }; + settings = { + general = { + debug = false; + instance_name = "SearXNG Instance"; + donation_url = false; + contact_url = false; + privacypolicy_url = false; + enable_metrics = false; + }; + ui = { + static_use_hash = true; + default_locale = "en"; + query_in_title = true; + infinite_scroll = true; + center_alignment = true; + default_theme = "simple"; + theme_args.simple_style = "auto"; + search_on_category_select = true; + hotkeys = "vim"; + }; + search = { + safe_search = 0; + autocomplete_min = 2; + autocomplete = "duckduckgo"; + ban_time_on_fail = 5; + max_ban_time_on_fail = 120; + }; + server = + { + port = service.ports.port0; + bind_address = localhost; + secret_key = config.sops.secrets.searx-key.path; + limiter = false; + public_instance = false; + image_proxy = true; + method = "GET"; + } + // ( + if hostname == ceres.name then + { + base_url = "https://${host}"; + } + else + { } + ); + engines = lib.mapAttrsToList (name: value: { inherit name; } // value) { + "duckduckgo".disabled = false; + "brave".disabled = false; + "bing".disabled = false; + "mojeek".disabled = true; + "mwmbl".disabled = false; + "mwmbl".weight = 0.4; + "qwant".disabled = true; + "crowdview".disabled = false; + "crowdview".weight = 0.5; + "curlie".disabled = true; + "ddg definitions".disabled = false; + "ddg definitions".weight = 2; + "wikibooks".disabled = false; + "wikidata".disabled = false; + "wikiquote".disabled = true; + "wikisource".disabled = true; + "wikispecies".disabled = false; + "wikispecies".weight = 0.5; + "wikiversity".disabled = false; + "wikiversity".weight = 0.5; + "wikivoyage".disabled = false; + "wikivoyage".weight = 0.5; + "currency".disabled = true; + "dictzone".disabled = true; + "lingva".disabled = true; + "bing images".disabled = false; + "brave.images".disabled = false; + "duckduckgo images".disabled = false; + "google images".disabled = false; + "qwant images".disabled = true; + "1x".disabled = true; + "artic".disabled = false; + "deviantart".disabled = false; + "flickr".disabled = true; + "imgur".disabled = false; + "library of congress".disabled = false; + "material icons".disabled = true; + "material icons".weight = 0.2; + "openverse".disabled = false; + "pinterest".disabled = true; + "svgrepo".disabled = false; + "unsplash".disabled = false; + "wallhaven".disabled = false; + "wikicommons.images".disabled = false; + "yacy images".disabled = true; + "bing videos".disabled = false; + "brave.videos".disabled = true; + "duckduckgo videos".disabled = true; + "google videos".disabled = false; + "qwant videos".disabled = false; + "dailymotion".disabled = true; + "google play movies".disabled = true; + "invidious".disabled = true; + "odysee".disabled = true; + "peertube".disabled = true; + "piped".disabled = true; + "rumble".disabled = false; + "sepiasearch".disabled = false; + "vimeo".disabled = true; + "youtube".disabled = false; + "brave.news".disabled = true; + "google news".disabled = true; + }; + outgoing = { + request_timeout = 5.0; + max_request_timeout = 15.0; + pool_connections = 100; + pool_maxsize = 15; + enable_http2 = true; + }; + enabled_plugins = [ + "Basic Calculator" + "Hash plugin" + "Tor check plugin" + "Open Access DOI rewrite" + "Hostnames plugin" + "Unit converter plugin" + "Tracker URL remover" + ]; + }; + }; + } + // ( + if hostname == ceres.name then + { + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + redir /.well-known/carddav /remote.php/dav/ 301 + redir /.well-known/caldav /remote.php/dav/ 301 + + reverse_proxy ${localhost}:${toString service.ports.port0} + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + } + else + { } + ); + + users.groups.searx.members = [ "caddy" ]; + # systemd.services.caddy.serviceConfig.ProtectHome = false; + + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}-${secret}"; + value = sopsPath secret; + }) + [ + "key" + ] + ); + }; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/syncthing/default.nix b/modules/nixos/services/syncthing/default.nix new file mode 100755 index 0000000..f94abc2 --- /dev/null +++ b/modules/nixos/services/syncthing/default.nix @@ -0,0 +1,56 @@ +{ flake, ... }: +let + inherit (flake.config.machines.devices) + synology + phone + tablet + ; + inherit (flake.config.services.instances) + syncthing + web + ; + service = syncthing; + localhost = web.localhost.address0; +in +{ + services = { + syncthing = { + enable = true; + overrideDevices = false; + overrideFolders = false; + openDefaultPorts = true; + systemService = true; + guiAddress = "${localhost}:${toString service.ports.port0}"; + settings = { + devices = { + ${synology.name} = { + autoAcceptFolders = true; + name = synology.name; + addresses = [ + "tcp://${synology.ip.address0}:${toString service.ports.port2}" + ]; + id = synology.sync.address0; + }; + ${phone.name} = { + autoAcceptFolders = true; + name = phone.name; + addresses = [ + "tcp://${phone.ip.address0}:${toString service.ports.port2}" + ]; + id = phone.sync.address0; + }; + }; + }; + }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + service.ports.port1 + service.ports.port2 + ]; + }; + }; +} diff --git a/modules/nixos/services/vaultwarden/default.nix b/modules/nixos/services/vaultwarden/default.nix new file mode 100755 index 0000000..7dd8d4d --- /dev/null +++ b/modules/nixos/services/vaultwarden/default.nix @@ -0,0 +1,98 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.services.instances) smtp vaultwarden web; + service = vaultwarden; + localhost = web.localhost.address0; + host = "${service.subdomain}.${web.domains.url0}"; +in +{ + services = { + vaultwarden = { + backupDir = service.paths.path0; + enable = true; + environmentFile = config.sops.secrets."${service.name}/env".path; + config = { + # Domain Configuration + DOMAIN = "https://${host}"; + + # Email Configuration + SMTP_AUTH_MECHANISM = "Plain"; + SMTP_EMBED_IMAGES = true; + SMTP_FROM = service.email.address0; + SMTP_FROM_NAME = service.label; + SMTP_HOST = smtp.hostname; + SMTP_PORT = smtp.ports.port0; + SMTP_SECURITY = "starttls"; + SMTP_USERNAME = service.email.address0; + + # Security Configuration + DISABLE_ADMIN_TOKEN = false; + + # Event and Backup Management + EVENTS_DAYS_RETAIN = 90; + + # User Features + SENDS_ALLOWED = true; + SIGNUPS_VERIFY = true; + WEB_VAULT_ENABLED = true; + + # Rocket (Web Server) Settings + ROCKET_ADDRESS = localhost; + ROCKET_PORT = service.ports.port0; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString service.ports.port0} { + header_up X-Real-IP {remote_host} + } + + tls ${service.ssl.cert} ${service.ssl.key} + + encode zstd gzip + ''; + }; + }; + }; + }; + + sops = + let + sopsPath = secret: { + path = "${service.sops.path0}/${service.name}-${secret}"; + owner = service.name; + mode = "600"; + }; + in + { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${service.name}/${secret}"; + value = sopsPath secret; + }) + [ + "env" + ] + ); + }; + + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 0755 ${service.name} ${service.name} -" + "Z ${service.sops.path0} 755 ${service.name} ${service.name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + service.ports.port0 + ]; + }; + }; +} diff --git a/modules/nixos/services/website/default.nix b/modules/nixos/services/website/default.nix new file mode 100755 index 0000000..1974e89 --- /dev/null +++ b/modules/nixos/services/website/default.nix @@ -0,0 +1,33 @@ +{ flake, ... }: +let + inherit (flake.config.services.instances) + upRootNutrition + web + ; + service = upRootNutrition; + host = web.domains.url3; +in +{ + services = { + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + root * ${service.paths.path0} + + file_server + + encode gzip + + try_files {path} /index.html + + tls ${service.ssl.cert} ${service.ssl.key} + ''; + }; + }; + }; + }; + systemd.tmpfiles.rules = [ + "Z ${service.paths.path0} 755 caddy caddy -" + ]; +} diff --git a/modules/nixos/sops/default.nix b/modules/nixos/sops/default.nix new file mode 100755 index 0000000..5a741db --- /dev/null +++ b/modules/nixos/sops/default.nix @@ -0,0 +1,70 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) + user0 + user1 + user2 + user3 + ; + inherit (flake.config.machines) + devices + ; + hostname = config.networking.hostName; + mars = devices.mars.name; + ceres = devices.ceres.name; + venus = devices.venus.name; + charon = devices.charon.name; + deimos = devices.deimos.name; + + userLogic = + if + builtins.elem hostname [ + mars + deimos + ceres + ] + then + user0 + else if hostname == charon then + user1 + else if hostname == venus then + user2 + else + ""; +in +{ + sops = { + defaultSopsFile = ../../../secrets/secrets.yaml; + validateSopsFiles = false; + age = { + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = false; + }; + secrets = + if hostname == charon then + { } + else + { + "ssh/private" = { + path = "/home/${userLogic}/.ssh/id_ed25519"; + owner = userLogic; + }; + "ssh/public" = { + path = "/home/${userLogic}/.ssh/id_ed25519.pub"; + owner = userLogic; + }; + "ssh/hosts" = { + path = "/home/${userLogic}/.ssh/known_hosts"; + owner = userLogic; + }; + # "claude-api-key" = { + # path = "/home/${user0}/.config/zed/claude-api-key"; + # owner = user0; + # }; + }; + }; +} diff --git a/parts/config/devshells.nix b/parts/config/devshells.nix new file mode 100755 index 0000000..2d851c0 --- /dev/null +++ b/parts/config/devshells.nix @@ -0,0 +1,19 @@ +{ pkgs, config, ... }: +{ + devShells = { + default = pkgs.mkShell { + packages = builtins.attrValues { + inherit (pkgs) + age + just + nil + nixd + sops + ssh-to-age + nixfmt-rfc-style + ; + }; + shellHook = "${config.pre-commit.installationScript}"; + }; + }; +} diff --git a/parts/config/pre-commit.nix b/parts/config/pre-commit.nix new file mode 100755 index 0000000..723b60e --- /dev/null +++ b/parts/config/pre-commit.nix @@ -0,0 +1,7 @@ +{ + pre-commit.settings.hooks = { + nixfmt-rfc-style.enable = true; + commitizen.enable = true; + # statix.enable = true; + }; +} diff --git a/parts/default.nix b/parts/default.nix new file mode 100755 index 0000000..27fb3cf --- /dev/null +++ b/parts/default.nix @@ -0,0 +1,20 @@ +{ + perSystem = { + pkgs, + lib, + config, + self', + ... + }: let + configPath = ./config; + + devshellImports = let + files = builtins.attrNames (builtins.readDir configPath); + in + map + (name: configPath + "/${name}") + (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); + in { + imports = devshellImports; + }; +} diff --git a/profiles/user0/default.nix b/profiles/user0/default.nix new file mode 100755 index 0000000..6600e83 --- /dev/null +++ b/profiles/user0/default.nix @@ -0,0 +1,137 @@ +{ + config, + flake, + pkgs, + lib, + ... +}: +let + inherit (flake) self; + inherit (flake.config.people) user0; + inherit (flake.config.machines) devices; + inherit (flake.config.people.users.${user0}) name paths; + hostname = config.networking.hostName; +in +{ + users = { + users.${user0} = { + description = name; + name = user0; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "adbusers" + "caddy" + "disk" + "jellyfin" + "libvirtd" + "minecraft" + "netdev" + "networkmanager" + "nextcloud" + "ollama" + "plugdev" + "postgres" + "redis-mastodon" + "samba" + "syncthing" + "vaultwarden" + "vboxusers" + "wheel" + ]; + }; + }; + home-manager.users = { + ${user0} = { + home = { + username = user0; + homeDirectory = "/home/${user0}"; + file = { + "./justfile" = { + text = '' + vpn: + sudo protonvpn c --c CA + + vpnoff: + sudo protonvpn d + + rebuild: + nixos-rebuild switch --use-remote-sudo --flake ~/Files/Projects/dotfiles#${hostname} --show-trace + + elm: + cd ~/Files/Projects/website/frontend ; elm-land server + + server: + ssh ${devices.ceres.ip.address0} + ''; + }; + "./Files/Scripts/list.sh" = { + source = ./files/list.sh; + executable = true; + }; + "./Files/Scripts/loop.sh" = { + source = ./files/loop.sh; + executable = true; + }; + "./.config/scripts/get_weather.sh" = { + source = ./files/get_weather.sh; + executable = true; + }; + ".config/wallpaper" = { + source = ./files/wallpaper; + recursive = true; + }; + "./.config/vesktop/themes/macchiato-theme.css" = { + source = ./files/themes/vesktop/macchiato-theme.css; + }; + "./.config/qBittorrent/themes/catppuccin-mocha.qbtheme" = { + source = ./files/themes/qbittorrent/macchiato.qbtheme; + }; + }; + sessionVariables = { + VISUAL = lib.getExe pkgs.zed-editor; + GTK_THEME = "catppuccin-macchiato-mauve-compact"; + }; + }; + imports = [ + { + home.stateVersion = config.system.stateVersion; + } + { + imports = [ + self.homeModules."${devices.${hostname}.name}-${user0}" + ]; + } + ]; + }; + }; + systemd.tmpfiles = { + rules = + [ + "d ${paths.path0} 0755 ${user0} users -" + ] + ++ (map (path: "d /home/${user0}/${path} 0755 ${user0} users -") [ + "Downloads/Nicotine" + "Downloads/Nicotine/Downloads" + "Downloads/Nicotine/Incomplete" + "Downloads/Nicotine/Received" + "Downloads/Qbittorent" + "Downloads/Qbittorent/Movies" + "Downloads/Qbittorent/Music" + "Downloads/Qbittorent/Shows" + "Files" + "Files/Scripts" + "Files/Games" + "Files/Screenshots" + ]) + ++ (map (path: "R /home/${user0}/${path} 0755 ${user0} users - -") [ + "Desktop" + "Documents" + "Music" + "Pictures" + "Public" + "Templates" + "Videos" + ]); + }; +} diff --git a/profiles/user0/files/get_weather.sh b/profiles/user0/files/get_weather.sh new file mode 100755 index 0000000..2aee731 --- /dev/null +++ b/profiles/user0/files/get_weather.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +for i in {1..5} +do + text=$(curl -s "https://wttr.in/$1?format=1") + if [[ $? == 0 ]] + then + text=$(echo "$text" | sed -E "s/\s+/ /g") + tooltip=$(curl -s "https://wttr.in/$1?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\"}" \ No newline at end of file diff --git a/profiles/user0/files/list.sh b/profiles/user0/files/list.sh new file mode 100755 index 0000000..b467c45 --- /dev/null +++ b/profiles/user0/files/list.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Function to list directories recursively and sort them alphabetically +list_directories() { + local parent_dir=$1 + local output_file=$2 + + # Clear the output file if it exists + > "$output_file" + + # Recursively find and list directories, then sort them and write to the output file + while IFS= read -r dir; do + echo "$dir" >> "$output_file" + done < <(find "$parent_dir" -type d | sort) +} + +# Main script execution +if [ $# -eq 0 ]; then + echo "Usage: $0 parent_directory" + exit 1 +fi + +parent_directory=$1 +output_file="nested_directories.txt" + +list_directories "$parent_directory" "$output_file" +echo "Directory paths have been written to $output_file" diff --git a/profiles/user0/files/loop.sh b/profiles/user0/files/loop.sh new file mode 100755 index 0000000..c904110 --- /dev/null +++ b/profiles/user0/files/loop.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +while true ; do date ; natpmpc -a 1 0 udp 60 -g 10.2.0.1 && natpmpc -a 1 0 tcp 60 -g 10.2.0.1 || { echo -e "ERROR with natpmpc command \a" ; break ; } ; sleep 45 ; done diff --git a/profiles/user0/files/modnix.sh b/profiles/user0/files/modnix.sh new file mode 100755 index 0000000..352c4cd --- /dev/null +++ b/profiles/user0/files/modnix.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +cp /etc/nixos/configuration.nix /etc/nixos/configuration.nix.backup + +sed -i '/services\.printing\.enable = true;/a\ nix.settings.experimental-features = ["nix-command" "flakes"];\n services.openssh.enable = true;' /etc/nixos/configuration.nix +sed -i '/thunderbird/a\ git\n vscode\n tomb' /etc/nixos/configuration.nix +swapoff -a + +echo "/etc/nixos/configuration.nix updated successfully." \ No newline at end of file diff --git a/profiles/user0/files/reinstall.sh b/profiles/user0/files/reinstall.sh new file mode 100755 index 0000000..1925f1e --- /dev/null +++ b/profiles/user0/files/reinstall.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +mkdir -p /var/lib/sops-nix +mkdir -p /home/nick/.config/sops/age + +cp /run/media/nick/crypt/key.txt /home/nick/.config/sops/age/keys.txt +cp /run/media/nick/crypt/key.txt /var/lib/sops-nix/key.txt + +swapon -a + +echo "SOPS keys transferred successfully." \ No newline at end of file diff --git a/profiles/user0/files/themes/qbittorrent/macchiato.qbtheme b/profiles/user0/files/themes/qbittorrent/macchiato.qbtheme new file mode 100755 index 0000000..025da94 Binary files /dev/null and b/profiles/user0/files/themes/qbittorrent/macchiato.qbtheme differ diff --git a/profiles/user0/files/themes/vesktop/macchiato-theme.css b/profiles/user0/files/themes/vesktop/macchiato-theme.css new file mode 100755 index 0000000..d953df2 --- /dev/null +++ b/profiles/user0/files/themes/vesktop/macchiato-theme.css @@ -0,0 +1 @@ +@import url("https://catppuccin.github.io/discord/dist/catppuccin-macchiato.theme.css"); \ No newline at end of file diff --git a/profiles/user0/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg b/profiles/user0/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg new file mode 100755 index 0000000..da57bcf Binary files /dev/null and b/profiles/user0/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg differ diff --git a/profiles/user0/files/wallpaper/FTDCMyaXoAEUn5h.jpg b/profiles/user0/files/wallpaper/FTDCMyaXoAEUn5h.jpg new file mode 100755 index 0000000..5a4caf1 Binary files /dev/null and b/profiles/user0/files/wallpaper/FTDCMyaXoAEUn5h.jpg differ diff --git a/profiles/user0/files/wallpaper/cat-waves.png b/profiles/user0/files/wallpaper/cat-waves.png new file mode 100755 index 0000000..ded59d8 Binary files /dev/null and b/profiles/user0/files/wallpaper/cat-waves.png differ diff --git a/profiles/user0/files/wallpaper/juliemao-1741428128332-6023.jpg b/profiles/user0/files/wallpaper/juliemao-1741428128332-6023.jpg new file mode 100755 index 0000000..af0dc4d Binary files /dev/null and b/profiles/user0/files/wallpaper/juliemao-1741428128332-6023.jpg differ diff --git a/profiles/user0/files/wallpaper/pinksky.png b/profiles/user0/files/wallpaper/pinksky.png new file mode 100755 index 0000000..9565c67 Binary files /dev/null and b/profiles/user0/files/wallpaper/pinksky.png differ diff --git a/profiles/user0/files/wallpaper/u6ne2q214dx71.jpg b/profiles/user0/files/wallpaper/u6ne2q214dx71.jpg new file mode 100755 index 0000000..58ee466 Binary files /dev/null and b/profiles/user0/files/wallpaper/u6ne2q214dx71.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-0wj757.jpg b/profiles/user0/files/wallpaper/wallhaven-0wj757.jpg new file mode 100755 index 0000000..ffc6074 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-0wj757.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-2ege2g.jpg b/profiles/user0/files/wallpaper/wallhaven-2ege2g.jpg new file mode 100755 index 0000000..ce08958 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-2ege2g.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-4dj2qo.png b/profiles/user0/files/wallpaper/wallhaven-4dj2qo.png new file mode 100755 index 0000000..395be5c Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-4dj2qo.png differ diff --git a/profiles/user0/files/wallpaper/wallhaven-4xq6vv.png b/profiles/user0/files/wallpaper/wallhaven-4xq6vv.png new file mode 100755 index 0000000..1b27934 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-4xq6vv.png differ diff --git a/profiles/user0/files/wallpaper/wallhaven-5dyvy3.jpg b/profiles/user0/files/wallpaper/wallhaven-5dyvy3.jpg new file mode 100755 index 0000000..4ea09fd Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-5dyvy3.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-735xv3.jpg b/profiles/user0/files/wallpaper/wallhaven-735xv3.jpg new file mode 100755 index 0000000..804454c Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-735xv3.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-8xe25y.jpg b/profiles/user0/files/wallpaper/wallhaven-8xe25y.jpg new file mode 100755 index 0000000..b483a4c Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-8xe25y.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-eyrj7o.jpg b/profiles/user0/files/wallpaper/wallhaven-eyrj7o.jpg new file mode 100755 index 0000000..011111a Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-eyrj7o.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-g8ky73.jpg b/profiles/user0/files/wallpaper/wallhaven-g8ky73.jpg new file mode 100755 index 0000000..f10d23b Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-g8ky73.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-j8wzvp.jpg b/profiles/user0/files/wallpaper/wallhaven-j8wzvp.jpg new file mode 100755 index 0000000..667e5db Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-j8wzvp.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-nekxjk.png b/profiles/user0/files/wallpaper/wallhaven-nekxjk.png new file mode 100755 index 0000000..d30c308 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-nekxjk.png differ diff --git a/profiles/user0/files/wallpaper/wallhaven-nryz87.jpg b/profiles/user0/files/wallpaper/wallhaven-nryz87.jpg new file mode 100755 index 0000000..6454932 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-nryz87.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-r7yey1.jpg b/profiles/user0/files/wallpaper/wallhaven-r7yey1.jpg new file mode 100755 index 0000000..6a2754d Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-r7yey1.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-vge32m.jpg b/profiles/user0/files/wallpaper/wallhaven-vge32m.jpg new file mode 100755 index 0000000..aba50bd Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-vge32m.jpg differ diff --git a/profiles/user0/files/wallpaper/wallhaven-vgxgem.jpg b/profiles/user0/files/wallpaper/wallhaven-vgxgem.jpg new file mode 100755 index 0000000..07c0e88 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallhaven-vgxgem.jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg new file mode 100755 index 0000000..789c456 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg new file mode 100755 index 0000000..b8dc444 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg new file mode 100755 index 0000000..6e3d274 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg new file mode 100755 index 0000000..9d03fd8 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg new file mode 100755 index 0000000..7de6f45 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg new file mode 100755 index 0000000..b860fc8 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg new file mode 100755 index 0000000..742fb5f Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg new file mode 100755 index 0000000..2f9fead Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg new file mode 100755 index 0000000..65c5a89 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg new file mode 100755 index 0000000..d284003 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg new file mode 100755 index 0000000..419cdb6 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg new file mode 100755 index 0000000..0cda78a Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg new file mode 100755 index 0000000..c9a36ac Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg new file mode 100755 index 0000000..625826c Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg new file mode 100755 index 0000000..571de4c Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg new file mode 100755 index 0000000..e7f5f67 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg new file mode 100755 index 0000000..32c914a Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg new file mode 100755 index 0000000..bc28661 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg new file mode 100755 index 0000000..c0d943f Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg new file mode 100755 index 0000000..4e960b2 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg new file mode 100755 index 0000000..bb8041d Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg new file mode 100755 index 0000000..257f324 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg new file mode 100755 index 0000000..26a8dea Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg new file mode 100755 index 0000000..b689877 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg new file mode 100755 index 0000000..42440d5 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg new file mode 100755 index 0000000..54a143b Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg new file mode 100755 index 0000000..2317225 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg new file mode 100755 index 0000000..937fcf5 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg new file mode 100755 index 0000000..3714ec7 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg new file mode 100755 index 0000000..7ad7ef4 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg new file mode 100755 index 0000000..e280f63 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg new file mode 100755 index 0000000..6952e52 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg new file mode 100755 index 0000000..b58c9fd Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg new file mode 100755 index 0000000..338ea49 Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg differ diff --git a/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper.jpg b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper.jpg new file mode 100755 index 0000000..e08dc6e Binary files /dev/null and b/profiles/user0/files/wallpaper/wallpaperflare.com_wallpaper.jpg differ diff --git a/profiles/user0/files/wallpaper/yrTphE7NymvE-bSD.mp4 b/profiles/user0/files/wallpaper/yrTphE7NymvE-bSD.mp4 new file mode 100755 index 0000000..b23b561 Binary files /dev/null and b/profiles/user0/files/wallpaper/yrTphE7NymvE-bSD.mp4 differ diff --git a/profiles/user1/default.nix b/profiles/user1/default.nix new file mode 100755 index 0000000..c75cd5f --- /dev/null +++ b/profiles/user1/default.nix @@ -0,0 +1,64 @@ +{ + config, + flake, + pkgs, + ... +}: +let + inherit (flake) self; + inherit (flake.config.people) user1; + inherit (flake.config.machines) devices; + inherit (flake.config.people.users.${user1}) name; + hostname = config.networking.hostName; +in +{ + users = { + users.${user1} = { + description = name; + name = user1; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "libvirtd" + "disk" + "networkmanager" + "vboxusers" + "wheel" + "adbusers" + "netdev" + ]; + }; + }; + home-manager.users = { + ${user1} = { + home = { + username = user1; + homeDirectory = "/home/${user1}"; + file = { + "./justfile" = { + source = ./files/justfile; + }; + "./.config/scripts/get_weather.sh" = { + source = ./files/get_weather.sh; + executable = true; + }; + ".config/wallpaper" = { + source = ./files/wallpaper; + recursive = true; + }; + }; + sessionVariables = { }; + }; + imports = [ + { + home.stateVersion = config.system.stateVersion; + } + { + imports = [ + self.homeModules."${devices.${hostname}.name}-${user1}" + ]; + } + ]; + }; + }; +} diff --git a/profiles/user1/files/get_weather.sh b/profiles/user1/files/get_weather.sh new file mode 100755 index 0000000..2aee731 --- /dev/null +++ b/profiles/user1/files/get_weather.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +for i in {1..5} +do + text=$(curl -s "https://wttr.in/$1?format=1") + if [[ $? == 0 ]] + then + text=$(echo "$text" | sed -E "s/\s+/ /g") + tooltip=$(curl -s "https://wttr.in/$1?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\"}" \ No newline at end of file diff --git a/profiles/user1/files/justfile b/profiles/user1/files/justfile new file mode 100755 index 0000000..bb2295b --- /dev/null +++ b/profiles/user1/files/justfile @@ -0,0 +1,14 @@ +ewwEdit: + eww --config /home/nick/dotfiles/home-manager/modules/eww/config/ open centerPanel + +ewwLaunch: + ./home/nick/dotfiles/home-manager/modules/eww/config/scripts/master.sh + +gobrrr: + home-manager switch --flake ~/dotfiles#desktop + +gobrrrl: + nixos-rebuild switch --use-remote-sudo --flake /home/nick/dotfiles#desktop + +fuckoff: + shutdown now diff --git a/profiles/user1/files/wallpaper/0v1YQLSg6MTHNJwDdky4Igcc6nTTbMctPS8DhT_iGww.webp b/profiles/user1/files/wallpaper/0v1YQLSg6MTHNJwDdky4Igcc6nTTbMctPS8DhT_iGww.webp new file mode 100755 index 0000000..d2a4fa8 Binary files /dev/null and b/profiles/user1/files/wallpaper/0v1YQLSg6MTHNJwDdky4Igcc6nTTbMctPS8DhT_iGww.webp differ diff --git a/profiles/user1/files/wallpaper/9402963.jpg b/profiles/user1/files/wallpaper/9402963.jpg new file mode 100755 index 0000000..3423e88 Binary files /dev/null and b/profiles/user1/files/wallpaper/9402963.jpg differ diff --git a/profiles/user1/files/wallpaper/f.jpg b/profiles/user1/files/wallpaper/f.jpg new file mode 100755 index 0000000..12c9bce Binary files /dev/null and b/profiles/user1/files/wallpaper/f.jpg differ diff --git a/profiles/user1/files/wallpaper/murder-drones-action-scene-2hplnpxoeolfor3a.jpg b/profiles/user1/files/wallpaper/murder-drones-action-scene-2hplnpxoeolfor3a.jpg new file mode 100755 index 0000000..a78ad39 Binary files /dev/null and b/profiles/user1/files/wallpaper/murder-drones-action-scene-2hplnpxoeolfor3a.jpg differ diff --git a/profiles/user1/files/wallpaper/murder-drones-wallpapers-8.jpg b/profiles/user1/files/wallpaper/murder-drones-wallpapers-8.jpg new file mode 100755 index 0000000..0bf2e3f Binary files /dev/null and b/profiles/user1/files/wallpaper/murder-drones-wallpapers-8.jpg differ diff --git a/profiles/user2/default.nix b/profiles/user2/default.nix new file mode 100755 index 0000000..4603663 --- /dev/null +++ b/profiles/user2/default.nix @@ -0,0 +1,89 @@ +{ + config, + flake, + pkgs, + ... +}: +let + inherit (flake) self; + inherit (flake.config.people) user2; + inherit (flake.config.machines) devices; + inherit (flake.config.people.users.${user2}) name paths; + hostname = config.networking.hostName; +in + +{ + users = { + users.${user2} = { + description = name; + name = user2; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "adbusers" + "disk" + "libvirtd" + "minecraft" + "netdev" + "networkmanager" + "ollama" + "syncthing" + "vboxusers" + "wheel" + ]; + }; + }; + home-manager.users = { + ${user2} = { + home = { + username = user2; + homeDirectory = "/home/${user2}"; + file = { + "./justfile" = { + source = ./files/justfile; + }; + }; + sessionVariables = { + WLR_NO_HARDWARE_CURSORS = "1"; + WLR_DRM_NO_ATOMIC = "1"; + VIDEO_PLAYER = "vlc"; + EDITOR = "vscode"; + NIXPKGS_ALLOW_INSECURE = "1"; + }; + }; + + imports = [ + { + home.stateVersion = config.system.stateVersion; + } + { + imports = [ + self.homeModules."${devices.${hostname}.name}-${user2}" + ]; + } + ]; + }; + }; + systemd.tmpfiles = + let + directoriesAddedToHome = [ + "Projects" + ]; + + directoriesRemovedFromHome = [ + "Music" + "Public" + "Templates" + ]; + in + { + rules = + [ + "d ${paths.path0}/Projects 0755 ${user2} users -" + "Z ${paths.path0}/.ssh 700 ${user2} users -" + ] + ++ (map (path: "d /home/${user2}/${path} 0755 ${user2} users -") directoriesAddedToHome) + ++ (map (path: "R /home/${user2}/${path} 0755 ${user2} users - -") directoriesRemovedFromHome); + }; + +} diff --git a/profiles/user2/files/firefox/userChrome.css b/profiles/user2/files/firefox/userChrome.css new file mode 100755 index 0000000..7ae6cc9 --- /dev/null +++ b/profiles/user2/files/firefox/userChrome.css @@ -0,0 +1,266 @@ +/** + * Decrease size of the sidebar header + */ +*, html, body, html body, :root, #sidebar, #sidebar-box, .sidebar-panel, #root.root, #PlacesToolbarItems .bookmark-item, #PlacesToolbarItems .tab-item, .sidebar-placesTreechildren::-moz-tree-cell-text, .sidebar-placesTreechildren, .form-control { + font: 7pt "Lucida Sans", Classica !important; + outline: 0px !important; + border: 0px !important; +} + +html, body, :root, #sidebar, #sidebar-box, .sidebar-panel, #root.root, #PlacesToolbarItems.bookmark-item, #PlacesToolbarItems.tab-item, .titlebar, .toolbar, #PlacesToolbar, #personal-bookmarks, #bookmarks-toolbar-button, #navigator-toolbox, #nav-bar, #library { + background-color: #1a1920 !important; + outline: 0px !important; + border: 0px !important; +} + +@-moz-document url-prefix("moz-extension://4bfeee63-c7b3-4bb9-a7df-a2c0fd73eec0") { + *, html, body, html body, #root, :root, .Tab .title, .main-items .nav-item .len { + font-size: 7pt !important; + font-family: "Lucida Sans", "Classica" !important; + --tabs-font: 7pt "Lucida Sans", "Classica" !important; + background-color: #1a1920 !important; + outline: 0px !important; + border: 0px !important; + } +} + +/* extension icons opacity and fade */ + +#nav-bar toolbarbutton { + filter: grayscale(100%) !important; + opacity: 0.3 !important; + transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important; +} + +#nav-bar toolbarbutton:hover { + filter: grayscale(0%) !important; + opacity: 1 !important; + transition-duration: 200ms !important; + transition-delay: 0s !important; +} + +#sidebar-header toolbarbutton { + filter: grayscale(100%) !important; + opacity: 0 !important; + transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important; + min-width:150px !important; + align: center !important; +} +#sidebar-header toolbarbutton:hover { + filter: grayscale(0%) !important; + opacity: 1 !important; + transition-duration: 200ms !important; + transition-delay: 0s !important; + min-width:150px !important; + align: center !important; +} + +.close-icon {width:0px !important;} + +/* --- */ + + +/* hide address bar bloat */ + #tracking-protection-icon-container { display: none; } + #identity-box { display: none; } + #reader-mode-button { display: none; } + #pageActionButton { display: none; } + #pocket-button { display: none; } + #star-button { display: none; } + #urlbar-zoom-button { display: none; } +/* --- */ + +/* Go to arrow button at the end of the urlbar when searching */ +#urlbar-go-button { display: none; } + +/* Bottom left page loading status or url preview */ +/* #statuspanel { display: none !important; } */ + + +/* hide address bar*/ + +/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_main_toolbar.css made available under Mozilla Public License v. 2.0 + S ee the above repository for updates as well as full license text. */ * + + /* This style hides the main toolbar and shows it when the cursor is over the tabs toolbar as well as whenever the focus is inside nav-bar, such as when urlbar is focused. */ + + :root{ --uc-navbar-transform: -40px } + :root[uidensity="compact"]{ --uc-navbar-transform: -4px } + + + #navigator-toolbox > div{ display: contents; } + :root[sessionrestored] :where(#nav-bar,#PersonalToolbar,#tab-notification-deck,.global-notificationbox){ + transform: translateY(var(--uc-navbar-transform)) + } + :root:is([customizing],[chromehidden*="toolbar"]) :where(#nav-bar,#PersonalToolbar,#tab-notification-deck,.global-notificationbox){ + transform: none !important; + opacity: 1 !important; + } + + #nav-bar, #nav-bar-customization-target { + height: 30px !important; + } + + #nav-bar-content, #nav-bar-content { + height: 20px !important; + margin-top: 4px !important; + } + + #urlbar { + width: 300px !important; + padding-left: 10px !important; + padding-right: -10px !important; + left: -50px !important; +} + + #nav-bar:not([customizing]){ + opacity: 0; + transition: transform 400ms ease 1.5s, opacity 400ms ease 1.5s !important; + position: relative; + z-index: 2; + } + #titlebar{ position: relative; z-index: 3 } + + /* Show when toolbox is focused, like when urlbar has received focus */ + #navigator-toolbox:focus-within > .browser-toolbar{ + transform: translateY(0); + opacity: 1; + transition-duration: 500ms, 200ms !important; + transition-delay: 0s !important; + } + /* Show when toolbox is hovered */ + #titlebar:hover ~ .browser-toolbar, + #nav-bar:hover, + #nav-bar:hover + #PersonalToolbar{ + transform: translateY(0); + opacity: 1; + transition-duration: 500ms, 200ms !important; + transition-delay: 0s !important; + } + /* This ruleset is separate, because not having :has support breaks other selectors as well */ + #mainPopupSet:has(> #appMenu-popup:hover) ~ #navigator-toolbox > .browser-toolbar{ + transition-delay: 33ms !important; + transform: translateY(0); + opacity: 1; + background-color: #1a1920 !important; + } + + /* Bookmarks toolbar needs so extra rules */ + #PersonalToolbar{ transition: transform 400ms ease 1.5s !important; position: relative; z-index: 1; background-color: #1a1920 !important; } + + /* Move up the content view */ + :root[sessionrestored]:not([inFullscreen],[chromehidden~="toolbar"]) > body > #browser{ margin-top: var(--uc-navbar-transform); } + +/* --- end hide --- */ + + + +#sidebar-header {color: #1a1920 !important; +font-size: 1.2em !important; +font-family: "Dumbledor 3", Times New Roman !important; +padding: 2px 6px 2px 3px !important; +} +#sidebar-header #sidebar-close { +padding: 3px !important; +} +#sidebar-header #sidebar-close .toolbarbutton-icon { +width: 0px !important; +height: 0px !important; +opacity: 0.6 !important; +} + +#TabsToolbar { +font-size: 0.8em !important; +font-family: "Troglodyte" !important; +display: none; +} + + +/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0 + *See the above repository for updates as well as full license text. */ + +/* Show sidebar only when the cursor is over it */ +/* The border controlling sidebar width will be removed so you'll need to modify these values to change width */ + +#sidebar-box{ +--uc-sidebar-width: 30px; +--uc-sidebar-hover-width: 180px; +--uc-autohide-sidebar-delay: 600ms; /* Wait 0.6s before hiding sidebar */ +--uc-autohide-transition-duration: 115ms; +--uc-autohide-transition-type: linear; +position: relative; +min-width: var(--uc-sidebar-width) !important; +width: var(--uc-sidebar-width) !important; +max-width: var(--uc-sidebar-width) !important; +z-index:1; +} + +#sidebar-box[positionend]{ direction: rtl } +#sidebar-box[positionend] > *{ direction: ltr } + +#sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr } +#sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl } + +#main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; } + +#sidebar-splitter{ display: none } + +#sidebar-header{ +overflow: hidden; +color: var(--chrome-color, inherit) !important; +padding-inline: 0 !important; +} + +#sidebar-header::before, +#sidebar-header::after{ +content: ""; +display: flex; +padding-left: 8px; +} + +#sidebar-header, +#sidebar{ +transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important; +min-width: var(--uc-sidebar-width) !important; +will-change: min-width; +} +#sidebar-box:hover > #sidebar-header, +#sidebar-box:hover > #sidebar{ +min-width: var(--uc-sidebar-hover-width) !important; +transition-delay: 0ms !important; +} + +.sidebar-panel{ + background-color: transparent !important; + color: var(--newtab-text-primary-color) !important; +} + +.sidebar-panel #search-box{ + -moz-appearance: none !important; + background-color: rgba(249,249,250,0.1) !important; + color: inherit !important; +} + +/* Add sidebar divider and give it background */ + +#sidebar, +#sidebar-header{ +background-color: inherit !important; +border-inline: 1px solid rgb(80,80,80); +border-inline-width: 0px 1px; +} + +#sidebar-box:not([positionend]) > :-moz-locale-dir(rtl), +#sidebar-box[positionend] > *{ +border-inline-width: 1px 0px; +} + +/* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */ + +#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel{ +inset-inline: auto 0px !important; +} +#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel-label{ +margin-inline: 0px !important; +border-left-style: solid !important; +} diff --git a/profiles/user2/files/firefox/userContent.css b/profiles/user2/files/firefox/userContent.css new file mode 100755 index 0000000..b6d02dc --- /dev/null +++ b/profiles/user2/files/firefox/userContent.css @@ -0,0 +1,126 @@ +/* home page edits */ + +@-moz-document url("about:home"), url("about:newtab"){ + html, body, #root, input { + background-color: #1a1920 !important; + } + + * { /* this is where I enforce the font everywhere */ + font-size: 8pt !important; + font-family: "Lucida Grande", "Classica" !important; + line-height: 9pt !important; + } /* so that my sidebar tabs aren't fucking HUGE */ + + .collapsible-section.ds-layout { + max-height: 400px !important; + background-color: #000 !important; + } + .search-wrapper { + filter: grayscale(80%) !important; + opacity: 0 !important; + vertical-align: middle !important; + } + .personalizeButtonWrapper { + opacity: 0.2 !important; + transition: transform 200ms ease 0.5s, opacity 200ms ease 0.5s !important; + } + .personalizeButtonWrapper:hover { + opacity: 0.7 !important; + transition-duration: 200ms !important; + transition-delay: 0s !important; + } + .search-inner-wrapper { /* begone THOT */ + display:none !important; + width: 300px !important; + min-height: 30px !important; + --newtab-search-icon: 0 !important; + } + .body-wrapper {margin-top: -200px;} + .context-menu-button { /* the button that has the menu to edit your shortcuts */ + margin-right: 10px !important; margin-top: 0px !important; opacity: 0 !important; + background-color: transparent !important; + } + .context-menu-button:hover {opacity: 0.7 !important;} + .top-site-outer, .top-site-inner { + margin-block-end: 0px !important; + background-color: transparent !important; + } + .top-site-outer:hover { + background-color: transparent !important; + } + .top-site-button {padding: 0px !important; background-color:transparent !important;} + + .tile { /* here be buttons */ + filter: grayscale(100%) !important; + background-color: transparent !important; + border: 0px !important; + opacity: 0.1 !important; + transition: 50ms ease 0.4s !important; + vertical-align: middle !important; + } + .tile:hover { + filter: grayscale(50%) !important; + opacity: 0.7 !important; + transition: 50ms ease 0.2s !important; + } + .icon-wrapper { + background-color: transparent !important; + border: 0px !important; + } + + .top-site-button .top-site-icon{ + background-color: transparent !important; + background-size: contain !important; + background-repeat: no-repeat !important; + background-position: center !important; + padding: 0px !important; + border-radius: 0px !important; + } + +/* custom icons so I can have custom+transparency on Home and New Tab pages */ + .top-site-button[href="http://deck.blue"] .top-site-icon{ + background-image: url("https://i.imgur.com/Z8IrhAY.png") !important; + } + .top-site-button[href="http://new.reddit.com"] .top-site-icon{ + background-image: url("https://i.imgur.com/3QIQIeD.png") !important; + } + .top-site-button[href="http://gaiaonline.com"] .top-site-icon{ + background-image: url("https://i.imgur.com/Vp7urqM.png") !important; + } + .top-site-button[href="http://orcanetwork.org"] .top-site-icon{ + background-image: url("https://i.imgur.com/hvKM68l.png") !important; + } + .top-site-button[href="http://whaleresearch.com"] .top-site-icon{ + background-image: url("https://i.imgur.com/uuBDA57.png") !important; + } + .top-site-button[href="http://whale-of-a-porpoise.blogspot.ca"] .top-site-icon{ + background-image: url("https://i.imgur.com/qm2BYfR.png") !important; + } + +/* !!! icon alignment and size fix !!! */ + .icon.icon-pin-small { + width: 0px !important; + } + .top-site-outer .title { + padding-top: 0px !important; + } + .top-site-outer { + margin-block-end: unset !important; + } + .top-site-outer .title span { + visibility: hidden !important; + } + .top-site-outer .title:not(.sponsored) .sponsored-label { + height: 0px !important; + } + .top-site-outer .context-menu-button:hover { + background-color: unset !important; + } + .top-site-outer .context-menu-button { + transition: none !important; + background-color: unset !important; + top: 0px !important; + } + .top-site-outer .default-icon {width:48px !important; height:48px !important;} +} +/* --- home page edits end --- */ diff --git a/profiles/user2/files/justfile b/profiles/user2/files/justfile new file mode 100755 index 0000000..7a6d847 --- /dev/null +++ b/profiles/user2/files/justfile @@ -0,0 +1,6 @@ +gobrr: + nixos-rebuild switch --use-remote-sudo --flake ~/Projects/dotfiles#desktop + + +fuckoff: + shutdown now diff --git a/profiles/user2/files/loop.sh b/profiles/user2/files/loop.sh new file mode 100755 index 0000000..c904110 --- /dev/null +++ b/profiles/user2/files/loop.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +while true ; do date ; natpmpc -a 1 0 udp 60 -g 10.2.0.1 && natpmpc -a 1 0 tcp 60 -g 10.2.0.1 || { echo -e "ERROR with natpmpc command \a" ; break ; } ; sleep 45 ; done diff --git a/profiles/user2/files/modnix.sh b/profiles/user2/files/modnix.sh new file mode 100755 index 0000000..15f2ffa --- /dev/null +++ b/profiles/user2/files/modnix.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +cp /etc/nixos/configuration.nix /etc/nixos/configuration.nix.backup + +sed -i '/services\.printing\.enable = true;/a\ nix.settings.experimental-features = ["nix-command" "flakes"];\n services.openssh.enable = true;' /etc/nixos/configuration.nix +sed -i '/thunderbird/a\ git\n vscode\n tomb' /etc/nixos/configuration.nix + +echo "/etc/nixos/configuration.nix updated successfully." \ No newline at end of file diff --git a/profiles/user3/default.nix b/profiles/user3/default.nix new file mode 100755 index 0000000..c9cdc1e --- /dev/null +++ b/profiles/user3/default.nix @@ -0,0 +1,91 @@ +{ + config, + flake, + pkgs, + lib, + ... +}: +let + inherit (flake) self; + inherit (flake.config.people) user3; + inherit (flake.config.machines) devices; + inherit (flake.config.people.users.${user3}) name paths; + hostname = config.networking.hostName; +in +{ + users = { + users.${user3} = { + description = name; + name = user3; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "adbusers" + "disk" + "libvirtd" + "netdev" + "networkmanager" + "plugdev" + "samba" + "vboxusers" + "wheel" + ]; + }; + }; + home-manager.users = { + ${user3} = { + home = { + username = user3; + homeDirectory = "/home/${user3}"; + file = { + "./.config/scripts/get_weather.sh" = { + source = ./files/get_weather.sh; + executable = true; + }; + ".config/wallpaper" = { + source = ./files/wallpaper; + recursive = true; + }; + "./.config/vesktop/themes/macchiato-theme.css" = { + source = ./files/themes/vesktop/macchiato-theme.css; + }; + }; + sessionVariables = { + VISUAL = lib.getExe pkgs.zed-editor; + GTK_THEME = "catppuccin-macchiato-mauve-compact"; + }; + }; + imports = [ + { + home.stateVersion = config.system.stateVersion; + } + { + imports = [ + self.homeModules."${devices.${hostname}.name}-${user3}" + ]; + } + ]; + }; + }; + systemd.tmpfiles = { + rules = + [ + "d ${paths.path0} 0755 ${user3} users -" + ] + ++ (map (path: "d /home/${user3}/${path} 0755 ${user3} users -") [ + "Files" + "Files/Scripts" + "Files/Games" + "Files/Screenshots" + ]) + ++ (map (path: "R /home/${user3}/${path} 0755 ${user3} users - -") [ + "Desktop" + "Documents" + "Music" + "Pictures" + "Public" + "Templates" + "Videos" + ]); + }; +} diff --git a/profiles/user3/files/get_weather.sh b/profiles/user3/files/get_weather.sh new file mode 100755 index 0000000..2aee731 --- /dev/null +++ b/profiles/user3/files/get_weather.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +for i in {1..5} +do + text=$(curl -s "https://wttr.in/$1?format=1") + if [[ $? == 0 ]] + then + text=$(echo "$text" | sed -E "s/\s+/ /g") + tooltip=$(curl -s "https://wttr.in/$1?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\"}" \ No newline at end of file diff --git a/profiles/user3/files/themes/vesktop/macchiato-theme.css b/profiles/user3/files/themes/vesktop/macchiato-theme.css new file mode 100755 index 0000000..d953df2 --- /dev/null +++ b/profiles/user3/files/themes/vesktop/macchiato-theme.css @@ -0,0 +1 @@ +@import url("https://catppuccin.github.io/discord/dist/catppuccin-macchiato.theme.css"); \ No newline at end of file diff --git a/profiles/user3/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg b/profiles/user3/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg new file mode 100755 index 0000000..da57bcf Binary files /dev/null and b/profiles/user3/files/wallpaper/7yKtaRij2giAj0s09F6gmB8XIje.jpg differ diff --git a/profiles/user3/files/wallpaper/FTDCMyaXoAEUn5h.jpg b/profiles/user3/files/wallpaper/FTDCMyaXoAEUn5h.jpg new file mode 100755 index 0000000..5a4caf1 Binary files /dev/null and b/profiles/user3/files/wallpaper/FTDCMyaXoAEUn5h.jpg differ diff --git a/profiles/user3/files/wallpaper/cat-waves.png b/profiles/user3/files/wallpaper/cat-waves.png new file mode 100755 index 0000000..ded59d8 Binary files /dev/null and b/profiles/user3/files/wallpaper/cat-waves.png differ diff --git a/profiles/user3/files/wallpaper/juliemao-1741428128332-6023.jpg b/profiles/user3/files/wallpaper/juliemao-1741428128332-6023.jpg new file mode 100755 index 0000000..af0dc4d Binary files /dev/null and b/profiles/user3/files/wallpaper/juliemao-1741428128332-6023.jpg differ diff --git a/profiles/user3/files/wallpaper/pinksky.png b/profiles/user3/files/wallpaper/pinksky.png new file mode 100755 index 0000000..9565c67 Binary files /dev/null and b/profiles/user3/files/wallpaper/pinksky.png differ diff --git a/profiles/user3/files/wallpaper/u6ne2q214dx71.jpg b/profiles/user3/files/wallpaper/u6ne2q214dx71.jpg new file mode 100755 index 0000000..58ee466 Binary files /dev/null and b/profiles/user3/files/wallpaper/u6ne2q214dx71.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-0wj757.jpg b/profiles/user3/files/wallpaper/wallhaven-0wj757.jpg new file mode 100755 index 0000000..ffc6074 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-0wj757.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-2ege2g.jpg b/profiles/user3/files/wallpaper/wallhaven-2ege2g.jpg new file mode 100755 index 0000000..ce08958 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-2ege2g.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-4dj2qo.png b/profiles/user3/files/wallpaper/wallhaven-4dj2qo.png new file mode 100755 index 0000000..395be5c Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-4dj2qo.png differ diff --git a/profiles/user3/files/wallpaper/wallhaven-4xq6vv.png b/profiles/user3/files/wallpaper/wallhaven-4xq6vv.png new file mode 100755 index 0000000..1b27934 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-4xq6vv.png differ diff --git a/profiles/user3/files/wallpaper/wallhaven-5dyvy3.jpg b/profiles/user3/files/wallpaper/wallhaven-5dyvy3.jpg new file mode 100755 index 0000000..4ea09fd Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-5dyvy3.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-735xv3.jpg b/profiles/user3/files/wallpaper/wallhaven-735xv3.jpg new file mode 100755 index 0000000..804454c Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-735xv3.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-8xe25y.jpg b/profiles/user3/files/wallpaper/wallhaven-8xe25y.jpg new file mode 100755 index 0000000..b483a4c Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-8xe25y.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-eyrj7o.jpg b/profiles/user3/files/wallpaper/wallhaven-eyrj7o.jpg new file mode 100755 index 0000000..011111a Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-eyrj7o.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-g8ky73.jpg b/profiles/user3/files/wallpaper/wallhaven-g8ky73.jpg new file mode 100755 index 0000000..f10d23b Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-g8ky73.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-j8wzvp.jpg b/profiles/user3/files/wallpaper/wallhaven-j8wzvp.jpg new file mode 100755 index 0000000..667e5db Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-j8wzvp.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-nekxjk.png b/profiles/user3/files/wallpaper/wallhaven-nekxjk.png new file mode 100755 index 0000000..d30c308 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-nekxjk.png differ diff --git a/profiles/user3/files/wallpaper/wallhaven-nryz87.jpg b/profiles/user3/files/wallpaper/wallhaven-nryz87.jpg new file mode 100755 index 0000000..6454932 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-nryz87.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-r7yey1.jpg b/profiles/user3/files/wallpaper/wallhaven-r7yey1.jpg new file mode 100755 index 0000000..6a2754d Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-r7yey1.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-vge32m.jpg b/profiles/user3/files/wallpaper/wallhaven-vge32m.jpg new file mode 100755 index 0000000..aba50bd Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-vge32m.jpg differ diff --git a/profiles/user3/files/wallpaper/wallhaven-vgxgem.jpg b/profiles/user3/files/wallpaper/wallhaven-vgxgem.jpg new file mode 100755 index 0000000..07c0e88 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallhaven-vgxgem.jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg new file mode 100755 index 0000000..789c456 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (1).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg new file mode 100755 index 0000000..b8dc444 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (10).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg new file mode 100755 index 0000000..6e3d274 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (11).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg new file mode 100755 index 0000000..9d03fd8 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (12).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg new file mode 100755 index 0000000..7de6f45 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (13).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg new file mode 100755 index 0000000..b860fc8 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (14).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg new file mode 100755 index 0000000..742fb5f Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (15).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg new file mode 100755 index 0000000..2f9fead Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (16).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg new file mode 100755 index 0000000..65c5a89 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (17).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg new file mode 100755 index 0000000..d284003 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (19).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg new file mode 100755 index 0000000..419cdb6 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (2).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg new file mode 100755 index 0000000..0cda78a Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (20).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg new file mode 100755 index 0000000..c9a36ac Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (21).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg new file mode 100755 index 0000000..625826c Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (22).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg new file mode 100755 index 0000000..571de4c Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (23).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg new file mode 100755 index 0000000..e7f5f67 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (24).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg new file mode 100755 index 0000000..32c914a Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (26).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg new file mode 100755 index 0000000..bc28661 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (27).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg new file mode 100755 index 0000000..c0d943f Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (28).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg new file mode 100755 index 0000000..4e960b2 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (29).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg new file mode 100755 index 0000000..bb8041d Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (3).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg new file mode 100755 index 0000000..257f324 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (30).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg new file mode 100755 index 0000000..26a8dea Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (31).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg new file mode 100755 index 0000000..b689877 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (32).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg new file mode 100755 index 0000000..42440d5 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (34).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg new file mode 100755 index 0000000..54a143b Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (35).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg new file mode 100755 index 0000000..2317225 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (37).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg new file mode 100755 index 0000000..937fcf5 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (38).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg new file mode 100755 index 0000000..3714ec7 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (4).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg new file mode 100755 index 0000000..7ad7ef4 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (5).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg new file mode 100755 index 0000000..e280f63 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (6).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg new file mode 100755 index 0000000..6952e52 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (7).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg new file mode 100755 index 0000000..b58c9fd Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (8).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg new file mode 100755 index 0000000..338ea49 Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper (9).jpg differ diff --git a/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper.jpg b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper.jpg new file mode 100755 index 0000000..e08dc6e Binary files /dev/null and b/profiles/user3/files/wallpaper/wallpaperflare.com_wallpaper.jpg differ diff --git a/profiles/user3/files/wallpaper/yrTphE7NymvE-bSD.mp4 b/profiles/user3/files/wallpaper/yrTphE7NymvE-bSD.mp4 new file mode 100755 index 0000000..b23b561 Binary files /dev/null and b/profiles/user3/files/wallpaper/yrTphE7NymvE-bSD.mp4 differ diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml new file mode 100755 index 0000000..be2263f --- /dev/null +++ b/secrets/secrets.yaml @@ -0,0 +1,52 @@ +ssh: + private: ENC[AES256_GCM,data:XJk/gjPkFeSZtPkKYS2vRHqMY/X5zRaDlS4UwzUvjm9MvTgdhoXUlqvFC0Dl5SZhRlY+XXAuG7gIIUESzCFWQKdOoUcto3r0WSuIm9EwLKXnnaHemeFVHYgZU9Rz45PK6yFWUC06+n56b2A1dFXftjeXcCqaQrT/jk3RDSHmhW9u7QgDmhhaybxXOrzkup2U8kjhrMmRBcf4xP//nihuzHcyYX75ONr56bgkjl6gpZTfZrn2ad8b+4iGn+rElzf7RHAG0mwTeEX2kYRyafaanGuc2xTnZubBAYDnc1eM6T99PXC0iWh/lUKc1zG1l18UchWzgvl3sPK0Cb2/5aaFMUk2ET6kVOlpKyGc94MRpyv3iUi8soFjh34sWH3mFtec2OWfIxDhoVfZoc2hmP2Hflfjp7acwaMskFBHaCSO2DGtNmN3hSUhAAeLx8OZupSIJmDVpq00qKUbN+5z4K78AdGuUOP07cE889evNniCHLP6yPav7tIulnBS9lD2U+CbqF7vMtdZx/eYFwJjmMtE,iv:JxSytvXKWLHDedlE0Wq5YpPUnfb0HoQgKJ2bt1Z8yqk=,tag:MjOoUSWsHWHgxp0yu9YQFA==,type:str] + public: ENC[AES256_GCM,data:Cn4hutHHeptbefHOKK7zv5TmveGOqfHAwGHogDq9sRmeb+b1lzHwj7qvg8lcnlJtIo4qS+TrKtSj5ZCsPNXOhWG1rkk97gTfPMbcxj5f1O3WJigL2wsrB2cQgc5UsA==,iv:ID4zRdr/efClOAHbXzxG1bNuJR0A2qbydzGlMhvEcRE=,tag:qbIoaGb+RXxRRkkQtuX7/A==,type:str] + hosts: ENC[AES256_GCM,data:trhzR1gQvSFsI0AdGlestwFU4HbocBjLS5b8Vmlv5tOHR47JlMCVekDEtkQ9DTl/OGXB/5AynGtd2vUkso37noPiqhPXCNwGfhc3np6IKGYA5vYd3xxZdH3XCJDTjG046VhYX5MA/d6kbReX9PtOxfnglGFLIxwPB0GZ7WZdPDqGf97HHb0ivdRho8UzC3ea2IcDpUwkRo30r+wMzCO2oKB7A3alcXHRi5UuYQ5mW1zDhUC/NS7Q9xkyOztZ++E6pH77crnPI5Z41M96mWkbVu65/kW4NOAp1t7B5VL6qi8XBt6QL9pM/u3a93QuCOZ6uN+JwbEYQt87Y7vPrvcO8711OyMyyNJKm+0Rr8Li+Lp/X5dS++at5eP3NXJhCBpG0cNa1DM/2PwQbs+5shslDfkssR8RAdIgigWQeIVSsUBZcAwU+YwFtPC5sXO1Julmey+KBv/+9dOmlJ3pmRLoGa0KkQixzZZzfRErXfMSn+DJpsZtMzBFzd0AwULw6opAOWCdlk9rWMd4JInDusf7p3PdpCm2Sv31zlBCGWUNxWv59+PdTZoLuL6yAxj+qdNpqzJdLSSKEcPB1whrxwiVlR44B6Ws0vuqhPxuEhd/BIcwPzrD9u7i2hYR+Ox4FItBmwuysiyNqfPs8/FgOOwpB4WjhbxwVr95W9o5N3QZGoTqGKYLEcmOwcYo7b86GLbwpxB0PPgVFWoZUqBZDC6nBIkCCGv/4xWBrQlzftyfcDOE+qlZARPdssixo4BZ4q6KJ+hbcwXGNnJub2t043LVuoOOM/OazcNe3T2eftvFM2TKJEHO6VdJ0G3foxwtGvysMp4R08ysgcr/VZ/tjcRp8FO/2LIR68f+ZtY4nIQBLTis+5JVqbUbMMZAjNSWuj2MNfcE6DWAcj8P4druqA0539KXtc4xDCqZu30IzfAkyOWvHnTaNHLw1xhv5gF/07sHqk+QxhpDKJrwUwQfZVYCrsBAJjBDAGwEfyQKlZBchI4zFAJ3Xs43WbwXQR35+5HTF1ZTwakJ9MqwQxD+jN24wNm9XAPKzvRoy/LAAtLpoH/spylBF7+CjZpGxXkO/Y8vhzPnw7WB7BnNsn4mqP7gFltNL6dHNA3i+mfZSCJkqieqIhKa1LoWgbvdVcQAs7VGVvNPaRsjZVYFvezxvem7AAsIxa/imQ6r17Tmcy3/50FjeoAlE8+Lxp4wDyLZjtX8rTfOjS4B1O3vfa4q6wnbOeuep+AWnA4U4qyr+KrzJnmGCnVpnbqKoy5k26odvU29sM7m1ZWE+uEAatUfSu432vLbzj6jct5wzyKJFIylpPXj3IeojrmISbPB9P8/l2I5au5zyQWW6nAZ5E6c7w23i8X6/Kc9u2XR9BQTg/eznzwKhExLnR9HOWiE4lqQkXPzTWqzfDDt3Fxya+Lu7YbrYVfAN/pf963kKjw1T5LTcLWBmR0WZTMnLprtBAI1LoBQaxE9pkfIx4NMTfWBP23IppkM11HBktvzmR3sM/F0lX7aAPLCA75nmSoa1BdC5dPFZRmFqxRI9TtHeh26PBXugZ7Bgemr7QBh1+dqgWyTjkw/FB100/yVtqvnb5qoTUyidd5oH9331TS2YXkNAB2jjfBytpfw5ReMfmXxYon5XS56J5/ghl6ZmV5XhoZZ56H9xrDFYrsVvoAHv6o77Ojh3IxXEFaJ9Wx2D/bzX0zks1LTIM4lkrRT9gwjx/WF2YEfhcx8s8XjjAPOR6uCxvlc4GxQ4rWbdTIq,iv:l4WIY3l7UBTY3Dkt2lLJ8DLf2f8zWFGtq/3IXj5rfdo=,tag:Ni6q4YAzd+Y/BPM8tKL2HA==,type:str] +network: + synology: ENC[AES256_GCM,data:r0Aor25K6IuywAq5Px9JasWpnYzAA87ffA1k/97GEqMRkb6V6VYW1Q1EoEGNnBoa5o6KBtHk0WY=,iv:IeZMBwKGOevgB3bgnSsF6JJ6ntcJa5fe5irVUuMOGwY=,tag:9JWqeKa0g7YzqpKy1VLFEA==,type:str] + server: ENC[AES256_GCM,data:EFsmXNkuf5OAMh8hjfZTixmmdjqBNIME9JjQC8azeCwcMVInm8bWdxE4OqFmxOk9MAU=,iv:pI6WeM2aQC+7vx1Xmp5O2rikqNLgzuEOg+Lo7TqFQxU=,tag:ElcA8mn9dx+IjIf38nKT5A==,type:str] + fallaryn: ENC[AES256_GCM,data:O77hH3STB6zpl0b9iXsVu9OOrlLKUwfs2qI9hdqX4kMuBs3XgT/xsQ==,iv:RDKsuJoy+LIyADMc3bgOEmLKdXtu6kad2aeVetuZdJI=,tag:MrpCZ+iJUnGIjeHMgcYG6Q==,type:str] + garnet: ENC[AES256_GCM,data:N8sAdjTAiubQihKrtdCkaJQBKkz6/kNdeATiaZXRhlP/HLg7zg==,iv:8QP1HnGSUGHpkwBwQY2Z0gZ6tYaK7XzMuxXexY6QQaU=,tag:fHzPh9lvqB2BmuSkVH5Ojg==,type:str] +mastodon-smtp: ENC[AES256_GCM,data:8/uQKw0bmDrepKXSv0ausw==,iv:/Dn47RsjYSjGgFEf3BrLKrosTwqzpv4J5SCNFKczdIw=,tag:7GN8oYvXiZuRCPU6mh5Slg==,type:str] +mastodon-database: ENC[AES256_GCM,data:qPOU8yGqEQWuMJ4E/fCc+vfKp+YZONb17ZIDHXYZ9RY=,iv:HzVd2ptZBtpRA/XA593WTNL3xJx97hvNx49zIZPBlhQ=,tag:KGZ7Mw2M5O9DBhB+fv+w1Q==,type:str] +mastodon-redis: ENC[AES256_GCM,data:aEEOGmyLin80X1uNiLLIuCSGlGjYX9vOl45GuxwlJqE=,iv:3qaZAqwm6tLnB1vCtZ2ZotaZO4/XmQKLe/I+pzqbJj0=,tag:K1y1QoLgGRvi8oJrzcakhQ==,type:str] +peertube-smtp: ENC[AES256_GCM,data:rBmjyf4J7fNbnKICkUIVIw==,iv:wbyTkVmBJLIB4yZibVpr3+6Jn/FMEQSSi7UFCtiCkUg=,tag:ByMTXTyyiys9ONekQGxsYw==,type:str] +peertube-database: ENC[AES256_GCM,data:nm0bHwTcT+ROZc2BC9jx+tXWjZ3689rdn4fdYW+7JTU=,iv:EeQVBAIXPut9gs+I9WpRf7L3f7ACTeTWycUFIKAneKk=,tag:QjGQmZ3zMAgB/WDbxTZVIQ==,type:str] +peertube-redis: ENC[AES256_GCM,data:SQoPzPjgf4YN9dhvO0wo2DEra7cTgfZBx4vCBpNVSXI=,iv:mcCwYtE9E/Mb4V0j9NnU9WhaUMeBpX7BOcc8HGDiEvI=,tag:CsSiS4peZhnZ22uNtUC44w==,type:str] +peertube-root: ENC[AES256_GCM,data:BR0pmqEYYJuDqK7fstyW/hvh8V1GQXVHP24iz2eDeho500IbWaMuDxkNQyfInmIfjC3YvfsHME3S,iv:EgaLKBHYrklF+q5jBPvGKFYJosZxFFMXElTcyKU0ypQ=,tag:PztyBdK5OzeEDvQi/yqRIg==,type:str] +peertube-secret: ENC[AES256_GCM,data:Of4UsWGTXd+uzHE4XkxQOLKBbDd0sQHWQrLgxmn8C9bHgEB85ZnSqOe04IZ4chYKheuzBQ4Vg7pYfGFVBDjx8Q==,iv:cXuVrmQOEHtq7Q6+vzPXKdiuYjLx9hjsd3bCHpBQBqw=,tag:xL8us1XLJsdON/O+BG+xpQ==,type:str] +forgejo-database: ENC[AES256_GCM,data:Stnd+vsoBDK0eLmfgaNaSdO6qY0vF1d0WgrAw1U451I=,iv:7CHPXUPXkTXP0GVqHPK3KavysbSOKuUhJ5EoeAh5Mp4=,tag:iqASITas49wrqCRN8TjLIQ==,type:str] +forgejo-smtp: ENC[AES256_GCM,data:hp1MPgzdSdgBZ47KQ+/QvQ==,iv:l/C7FFvyxPo/ndJWhOSThYUGbUZnk1WBdpCGNtnL4iE=,tag:61OGP00MTPYfmoq8yK4vEQ==,type:str] +discord-token: ENC[AES256_GCM,data:PQ4VEKZUCFdSau9hHj52GkdKTnc1sdNIOrJjWbW0Wu9gNAluOutbEYd21UjP9nW/8ayPrId5dSGs6pqXQEIxT8KmnYVQXQYQ6i5xx9Ciq77pU1MipXE=,iv:lpOWnuySeLDiZMSjbsnQJCgsC3PG3v9hmaPVenlmF5g=,tag:Wdpwagj6iiiif5MZiW+yzQ==,type:str] +minecraft-pass: ENC[AES256_GCM,data:0natV6dEpItFp5zsUKqgVMZLLmqRLBEf,iv:Bc7RTXnpdec0wn25Rb7SkVTf5BjXzq3YCXcjwrC7V9k=,tag:Og5qN94G6pHdpIk6YDg1ZA==,type:str] +vaultwarden: + env: ENC[AES256_GCM,data:fsL+z/fSLmlhjdWJrIZ2yuF74AOo0HEnw52KMNa8lwrMRG3r6bEpjg3PD9dQ8tpqWq207Tp1QKWhYSjzmwMYjmN/7CiJpkuWMS37uWQ0bUcZN0zit+ko6g==,iv:MM9DST+uw8MdA/fnVdX+O2QtqVztQDx00DBm2c9cHSE=,tag:KTzlNSNuOY2AS4sZdvdQbg==,type:str] +dns: + namecheap: ENC[AES256_GCM,data:Afxyf4cHvdnPIXYoPN3viBOzzqUOeRs3YjQ5ugerlnL9H4iSf/iAsxyzHYysOgZ/9xc0OWt6G6A7cEZHW4i82MX1+mLbvWN5ir1iHL73RtesC14=,iv:3XMTQ4TNL7iXPYFLSa+BapSgqILYuM6ZaQLMQZSJ2pc=,tag:PO69wRhCoey+CwPgnOOR6A==,type:str] +nextcloud-pass: ENC[AES256_GCM,data:BJWpsEtnezl67vQWwV9WSdpPAYLg3eOXAZ301A382GE=,iv:+1LrBtbjCBcVC7m/fSbXzPnBxbVmpv+2opPoxEfcgjY=,tag:ArMw4yv+Zt6Lhm7CaS5hMg==,type:str] +nextcloud-user0: ENC[AES256_GCM,data:yUZruPJ4s2Svvh6Q0f4C4lgcKCcWJDMw8CpT8cXv3m4=,iv:wo9Cl1OsJY6UOvrJw/UHxtcBKykaYQ69Mue7QYyBXRY=,tag:83XvKKJ9V2aBhznzBkzNEQ==,type:str] +nextcloud-user1: ENC[AES256_GCM,data:6EsbSeWWftPjZQM=,iv:LTcx6fx55d3+SepFIoy/6cBdbgaauDeo0gvq9ACCtHA=,tag:uzoATR3ZL2Uk5z6aMiD/yw==,type:str] +nextcloud-user2: ENC[AES256_GCM,data:axrWMmouq5gwqdGL,iv:BPHEn47z2g7gocKO4g5vV4ZSGb+AMA3vGYheAy1zR5Q=,tag:QOWg4fdKxMhGk2qRehH2EQ==,type:str] +nextcloud-user3: ENC[AES256_GCM,data:g6ldEdtBuEmPAQYAQfaO,iv:6fElE2vZh9l/KgJuNevklpIlZZdqGHgwhnOzq1n3ojE=,tag:T0Q1IkdVTeW2T1FmGnjz8A==,type:str] +claude-api-key: ENC[AES256_GCM,data:QzGJPBnqx4PrDjNvGeyjl0B/W9pkBS4YWK/lrDK4sx0/eBbwMk2qvi03wOhVfvz71UVRpDIZ0F3eVtB8h8Nr94Ha/8IlFQtKxrh60XIzUs/GLB2jKZursZny8IjqZMrt9YHFOphqAWawB33g,iv:XKPqQ0sGukhy0bPXATYwjJMAfSkXdeanc4kULb5TWmA=,tag:vmH+pzU5qoOF5W0fhVfhDA==,type:str] +searx-key: ENC[AES256_GCM,data:kzKWa4xCKDEWocyMmK8FWyAqHM7BuJ1f63XFfO8Dtig=,iv:Vs27/ri4nBzJ/A0LnxsCZD/kYraFZ6tD63VhUqYFwx8=,tag:8gx+j7RenuRzjj0AY5v8uQ==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiWlRVVlFVWXQ1M0hqNzBT + QVppYmNWaGFXRWlkYTNXUG1hbktUQVY2ekJnClY0ZE9rOW1TNW9MdG5RNENMSHRD + OUtqR0JtaXgyOUREZE5tZjMwOHR2L00KLS0tIE9WTm9FVXVJb1JsWndhRndGdmZI + bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD + aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-03-08T06:46:18Z" + mac: ENC[AES256_GCM,data:bFmkUxQE7Jl6I/FdpsWzbAu5/g9rLYH5C9jRRwY0ln+ZAANXaxfEYj5oeMZA0lDdgCJ07Hnt0RZdyYp/jyNzY+om16qKqRxv6qpqE89jfK937LsMxc6HJcuGQQcA/1QgSCU9OLWqdbDZxik3twemQd3aPAaHLF1ZEM7tx0gCOgQ=,iv:NizgZd2mb5sXm7oxRcpVKRAIyw75dASuP0eGzhBKOM8=,tag:K0rzvjQFB++gioKobt1Sow==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.4 diff --git a/systems/ceres/config/boot.nix b/systems/ceres/config/boot.nix new file mode 100755 index 0000000..6f25045 --- /dev/null +++ b/systems/ceres/config/boot.nix @@ -0,0 +1,43 @@ +{ + pkgs, + config, + ... +}: +{ + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = [ + "ntfs" + ]; + initrd = { + availableKernelModules = [ + "nvme" + "ahci" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + kernelModules = [ + ]; + }; + + kernelModules = [ + "kvm-amd" + "vfio-pci" + "v4l2loopback" + ]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/ceres/config/filesystem.nix b/systems/ceres/config/filesystem.nix new file mode 100755 index 0000000..b7ce342 --- /dev/null +++ b/systems/ceres/config/filesystem.nix @@ -0,0 +1,52 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) + user0 + ; + inherit (flake.config.machines.devices) + ceres + ; +in +{ + fileSystems = + let + storageDrives = [ + "storage0" + ]; + + storageMounts = storage: { + name = "${ceres.${storage}.mount}"; + value = { + device = ceres.${storage}.device; + fsType = "ext4"; + options = ceres.${storage}.options; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/de4e681b-0667-4bf8-8d6e-c50894aa41cd"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/C68D-B1C0"; + fsType = "vfat"; + }; + } + // (builtins.listToAttrs (map storageMounts storageDrives)); + + swapDevices = [ + { device = "/dev/disk/by-uuid/259fcc06-912c-4bd3-b781-8f77449e935a"; } + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${ceres.storage0.mount} 2775 root root -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/ceres/config/graphics.nix b/systems/ceres/config/graphics.nix new file mode 100755 index 0000000..b67a5df --- /dev/null +++ b/systems/ceres/config/graphics.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + hardware = { + graphics = { + enable = true; + extraPackages = builtins.attrValues { + inherit (pkgs) + amdvlk + ; + inherit (pkgs.rocmPackages.clr) + icd + ; + }; + extraPackages32 = builtins.attrValues { + inherit (pkgs.driversi686Linux) + amdvlk + ; + }; + }; + }; + boot.initrd.kernelModules = [ + "amdgpu" + ]; +} diff --git a/systems/ceres/config/hardware.nix b/systems/ceres/config/hardware.nix new file mode 100755 index 0000000..60e08be --- /dev/null +++ b/systems/ceres/config/hardware.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + hardware = { + firmware = [ + pkgs.rtl8761b-firmware + ]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/ceres/config/networking.nix b/systems/ceres/config/networking.nix new file mode 100755 index 0000000..0892600 --- /dev/null +++ b/systems/ceres/config/networking.nix @@ -0,0 +1,42 @@ +{ + lib, + flake, + ... +}: +let + inherit (flake.config.machines.devices) ceres; +in +{ + networking = { + hostName = ceres.name; + networkmanager.enable = true; + nftables.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + 22 # SSH + 25 # SMTP + 139 # SMTP + 587 # SMTP + 2525 # SMTP + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + publish = { + enable = true; + userServices = true; + }; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/ceres/config/sops.nix b/systems/ceres/config/sops.nix new file mode 100755 index 0000000..3534cf3 --- /dev/null +++ b/systems/ceres/config/sops.nix @@ -0,0 +1,16 @@ +{ flake, ... }: +let + inherit (flake.config.people) + user0 + ; +in +{ + sops = { + secrets = { + "discord-token" = { + path = "/home/${user0}/projects/zookeeper/.env"; + owner = user0; + }; + }; + }; +} diff --git a/systems/ceres/default.nix b/systems/ceres/default.nix new file mode 100755 index 0000000..d1f0003 --- /dev/null +++ b/systems/ceres/default.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +let + configPath = ./config; + + ceresImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); +in +{ + imports = ceresImports; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/charon/config/boot.nix b/systems/charon/config/boot.nix new file mode 100755 index 0000000..cc3f996 --- /dev/null +++ b/systems/charon/config/boot.nix @@ -0,0 +1,44 @@ +{ + pkgs, + config, + ... +}: +{ + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = [ + "ntfs" + ]; + initrd = { + network.openvpn.enable = true; + availableKernelModules = [ + "nvme" + "ahci" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + kernelModules = [ + ]; + }; + + kernelModules = [ + "kvm-amd" + "vfio-pci" + "v4l2loopback" + ]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/charon/config/filesystem.nix b/systems/charon/config/filesystem.nix new file mode 100755 index 0000000..0a7cbd4 --- /dev/null +++ b/systems/charon/config/filesystem.nix @@ -0,0 +1,30 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) user1; + inherit (flake.config.machines.devices) charon; +in +{ + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/0457d426-f166-4f35-b77b-93321dca2581"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/1703-D452"; + fsType = "vfat"; + options = charon.boot.options; + }; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/bedf4922-fa86-403a-846c-7d900dfb9086"; } + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user1}.home.homeDirectory} 0755 ${user1} users -" + ]; +} diff --git a/systems/charon/config/graphics.nix b/systems/charon/config/graphics.nix new file mode 100755 index 0000000..c2bfd98 --- /dev/null +++ b/systems/charon/config/graphics.nix @@ -0,0 +1,12 @@ +{ + hardware = { + graphics = { + enable = true; + extraPackages = [ ]; + extraPackages32 = [ ]; + }; + }; + boot.initrd.kernelModules = [ + ]; + services.xserver.videoDrivers = [ "modesetting" ]; +} diff --git a/systems/charon/config/hardware.nix b/systems/charon/config/hardware.nix new file mode 100755 index 0000000..448923f --- /dev/null +++ b/systems/charon/config/hardware.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + hardware = { + firmware = builtins.attrValues { + inherit (pkgs) + rtl8761b-firmware + ; + }; + enableAllFirmware = true; + cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/charon/config/networking.nix b/systems/charon/config/networking.nix new file mode 100755 index 0000000..64ecc59 --- /dev/null +++ b/systems/charon/config/networking.nix @@ -0,0 +1,35 @@ +{ + lib, + flake, + ... +}: +let + inherit (flake.config.machines.devices) + charon + ; +in +{ + networking = { + hostName = charon.name; + networkmanager.enable = true; + nftables.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/charon/default.nix b/systems/charon/default.nix new file mode 100755 index 0000000..3882556 --- /dev/null +++ b/systems/charon/default.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +let + configPath = ./config; + + desktopImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); +in +{ + imports = desktopImports; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/deimos/config/boot.nix b/systems/deimos/config/boot.nix new file mode 100755 index 0000000..6f25045 --- /dev/null +++ b/systems/deimos/config/boot.nix @@ -0,0 +1,43 @@ +{ + pkgs, + config, + ... +}: +{ + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = [ + "ntfs" + ]; + initrd = { + availableKernelModules = [ + "nvme" + "ahci" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + kernelModules = [ + ]; + }; + + kernelModules = [ + "kvm-amd" + "vfio-pci" + "v4l2loopback" + ]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/deimos/config/filesystem.nix b/systems/deimos/config/filesystem.nix new file mode 100755 index 0000000..8f1f5a3 --- /dev/null +++ b/systems/deimos/config/filesystem.nix @@ -0,0 +1,91 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) + user0 + user1 + ; + inherit (flake.config.machines.devices) + deimos + synology + ceres + ; + inherit (flake.config.services.instances) + samba + jellyfin + audiobookshelf + ; + + synologySecrets = config.sops.secrets."network/synology".path; + ceresSecrets = config.sops.secrets."network/server".path; +in +{ + fileSystems = + let + synologyDrives = [ + "folder0" + "folder1" + "folder2" + ]; + + sambaDrives = [ + "samba0" + ]; + + sambaFolders = [ + audiobookshelf.name + jellyfin.name + ]; + + synologyMounts = synologyDrive: { + name = "${synology.${synologyDrive}.mount}"; + value = { + device = synology.${synologyDrive}.device; + fsType = "cifs"; + options = synology.${synologyDrive}.options ++ [ + "credentials=${synologySecrets}" + ]; + }; + }; + + sambaMounts = sambaDrive: folder: { + name = "${ceres.${sambaDrive}.mount}/${folder}"; + value = { + device = "${ceres.${sambaDrive}.device}/${folder}"; + fsType = "cifs"; + options = ceres.${sambaDrive}.options ++ [ + "credentials=${ceresSecrets}" + ]; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/c9a82c93-1da4-4cd1-a1fa-26483271a2bb"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/71CA-765A"; + fsType = "vfat"; + options = deimos.boot.options; + }; + } + // (builtins.listToAttrs (map synologyMounts synologyDrives)) + // (builtins.listToAttrs ( + builtins.concatMap (drive: map (folder: sambaMounts drive folder) sambaFolders) sambaDrives + )); + + swapDevices = [ + { device = "/dev/disk/by-uuid/74007bf1-6e2f-425e-99fa-d35990f4ea37"; } + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${config.home-manager.users.${user1}.home.homeDirectory} 0755 ${user1} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/deimos/config/graphics.nix b/systems/deimos/config/graphics.nix new file mode 100755 index 0000000..b67a5df --- /dev/null +++ b/systems/deimos/config/graphics.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + hardware = { + graphics = { + enable = true; + extraPackages = builtins.attrValues { + inherit (pkgs) + amdvlk + ; + inherit (pkgs.rocmPackages.clr) + icd + ; + }; + extraPackages32 = builtins.attrValues { + inherit (pkgs.driversi686Linux) + amdvlk + ; + }; + }; + }; + boot.initrd.kernelModules = [ + "amdgpu" + ]; +} diff --git a/systems/deimos/config/hardware.nix b/systems/deimos/config/hardware.nix new file mode 100755 index 0000000..60e08be --- /dev/null +++ b/systems/deimos/config/hardware.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + hardware = { + firmware = [ + pkgs.rtl8761b-firmware + ]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/deimos/config/networking.nix b/systems/deimos/config/networking.nix new file mode 100755 index 0000000..76d482e --- /dev/null +++ b/systems/deimos/config/networking.nix @@ -0,0 +1,37 @@ +{ + lib, + flake, + ... +}: +let + inherit (flake.config.machines.devices) + deimos + ; +in +{ + networking = { + hostName = deimos.name; + networkmanager.enable = true; + nftables.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + 22 # SSH + 55771 + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/deimos/config/sops.nix b/systems/deimos/config/sops.nix new file mode 100755 index 0000000..45e8114 --- /dev/null +++ b/systems/deimos/config/sops.nix @@ -0,0 +1,27 @@ +{ flake, ... }: +let + inherit (flake.config.people) + user1 + ; +in +{ + sops = { + secrets = { + "network/synology" = { + path = "/var/lib/secrets/synology"; + owner = "root"; + mode = "600"; + }; + "network/server" = { + path = "/var/lib/secrets/server"; + owner = "root"; + mode = "600"; + }; + "network/${user1}" = { + path = "/var/lib/secrets/${user1}"; + owner = "root"; + mode = "600"; + }; + }; + }; +} diff --git a/systems/deimos/default.nix b/systems/deimos/default.nix new file mode 100755 index 0000000..a3744f2 --- /dev/null +++ b/systems/deimos/default.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +let + configPath = ./config; + + deimosImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); +in +{ + imports = deimosImports; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/mars/config/boot.nix b/systems/mars/config/boot.nix new file mode 100755 index 0000000..cc3f996 --- /dev/null +++ b/systems/mars/config/boot.nix @@ -0,0 +1,44 @@ +{ + pkgs, + config, + ... +}: +{ + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = [ + "ntfs" + ]; + initrd = { + network.openvpn.enable = true; + availableKernelModules = [ + "nvme" + "ahci" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + kernelModules = [ + ]; + }; + + kernelModules = [ + "kvm-amd" + "vfio-pci" + "v4l2loopback" + ]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/mars/config/filesystem.nix b/systems/mars/config/filesystem.nix new file mode 100755 index 0000000..d6c0475 --- /dev/null +++ b/systems/mars/config/filesystem.nix @@ -0,0 +1,98 @@ +{ + flake, + config, + ... +}: +let + inherit (flake.config.people) user0 user1 user3; + inherit (flake.config.machines.devices) mars ceres synology; + inherit (flake.config.services.instances) samba jellyfin audiobookshelf; + synologySecrets = config.sops.secrets."network/synology".path; + ceresSecrets = config.sops.secrets."network/server".path; +in +{ + fileSystems = + let + synologyDrives = [ + "folder0" + "folder1" + "folder2" + "folder3" + ]; + + storageDrives = [ + "storage0" + "storage1" + ]; + + sambaDrives = [ + "samba0" + ]; + + sambaFolders = [ + audiobookshelf.name + jellyfin.name + ]; + + synologyMounts = synologyDrive: { + name = "${synology.${synologyDrive}.mount}"; + value = { + device = synology.${synologyDrive}.device; + fsType = "cifs"; + options = synology.${synologyDrive}.options ++ [ + "credentials=${synologySecrets}" + ]; + }; + }; + + storageMounts = storageDrive: { + name = "${mars.${storageDrive}.mount}"; + value = { + device = mars.${storageDrive}.device; + fsType = "ext4"; + options = mars.${storageDrive}.options; + }; + }; + + sambaMounts = sambaDrive: folder: { + name = "${ceres.${sambaDrive}.mount}/${folder}"; + value = { + device = "${ceres.${sambaDrive}.device}/${folder}"; + fsType = "cifs"; + options = ceres.${sambaDrive}.options ++ [ + "credentials=${ceresSecrets}" + ]; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/1de87c26-c123-44c0-9c9b-6d2480bdeb7d"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/6A1F-3641"; + fsType = "vfat"; + options = mars.boot.options; + }; + } + // (builtins.listToAttrs (map synologyMounts synologyDrives)) + // (builtins.listToAttrs (map storageMounts storageDrives)) + // (builtins.listToAttrs ( + builtins.concatMap (drive: map (folder: sambaMounts drive folder) sambaFolders) sambaDrives + )); + + swapDevices = [ + { device = "/dev/disk/by-uuid/8b1d43a7-baf8-4d15-a1ad-dc0c9dda6970"; } + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${config.home-manager.users.${user1}.home.homeDirectory} 0755 ${user1} users -" + "Z ${config.home-manager.users.${user3}.home.homeDirectory} 0755 ${user3} users -" + "Z ${mars.storage0.mount} 0755 ${user0} users -" + "Z ${mars.storage1.mount} 0755 ${user0} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/mars/config/graphics.nix b/systems/mars/config/graphics.nix new file mode 100755 index 0000000..84429f1 --- /dev/null +++ b/systems/mars/config/graphics.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: +{ + hardware = { + graphics = { + enable = true; + enable32Bit = true; + extraPackages = builtins.attrValues { + inherit (pkgs) + amdvlk + ; + inherit (pkgs.rocmPackages.clr) + icd + ; + }; + extraPackages32 = builtins.attrValues { + inherit (pkgs.driversi686Linux) + amdvlk + ; + }; + }; + }; + boot.initrd.kernelModules = [ + "amdgpu" + ]; +} diff --git a/systems/mars/config/hardware.nix b/systems/mars/config/hardware.nix new file mode 100755 index 0000000..41a7808 --- /dev/null +++ b/systems/mars/config/hardware.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + hardware = { + firmware = builtins.attrValues { + inherit (pkgs) + rtl8761b-firmware + ; + }; + enableAllFirmware = true; + ledger.enable = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/mars/config/networking.nix b/systems/mars/config/networking.nix new file mode 100755 index 0000000..ffb1c73 --- /dev/null +++ b/systems/mars/config/networking.nix @@ -0,0 +1,42 @@ +{ + lib, + flake, + ... +}: +let + inherit (flake.config.machines.devices) + mars + ; +in +{ + networking = { + hostName = mars.name; + networkmanager.enable = true; + nftables.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + 22 # SSH + 4333 # Feishin + 2234 # Soulseek + 3131 # Deskreen + 1234 # Elm-land server + 5037 # ADB Server + 44363 + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/mars/config/sops.nix b/systems/mars/config/sops.nix new file mode 100755 index 0000000..376faf3 --- /dev/null +++ b/systems/mars/config/sops.nix @@ -0,0 +1,29 @@ +{ flake, ... }: +let + inherit (flake.config.people) + user0 + ; + inherit (flake.config.people.users.${user0}) + paths + ; +in +{ + sops = { + secrets = { + "network/synology" = { + path = "/var/lib/secrets/synology"; + owner = "root"; + mode = "600"; + }; + "network/server" = { + path = "/var/lib/secrets/server"; + owner = "root"; + mode = "600"; + }; + "discord-token" = { + path = "${paths.path0}/zookeeper/.env"; + owner = user0; + }; + }; + }; +} diff --git a/systems/mars/default.nix b/systems/mars/default.nix new file mode 100755 index 0000000..9cbf0e4 --- /dev/null +++ b/systems/mars/default.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +let + configPath = ./config; + + marsImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); +in +{ + imports = marsImports; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/venus/config/boot.nix b/systems/venus/config/boot.nix new file mode 100755 index 0000000..6344c96 --- /dev/null +++ b/systems/venus/config/boot.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + ... +}: +{ + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = [ "ntfs" ]; + initrd = { + availableKernelModules = [ + "amdgpu" + "nvme" + "ahci" + "xhci_pci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + kernelModules = [ ]; + }; + + kernelModules = [ + "kvm-amd" + "vfio-pci" + "v4l2loopback" + ]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = false; + grub = { + enable = true; + device = "nodev"; + useOSProber = true; + efiSupport = true; + }; + }; + }; +} diff --git a/systems/venus/config/filesystem.nix b/systems/venus/config/filesystem.nix new file mode 100755 index 0000000..c517920 --- /dev/null +++ b/systems/venus/config/filesystem.nix @@ -0,0 +1,53 @@ +{ + config, + flake, + ... +}: +let + inherit (flake.config.people) user2; + inherit (flake.config.machines.devices) venus; +in +{ + imports = [ ]; + + fileSystems = + let + storageDrives = [ + "storage0" + "storage1" + ]; + + storageMounts = storage: { + name = "${venus.${storage}.mount}"; + value = { + device = venus.${storage}.device; + fsType = "ext4"; + options = venus.${storage}.options; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/d02cb367-26e0-4708-8840-75dcc4362ff4"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/22BD-5A25"; + fsType = "vfat"; + options = venus.boot.options; + }; + } + // (builtins.listToAttrs (map storageMounts storageDrives)); + + swapDevices = [ + { device = "/dev/disk/by-uuid/cc7ab213-26c9-4567-91ca-9dba6e98c9d1"; } + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user2}.home.homeDirectory} 0755 ${user2} users -" + "Z ${venus.storage0.mount} 0755 ${user2} users -" + "Z ${venus.storage1.mount} 0755 ${user2} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/venus/config/graphics.nix b/systems/venus/config/graphics.nix new file mode 100755 index 0000000..b67a5df --- /dev/null +++ b/systems/venus/config/graphics.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + hardware = { + graphics = { + enable = true; + extraPackages = builtins.attrValues { + inherit (pkgs) + amdvlk + ; + inherit (pkgs.rocmPackages.clr) + icd + ; + }; + extraPackages32 = builtins.attrValues { + inherit (pkgs.driversi686Linux) + amdvlk + ; + }; + }; + }; + boot.initrd.kernelModules = [ + "amdgpu" + ]; +} diff --git a/systems/venus/config/hardware.nix b/systems/venus/config/hardware.nix new file mode 100755 index 0000000..8c79401 --- /dev/null +++ b/systems/venus/config/hardware.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + hardware = { + firmware = [ pkgs.rtl8761b-firmware ]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/venus/config/networking.nix b/systems/venus/config/networking.nix new file mode 100755 index 0000000..b774ad9 --- /dev/null +++ b/systems/venus/config/networking.nix @@ -0,0 +1,31 @@ +{ + lib, + flake, + ... +}: +let + inherit (flake.config.machines.devices) venus; +in +{ + networking = { + hostName = venus.name; + networkmanager.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/venus/default.nix b/systems/venus/default.nix new file mode 100755 index 0000000..e5f8f64 --- /dev/null +++ b/systems/venus/default.nix @@ -0,0 +1,20 @@ +{ + lib, + ... +}: +let + configPath = ./config; + + venusImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); +in +{ + imports = venusImports; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/templates/elm/.envrc b/templates/elm/.envrc new file mode 100755 index 0000000..8392d15 --- /dev/null +++ b/templates/elm/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/templates/elm/.gitignore b/templates/elm/.gitignore new file mode 100755 index 0000000..92b2793 --- /dev/null +++ b/templates/elm/.gitignore @@ -0,0 +1 @@ +.direnv diff --git a/templates/elm/flake.lock b/templates/elm/flake.lock new file mode 100755 index 0000000..846d196 --- /dev/null +++ b/templates/elm/flake.lock @@ -0,0 +1,74 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1730504689, + "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "506278e768c2a08bec68eb62932193e341f55c90", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1730504152, + "narHash": "sha256-lXvH/vOfb4aGYyvFmZK/HlsNsr/0CVWlwYvo2rxJk3s=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720535198, + "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/templates/elm/flake.nix b/templates/elm/flake.nix new file mode 100755 index 0000000..4da66f2 --- /dev/null +++ b/templates/elm/flake.nix @@ -0,0 +1,30 @@ +{ + description = "Elm Environment"; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-23.11"; + }; + outputs = inputs @ { + flake-parts, + self, + ... + }: let + system = "x86_64-linux"; + in + flake-parts.lib.mkFlake {inherit inputs;} { + imports = [ + ./parts + ]; + systems = [ + system + ]; + perSystem = {pkgs, ...}: { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + }; + _module.args.pkgs-stable = import inputs.nixpkgs-stable { + inherit system; + }; + }; + }; +} diff --git a/templates/elm/parts/config/devshells.nix b/templates/elm/parts/config/devshells.nix new file mode 100755 index 0000000..165955c --- /dev/null +++ b/templates/elm/parts/config/devshells.nix @@ -0,0 +1,33 @@ +{ + pkgs, + pkgs-stable, + ... +}: +{ + devShells = { + default = pkgs.mkShell { + packages = builtins.attrValues { + inherit (pkgs) + age + just + nil + nixd + sops + ssh-to-age + nixfmt-rfc-style + ; + inherit (pkgs-stable.elmPackages) + elm + elm-format + elm-land + elm-language-server + elm-review + elm-test + ; + inherit (pkgs.haskellPackages) + nixfmt + ; + }; + }; + }; +} diff --git a/templates/elm/parts/default.nix b/templates/elm/parts/default.nix new file mode 100755 index 0000000..27fb3cf --- /dev/null +++ b/templates/elm/parts/default.nix @@ -0,0 +1,20 @@ +{ + perSystem = { + pkgs, + lib, + config, + self', + ... + }: let + configPath = ./config; + + devshellImports = let + files = builtins.attrNames (builtins.readDir configPath); + in + map + (name: configPath + "/${name}") + (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); + in { + imports = devshellImports; + }; +} diff --git a/templates/haskell/.envrc b/templates/haskell/.envrc new file mode 100755 index 0000000..8392d15 --- /dev/null +++ b/templates/haskell/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/templates/haskell/.gitignore b/templates/haskell/.gitignore new file mode 100755 index 0000000..a8c57c8 --- /dev/null +++ b/templates/haskell/.gitignore @@ -0,0 +1,4 @@ +.direnv +.pre-commit-config.yaml +.vscode +dist-newstyle diff --git a/templates/haskell/example.cabal b/templates/haskell/example.cabal new file mode 100755 index 0000000..2802a8c --- /dev/null +++ b/templates/haskell/example.cabal @@ -0,0 +1,10 @@ +cabal-version: 3.0 +name: example +version: 0.1.0.0 + +executable main + main-is: Main.hs + build-depends: + , base + default-language: Haskell2010 + hs-source-dirs: src diff --git a/templates/haskell/flake.nix b/templates/haskell/flake.nix new file mode 100755 index 0000000..d729ace --- /dev/null +++ b/templates/haskell/flake.nix @@ -0,0 +1,21 @@ +{ + inputs = { + haskell-flake.url = "github:srid/haskell-flake"; + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + pre-commit-hooks-nix.url = "github:cachix/pre-commit-hooks.nix"; + }; + outputs = inputs @ { + self, + nixpkgs, + flake-parts, + ... + }: + flake-parts.lib.mkFlake {inherit inputs;} { + imports = [ + inputs.haskell-flake.flakeModule + inputs.pre-commit-hooks-nix.flakeModule + ./parts + ]; + systems = nixpkgs.lib.systems.flakeExposed; + }; +} diff --git a/templates/haskell/justfile b/templates/haskell/justfile new file mode 100755 index 0000000..e69de29 diff --git a/templates/haskell/parts/config/devshells.nix b/templates/haskell/parts/config/devshells.nix new file mode 100755 index 0000000..020ccee --- /dev/null +++ b/templates/haskell/parts/config/devshells.nix @@ -0,0 +1,45 @@ +{ + pkgs, + config, + ... +}: +{ + haskellProjects.default = { + devShell = { + enable = true; + + tools = hp: { + inherit (hp) + cabal-fmt + haskell-language-server + ; + + inherit (pkgs) + dhall + dhall-json + dhall-lsp-server + helix-gpt + age + just + nil + nixd + sops + ssh-to-age + nixfmt-rfc-style + libz + ngrep + stripe-cli + vscode-langservers-extracted + zlib + ; + + inherit (pkgs.haskellPackages) + nixfmt + ; + }; + + hlsCheck.enable = true; + mkShellArgs.shellHook = "${config.pre-commit.installationScript}"; + }; + }; +} diff --git a/templates/haskell/parts/config/packages.nix b/templates/haskell/parts/config/packages.nix new file mode 100755 index 0000000..b7c0901 --- /dev/null +++ b/templates/haskell/parts/config/packages.nix @@ -0,0 +1 @@ +{self, ...}: {packages.default = self.packages.example;} diff --git a/templates/haskell/parts/config/pre-commit.nix b/templates/haskell/parts/config/pre-commit.nix new file mode 100755 index 0000000..a41ffa6 --- /dev/null +++ b/templates/haskell/parts/config/pre-commit.nix @@ -0,0 +1,7 @@ +{ + pre-commit.settings.hooks = { + nixfmt.enable = true; + commitizen.enable = true; + statix.enable = true; + }; +} diff --git a/templates/haskell/parts/default.nix b/templates/haskell/parts/default.nix new file mode 100755 index 0000000..27fb3cf --- /dev/null +++ b/templates/haskell/parts/default.nix @@ -0,0 +1,20 @@ +{ + perSystem = { + pkgs, + lib, + config, + self', + ... + }: let + configPath = ./config; + + devshellImports = let + files = builtins.attrNames (builtins.readDir configPath); + in + map + (name: configPath + "/${name}") + (builtins.filter (name: builtins.match ".*\\.nix$" name != null) files); + in { + imports = devshellImports; + }; +} diff --git a/templates/haskell/src/Main.hs b/templates/haskell/src/Main.hs new file mode 100755 index 0000000..98f25e4 --- /dev/null +++ b/templates/haskell/src/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, World!" diff --git a/templates/typst/.envrc b/templates/typst/.envrc new file mode 100755 index 0000000..8392d15 --- /dev/null +++ b/templates/typst/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/templates/typst/.gitignore b/templates/typst/.gitignore new file mode 100755 index 0000000..5c063be --- /dev/null +++ b/templates/typst/.gitignore @@ -0,0 +1,4 @@ +.direnv +.pre-commit-config.yaml +.vscode +*.pdf diff --git a/templates/typst/flake.nix b/templates/typst/flake.nix new file mode 100755 index 0000000..5115b35 --- /dev/null +++ b/templates/typst/flake.nix @@ -0,0 +1,28 @@ +{ + description = "Typst Environment"; + + inputs = { + devshell.url = "github:numtide/devshell"; + flake-root.url = "github:srid/flake-root"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + pre-commit-hooks-nix.url = "github:cachix/pre-commit-hooks.nix"; + }; + + outputs = + inputs@{ + nixpkgs, + flake-parts, + self, + ... + }: + flake-parts.lib.mkFlake { inherit inputs; } { + imports = [ + inputs.devshell.flakeModule + inputs.flake-root.flakeModule + inputs.pre-commit-hooks-nix.flakeModule + ./parts + ]; + + systems = nixpkgs.lib.systems.flakeExposed; + }; +} diff --git a/templates/typst/parts/config/devshells.nix b/templates/typst/parts/config/devshells.nix new file mode 100755 index 0000000..0c1ca46 --- /dev/null +++ b/templates/typst/parts/config/devshells.nix @@ -0,0 +1,26 @@ +{ + pkgs, + config, + ... +}: +{ + devShells = { + default = pkgs.mkShell { + packages = builtins.attrValues { + inherit (pkgs) + just + nil + typst + tinymist + typstyle + yamlfmt + nixfmt-rfc-style + ; + inherit (pkgs.nodePackages) + "@commitlint/config-conventional" + ; + }; + }; + shellHook = "${config.pre-commit.installationScript}"; + }; +} diff --git a/templates/typst/parts/config/pre-commit.nix b/templates/typst/parts/config/pre-commit.nix new file mode 100755 index 0000000..a41ffa6 --- /dev/null +++ b/templates/typst/parts/config/pre-commit.nix @@ -0,0 +1,7 @@ +{ + pre-commit.settings.hooks = { + nixfmt.enable = true; + commitizen.enable = true; + statix.enable = true; + }; +} diff --git a/templates/typst/parts/default.nix b/templates/typst/parts/default.nix new file mode 100755 index 0000000..93ccb77 --- /dev/null +++ b/templates/typst/parts/default.nix @@ -0,0 +1,24 @@ +{ + perSystem = + { + pkgs, + lib, + config, + self', + ... + }: + let + configPath = ./config; + + devshellImports = + let + files = builtins.attrNames (builtins.readDir configPath); + in + map (name: configPath + "/${name}") ( + builtins.filter (name: builtins.match ".*\\.nix$" name != null) files + ); + in + { + imports = devshellImports; + }; +} diff --git a/templates/typst/src/refs.yml b/templates/typst/src/refs.yml new file mode 100755 index 0000000..7beab72 --- /dev/null +++ b/templates/typst/src/refs.yml @@ -0,0 +1,8 @@ +citizen: + author: John Zerilli + chapter: 3 + date: 2021 + isbn: 9780262044813 + publisher: The MIT Press + title: A Citizen's Guide To Artificial Intelligence + type: Book diff --git a/templates/typst/src/template.typ b/templates/typst/src/template.typ new file mode 100755 index 0000000..5698ab3 --- /dev/null +++ b/templates/typst/src/template.typ @@ -0,0 +1,63 @@ +// Catppuccin Latte + +#let catppuccinLatteRosewater = rgb("#dc8a78") +#let catppuccinLatteFlamingo = rgb("#dd7878") +#let catppuccinLattePink = rgb("#ea76cb") +#let catppuccinLatteMauve = rgb("#8839ef") +#let catppuccinLatteRed = rgb("#d20f39") +#let catppuccinLatteMaroon = rgb("#e64553") +#let catppuccinLattePeach = rgb("#fe640b") +#let catppuccinLatteYellow = rgb("#df8e1d") +#let catppuccinLatteGreen = rgb("#40a02b") +#let catppuccinLatteTeal = rgb("#179299") +#let catppuccinLatteSky = rgb("#04a5e5") +#let catppuccinLatteSapphire = rgb("#209fb5") +#let catppuccinLatteBlue = rgb("#1e66f5") +#let catppuccinLatteLavender = rgb("#7287fd") +#let catppuccinLatteText = rgb("#4c4f69") +#let catppuccinLatteSubtext1 = rgb("#5c5f77") +#let catppuccinLatteSubtext0 = rgb("#6c6f85") +#let catppuccinLatteOverlay2 = rgb("#7c7f93") +#let catppuccinLatteOverlay1 = rgb("#8c8fa1") +#let catppuccinLatteOverlay0 = rgb("#9ca0b0") +#let catppuccinLatteSurface2 = rgb("#acb0be") +#let catppuccinLatteSurface1 = rgb("#bcc0cc") +#let catppuccinLatteSurface0 = rgb("#ccd0da") +#let catppuccinLatteBase = rgb("#eff1f5") +#let catppuccinLatteMantle = rgb("#e6e9ef") +#let catppuccinLatteCrust = rgb("#dce0e8") + +// General: + +#let project(author: (:), title: (), body) = { + show figure.caption: it => it.body + + set quote(attribution: "content", block: true) + + set document(author: author.firstName + " " + author.lastName, title: title) + + set text(fill: catppuccinLatteText, font: ("New Computer Modern"), lang: "en") + + let title = { + align(center)[ + #block[ + #text(size: 25pt, weight: "medium")[#title] + ] + ] + } + + let name = { + align( + center, + )[ + #block[ + #text(size: 12pt, weight: "regular")[#author.firstName #author.lastName] + ] + ] + } + + title + name + body +} + diff --git a/templates/typst/src/typst.typ b/templates/typst/src/typst.typ new file mode 100755 index 0000000..749defb --- /dev/null +++ b/templates/typst/src/typst.typ @@ -0,0 +1,12 @@ +#import "template.typ": * + +#show: project.with(author: (firstName: "First", lastName: "Last"), title: "Title") + +Test + +#quote( + attribution: , +)[ Fact is, you can't satisfy both calibration and error rate balance if the base + rates differ... ] + +#bibliography("refs.yml", style: "ieee")