From d1f8eba2419738a173c7e2803fd1b7a27362e63f Mon Sep 17 00:00:00 2001 From: joshuaelm Date: Sun, 17 Nov 2024 20:32:32 -0600 Subject: [PATCH] the final frontier --- configuration.nix | 87 +++++-- flake.lock | 125 ++++++---- flake.nix | 1 + gruvbox_modules/cava/config | 218 ++++++++++++++++++ .../cava/shaders/bar_spectrum.frag | 79 +++++++ .../cava/shaders/northern_lights.frag | 34 +++ .../cava/shaders/pass_through.vert | 14 ++ gruvbox_modules/dunst/dunstrc | 22 ++ gruvbox_modules/hypr/hyprland.conf | 180 +++++++++++++++ gruvbox_modules/hypr/hyprlock.conf | 84 +++++++ gruvbox_modules/hypr/rose-pine.conf | 19 ++ gruvbox_modules/kitty/kitty.conf | 10 + gruvbox_modules/kitty/themes/gruvbox.conf | 56 +++++ .../kitty/themes/rose-pine-dawn.conf | 56 +++++ .../kitty/themes/rose-pine-moon.conf | 56 +++++ gruvbox_modules/kitty/themes/rose-pine.conf | 56 +++++ gruvbox_modules/nvim/default.nix | 21 ++ gruvbox_modules/rofi/apps.rasi | 17 ++ gruvbox_modules/rofi/config.rasi | 17 ++ gruvbox_modules/rofi/gruvbox-material.rasi | 141 +++++++++++ gruvbox_modules/waybar/config | 87 +++++++ gruvbox_modules/waybar/rose-pine.css | 23 ++ gruvbox_modules/waybar/style.css | 93 ++++++++ home.nix | 2 + modules/cava/config | 20 +- modules/dunst/dunstrc | 22 ++ modules/hypr/hyprland.conf | 52 +++-- modules/hypr/hyprlock.conf | 84 +++++++ modules/kitty/kitty.conf | 6 +- modules/kitty/themes/gruvbox.conf | 56 +++++ modules/nvim/default.nix | 5 +- modules/rofi/apps.rasi | 17 ++ modules/rofi/config.rasi | 144 ++---------- modules/rofi/gruvbox-material.rasi | 141 +++++++++++ modules/waybar/config | 44 ++-- modules/waybar/style.css | 35 +-- pfp.jpg | Bin 0 -> 72815 bytes 37 files changed, 1865 insertions(+), 259 deletions(-) create mode 100644 gruvbox_modules/cava/config create mode 100644 gruvbox_modules/cava/shaders/bar_spectrum.frag create mode 100644 gruvbox_modules/cava/shaders/northern_lights.frag create mode 100644 gruvbox_modules/cava/shaders/pass_through.vert create mode 100644 gruvbox_modules/dunst/dunstrc create mode 100644 gruvbox_modules/hypr/hyprland.conf create mode 100644 gruvbox_modules/hypr/hyprlock.conf create mode 100644 gruvbox_modules/hypr/rose-pine.conf create mode 100644 gruvbox_modules/kitty/kitty.conf create mode 100644 gruvbox_modules/kitty/themes/gruvbox.conf create mode 100644 gruvbox_modules/kitty/themes/rose-pine-dawn.conf create mode 100644 gruvbox_modules/kitty/themes/rose-pine-moon.conf create mode 100644 gruvbox_modules/kitty/themes/rose-pine.conf create mode 100644 gruvbox_modules/nvim/default.nix create mode 100644 gruvbox_modules/rofi/apps.rasi create mode 100644 gruvbox_modules/rofi/config.rasi create mode 100644 gruvbox_modules/rofi/gruvbox-material.rasi create mode 100644 gruvbox_modules/waybar/config create mode 100644 gruvbox_modules/waybar/rose-pine.css create mode 100644 gruvbox_modules/waybar/style.css create mode 100644 modules/dunst/dunstrc create mode 100644 modules/hypr/hyprlock.conf create mode 100644 modules/kitty/themes/gruvbox.conf create mode 100644 modules/rofi/apps.rasi create mode 100644 modules/rofi/gruvbox-material.rasi create mode 100644 pfp.jpg diff --git a/configuration.nix b/configuration.nix index 85e7ea9..3f47417 100644 --- a/configuration.nix +++ b/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, master, lib, ... }: +{ config, pkgs, master, lib, inputs, ... }: { imports = @@ -15,14 +15,13 @@ boot.initrd.systemd.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.kernelParams = ["quiet"]; - + boot.extraModulePackages = with config.boot.kernelPackages; [ hid-tmff2 ]; services.avahi = { enable = true; - nssmdns = true; + nssmdns4 = true; openFirewall = true; }; - boot.initrd.luks.devices."luks-db49c136-7de8-4ab6-8e05-754bab13925d".device = "/dev/disk/by-uuid/db49c136-7de8-4ab6-8e05-754bab13925d"; networking.hostName = "nixos"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. @@ -33,7 +32,7 @@ # Enable networking networking.networkmanager.enable = true; - hardware.opengl.extraPackages = with pkgs; [ + hardware.graphics.extraPackages = with pkgs; [ amdvlk ]; @@ -66,17 +65,39 @@ }; # Enable the GNOME Desktop Environment. - programs.hyprland.enable = false; + programs.hyprland.enable = true; services.desktopManager.plasma6.enable = true; - services.displayManager.cosmic-greeter.enable = true; + services.displayManager.sddm.enable = false; + services.displayManager.cosmic-greeter.enable = false; services.desktopManager.cosmic.enable = true; + security.pam.services.hyprlock = {}; + + services.greetd = { + enable = true; + settings = rec { + initial_session = { + command = "${pkgs.hyprland}/bin/Hyprland"; + user = "joshuaelm"; + }; + default_session = initial_session; + }; + }; + + + # Configure keymap in X11 services.xserver = { - layout = "us"; - xkbVariant = ""; + xkb.layout = "us"; + xkb.variant = ""; excludePackages = [ pkgs.xterm ]; }; + # Enable Swap + + swapDevices = [ { + device = "/var/lib/swapfile"; + size = 16*1024; + }]; # Enable CUPS to print documents. services.printing.enable = true; @@ -126,6 +147,21 @@ ]; }; + + + fileSystems."/mnt/Skyrim" = { + device = "/dev/sdb1"; + fsType = "btrfs"; + options = [ + "users" + "nofail" + "x-gvfs-show" + "exec" + ]; + }; + + + # Fonts fonts.packages = with pkgs; [ fira-code @@ -139,8 +175,17 @@ # $ nix search wget environment.systemPackages = with pkgs; [ git + feishin + blueman rustc + cowsay + pfetch + ryujinx + gomatrix + pavucontrol + inputs.zen-browser.packages."${system}".specific gnomeExtensions.tray-icons-reloaded + cider gnomeExtensions.open-bar dunst just @@ -158,12 +203,14 @@ kdePackages.elisa glaxnimate librewolf + protonup-qt mlt qt5.full dconf sublime-music spacedrive openjdk + heroic protontricks gamescope playerctl @@ -174,7 +221,7 @@ cava pop-icon-theme pop-launcher - gnome.gnome-tweaks + gnome-tweaks libreoffice hunspell hunspellDicts.en_US @@ -184,7 +231,19 @@ gradience ]; + # VirtualBox + virtualisation.virtualbox.host.enable = true; + users.extraGroups.vboxusers.members = [ "user-with-access-to-virtualbox" ]; + + + services.sunshine = { + enable = true; + autoStart = true; + capSysAdmin = true; + openFirewall = true; + + }; # Enable Steam programs.steam = { enable = true; @@ -192,6 +251,8 @@ dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server }; + programs.nix-ld.enable = true; + # Some programs need SUID wrappers, can be configured further or are # started in user sessions. # programs.mtr.enable = true; @@ -203,11 +264,11 @@ # List services that you want to enable: # Enable the OpenSSH daemon. - # services.openssh.enable = true; + services.openssh.enable = true; # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; + networking.firewall.allowedTCPPorts = [ 7860 3042 47990 ]; + networking.firewall.allowedUDPPorts = [ 7860 3042 47990 ]; # Or disable the firewall altogether. # networking.firewall.enable = false; diff --git a/flake.lock b/flake.lock index a7d83bc..fe378ac 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ ] }, "locked": { - "lastModified": 1722113426, - "narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=", + "lastModified": 1728330715, + "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", "owner": "numtide", "repo": "devshell", - "rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae", + "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", "type": "github" }, "original": { @@ -59,11 +59,11 @@ ] }, "locked": { - "lastModified": 1726153070, - "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "lastModified": 1730504689, + "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "rev": "506278e768c2a08bec68eb62932193e341f55c90", "type": "github" }, "original": { @@ -107,11 +107,11 @@ ] }, "locked": { - "lastModified": 1726745158, - "narHash": "sha256-D5AegvGoEjt4rkKedmxlSEmC+nNLMBPWFxvmYnVLhjk=", + "lastModified": 1730814269, + "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "4e743a6920eab45e8ba0fbe49dc459f1423a4b74", + "rev": "d70155fdc00df4628446352fc58adc640cd705c2", "type": "github" }, "original": { @@ -149,11 +149,11 @@ ] }, "locked": { - "lastModified": 1727381970, - "narHash": "sha256-iFuK3rpu0vLlRoDoiOexM82WDYfdihSHVfiv+/3Fm/8=", + "lastModified": 1730837930, + "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", "owner": "nix-community", "repo": "home-manager", - "rev": "0afc2f0f19470e45a3941926a330f2db55ac2fbf", + "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", "type": "github" }, "original": { @@ -170,11 +170,11 @@ ] }, "locked": { - "lastModified": 1727346017, - "narHash": "sha256-z7OCFXXxIseJhEHiCkkUOkYxD9jtLU8Kf5Q9WC0SjJ8=", + "lastModified": 1730837930, + "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", "owner": "nix-community", "repo": "home-manager", - "rev": "c124568e1054a62c20fbe036155cc99237633327", + "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", "type": "github" }, "original": { @@ -183,13 +183,41 @@ "type": "github" } }, + "ixx": { + "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729958008, + "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.0.6", + "repo": "ixx", + "type": "github" + } + }, "master": { "locked": { - "lastModified": 1727383661, - "narHash": "sha256-VAr5tdAx2SPNnGSrfutaaXfcaHTcTDG6TNWSVHgsghY=", + "lastModified": 1731168639, + "narHash": "sha256-iSjFu7x07YCjY0d5TbTFF5PGalnoapxUzw1jXMNfy2I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "029effe15e81058f0284a8afa9dea7d08721f2b7", + "rev": "b35c45a2c17458a108d03f2a780d8a2f17c16b6e", "type": "github" }, "original": { @@ -207,11 +235,11 @@ ] }, "locked": { - "lastModified": 1727003835, - "narHash": "sha256-Cfllbt/ADfO8oxbT984MhPHR6FJBaglsr1SxtDGbpec=", + "lastModified": 1731153869, + "narHash": "sha256-3Ftf9oqOypcEyyrWJ0baVkRpvQqroK/SVBFLvU3nPuc=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "bd7d1e3912d40f799c5c0f7e5820ec950f1e0b3d", + "rev": "5c74ab862c8070cbf6400128a1b56abb213656da", "type": "github" }, "original": { @@ -230,11 +258,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1727355852, - "narHash": "sha256-xA2cl4oz59Haqa8xAGCd2vD2JWkYUpRUlnO4GTDfITU=", + "lastModified": 1731116135, + "narHash": "sha256-IJ7SViFR2APiuV3k+8v6NIMI1K7oP0Q3cNNfrdlbefU=", "owner": "lilyinstarlight", "repo": "nixos-cosmic", - "rev": "80d55e1bb531f10d2f6ccc5f6686f6b0570f654e", + "rev": "c74c207183e32f23a94b4bb8b69bc5064db98894", "type": "github" }, "original": { @@ -245,11 +273,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1727122398, - "narHash": "sha256-o8VBeCWHBxGd4kVMceIayf5GApqTavJbTa44Xcg5Rrk=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", "type": "github" }, "original": { @@ -260,11 +288,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1727129439, - "narHash": "sha256-nPyrcFm6FSk7CxzVW4x2hu62aLDghNcv9dX6DF3dXw8=", + "lastModified": 1730883749, + "narHash": "sha256-mwrFF0vElHJP8X3pFCByJR365Q2463ATp2qGIrDUdlE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "babc25a577c3310cce57c72d5bed70f4c3c3843a", + "rev": "dba414932936fde69f0606b4f1d87c5bc0003ede", "type": "github" }, "original": { @@ -276,11 +304,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1726937504, - "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=", + "lastModified": 1727348695, + "narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9357f4f23713673f310988025d9dc261c20e70c6", + "rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784", "type": "github" }, "original": { @@ -305,11 +333,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1727366999, - "narHash": "sha256-IGzvFj3RDBkLF92pF4txAon7kJTQMhmR/HTKViKhys8=", + "lastModified": 1731155487, + "narHash": "sha256-+D57j7BcV5O3XH9za3c3XXVLHr+F+enThAN2EeF6H/M=", "owner": "nix-community", "repo": "nixvim", - "rev": "2ea7009e61ea02e08e480c94c06e71e640a59132", + "rev": "31364af1990067d5529846a2ebf17a42c5ab22ff", "type": "github" }, "original": { @@ -321,17 +349,18 @@ "nuschtosSearch": { "inputs": { "flake-utils": "flake-utils", + "ixx": "ixx", "nixpkgs": [ "nixvim", "nixpkgs" ] }, "locked": { - "lastModified": 1726995581, - "narHash": "sha256-lgsE/CTkZk9OIiFGEIrxXZQ7Feiv41dqlN7pEfTdgew=", + "lastModified": 1731060242, + "narHash": "sha256-43yLsOm/wxBbfYSNDWVJeVv5Ij+23X3BIjFUfsdx/6M=", "owner": "NuschtOS", "repo": "search", - "rev": "3b7dd61b365ca45380707453758a45f2e9977be3", + "rev": "ef493352f9e1f051e01a55c062731503a6b36b4e", "type": "github" }, "original": { @@ -358,11 +387,11 @@ ] }, "locked": { - "lastModified": 1727231386, - "narHash": "sha256-XLloPtQHKk/Tdt8t8zIb+JhmunlH3YB9Jz8RTlQ3N/4=", + "lastModified": 1731032894, + "narHash": "sha256-dQSyYPmrQiPr+PGEd+K8038rubFGz7G/dNXVeaGWE0w=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "b5f76c3b09a8194889f5328a480fbea1a9115518", + "rev": "d52f2a4c103a0acf09ded857b9e2519ae2360e59", "type": "github" }, "original": { @@ -394,11 +423,11 @@ ] }, "locked": { - "lastModified": 1727252110, - "narHash": "sha256-3O7RWiXpvqBcCl84Mvqa8dXudZ1Bol1ubNdSmQt7nF4=", + "lastModified": 1730321837, + "narHash": "sha256-vK+a09qq19QNu2MlLcvN4qcRctJbqWkX7ahgPZ/+maI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "1bff2ba6ec22bc90e9ad3f7e94cca0d37870afa3", + "rev": "746901bb8dba96d154b66492a29f5db0693dbfcc", "type": "github" }, "original": { @@ -412,11 +441,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1727287465, - "narHash": "sha256-XQAf5M593WmxgaXagtkci/H9DA3jSVx1TJk6F3X5VQo=", + "lastModified": 1727721329, + "narHash": "sha256-QYlWZwUSwrM7BuO+dXclZIwoPvBIuJr6GpFKv9XKFPI=", "owner": "MarceColl", "repo": "zen-browser-flake", - "rev": "96f1b5d80bf7360cb77c9b521f388324f18383a0", + "rev": "e6ab73f405e9a2896cce5956c549a9cc359e5fcc", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 78ceaec..b0c73f6 100644 --- a/flake.nix +++ b/flake.nix @@ -23,6 +23,7 @@ nixos = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; specialArgs = {inherit nixvim;}; + specialArgs.inputs = inputs; modules = [ { nix.settings = { diff --git a/gruvbox_modules/cava/config b/gruvbox_modules/cava/config new file mode 100644 index 0000000..87a8c5c --- /dev/null +++ b/gruvbox_modules/cava/config @@ -0,0 +1,218 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calulate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem' +# Defaults to 'pulse', 'pipewire', 'alsa' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo +; sample_rate = 44100 +; sample_bits = 16 + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' uses a custom framebuffer technique and prints only changes +# from frame to frame in the terminal. 'ncurses' is default if supported. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = ncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left' or 'right'. +# Default is 'bottom'. Other orientations are only supported on sdl and ncruses +# output. Note: many fonts have weird glyphs for 'top' and 'right' characters, +# which can make ncurses not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Raw output target. A fifo will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1000 +; sdl_height = 500 +; sdl_x = -1 +; sdl_y= -1 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable alacritty synchronized updates. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; alacritty_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +[color] +gradient = 1 +gradient_count = 8 + +#GruvBox Green to Red Gradient +gradient_color_1 = '#98971a' +gradient_color_2 = '#98971a' +gradient_color_3 = '#fabd2f' +gradient_color_4 = '#fabd2f' +gradient_color_5 = '#fabd2f' +gradient_color_6 = '#d65d0e' +gradient_color_7 = '#cc241d' +gradient_color_8 = '#cc241d' + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/gruvbox_modules/cava/shaders/bar_spectrum.frag b/gruvbox_modules/cava/shaders/bar_spectrum.frag new file mode 100644 index 0000000..b078913 --- /dev/null +++ b/gruvbox_modules/cava/shaders/bar_spectrum.frag @@ -0,0 +1,79 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate and bar values are the same + float y = bars[bar]; + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars basen on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + if (gradient_count == 0) + { + fragColor = vec4(fg_color,1.0); + } + else + { + //find which color in the configured gradient we are at + int color = int((gradient_count - 1) * fragCoord.y); + + //find where on y this and next color is supposed to be + float y_min = color / (gradient_count - 1.0); + float y_max = (color + 1.0) / (gradient_count - 1.0); + + //make color + fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} \ No newline at end of file diff --git a/gruvbox_modules/cava/shaders/northern_lights.frag b/gruvbox_modules/cava/shaders/northern_lights.frag new file mode 100644 index 0000000..ecd859a --- /dev/null +++ b/gruvbox_modules/cava/shaders/northern_lights.frag @@ -0,0 +1,34 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) + +uniform vec3 u_resolution; // window resolution, not used here + +//colors, configurable in cava config file +uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here +uniform vec3 fg_color; // foreground color, not used here + +void main() +{ + // find which bar to use based on where we are on the x axis + int bar = int(bars_count * fragCoord.x); + + float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0; + float y = (bars[bar]) * bar_y; + + float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count; + float bar_r = 1.0 - abs((bar_x - 0.5)) * 2; + + bar_r = bar_r * bar_r * 2; + + // set color + fragColor.r = fg_color.x * y * bar_r; + fragColor.g = fg_color.y * y * bar_r; + fragColor.b = fg_color.z * y * bar_r; +} diff --git a/gruvbox_modules/cava/shaders/pass_through.vert b/gruvbox_modules/cava/shaders/pass_through.vert new file mode 100644 index 0000000..a4f20e5 --- /dev/null +++ b/gruvbox_modules/cava/shaders/pass_through.vert @@ -0,0 +1,14 @@ +#version 330 + + +// Input vertex data, different for all executions of this shader. +layout(location = 0) in vec3 vertexPosition_modelspace; + +// Output data ; will be interpolated for each fragment. +out vec2 fragCoord; + +void main() +{ + gl_Position = vec4(vertexPosition_modelspace,1); + fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; +} diff --git a/gruvbox_modules/dunst/dunstrc b/gruvbox_modules/dunst/dunstrc new file mode 100644 index 0000000..060fdd7 --- /dev/null +++ b/gruvbox_modules/dunst/dunstrc @@ -0,0 +1,22 @@ + +[global] +separator_color= frame +progress_bar = true +progress_bar_corner_radius = 10 +corner_radius = 10 +icon_corner_radius = 10 + +[urgency_low] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#1d2021" + +[urgency_normal] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#1d2021" + +[urgency_critical] +background = "#3c1f1e" +foreground = "#ddc7a1" +frame_color = "#3c1f1e" diff --git a/gruvbox_modules/hypr/hyprland.conf b/gruvbox_modules/hypr/hyprland.conf new file mode 100644 index 0000000..1b210f2 --- /dev/null +++ b/gruvbox_modules/hypr/hyprland.conf @@ -0,0 +1,180 @@ +autogenerated = 0 # remove this line to remove the warning + +source=~/.config/hypr/rose-pine.conf + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor = HDMI-A-1, 3840x2160@60, 0x0, 2 +exec-once = hyprctl dispatch workspace 1 +exec-once = swaybg -i ~/Pictures/Wallpaper/wallhaven-z85eoy.jpg +exec-once = hyprlock +exec-once = waybar +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Set programs that you use +$terminal = kitty +$fileManager = cosmic-files +$menu = rofi -config ~/.config/rofi/apps.rasi -show drun + +# Some default env vars. +env = XCURSOR_SIZE,24 +env = QT_QPA_PLATFORMTHEME,qt6ct # change to qt6ct if you have that + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + touchpad { + natural_scroll = no + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 5 + border_size = 2 + col.active_border = rgb(1d2021) + col.inactive_border = rgb(1d2021) + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = yes + size = 5 + passes = 3 + new_optimizations = on + ignore_opacity = on + xray = false + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more + + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# Window Rules + + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod, M, exec, hyprlock +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, Space, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ +bind = , XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/gruvbox_modules/hypr/hyprlock.conf b/gruvbox_modules/hypr/hyprlock.conf new file mode 100644 index 0000000..61d443c --- /dev/null +++ b/gruvbox_modules/hypr/hyprlock.conf @@ -0,0 +1,84 @@ +background { + monitor = + path = ~/Pictures/Wallpaper/wallhaven-z85eoy.jpg + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_passes = 3 # 0 disables blurring + blur_size = 13 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + + +image { + monitor = + path = ~/NixOS-Configs/pfp.jpg + border_size = 2 + border_color = rgba(255, 255, 255, 0) + size = 130 + rounding = -1 + rotate = 0 + reload_time = -1 + reload_cmd = + position = 0, 40 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:1000] echo -e "$(date +"%A, %B %d")" + color = rgba(235, 219, 178, 0.70) + font_size = 25 + font_family = Roboto Bold + position = 0, 350 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:1000] echo "$(date +"%I:%M")" + color = rgba(235, 219, 178, 0.70) + font_size = 120 + font_family = Roboto Bold + position = 0, 250 + halign = center + valign = center +} + +label { + monitor = + text = Joshua Elmasri + text_align = center # center/right or any value for default left. multi-line text alignment inside label container + color = rgba(235, 219, 178, 1.0) + font_size = 30 + font_family = Roboto Bold + rotate = 0 # degrees, counter-clockwise + + position = 0, -110 + halign = center + valign = center +} + +input-field { + monitor = + size = 300, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + dots_fade_time = 0 + outer_color = rgba(0, 0, 0, 0) + inner_color = rgba(255, 255, 255, 0.1) + font_color = rgb(235, 219, 178) + fade_on_empty = false + font_family = Roboto + placeholder_text = Password + hide_input = false + position = 0, -210 + halign = center + valign = center +} diff --git a/gruvbox_modules/hypr/rose-pine.conf b/gruvbox_modules/hypr/rose-pine.conf new file mode 100644 index 0000000..48e78b9 --- /dev/null +++ b/gruvbox_modules/hypr/rose-pine.conf @@ -0,0 +1,19 @@ +## name: Rosé Pine +## author: jishnurajendran +## upstream: https://github.com/jishnurajendran/hyprland-rosepine/blob/main/rose-pine.conf +## All natural pine, faux fur and a bit of soho vibes for the classy minimalist +$base = 0xff191724 +$surface = 0xff1f1d2e +$overlay = 0xff26233a +$muted = 0xff6e6a86 +$subtle = 0xff908caa +$text = 0xffe0def4 +$love = 0xffeb6f92 +$gold = 0xfff6c177 +$rose = 0xffebbcba +$pine = 0xff31748f +$foam = 0xff9ccfd8 +$iris = 0xffc4a7e7 +$highlightLow = 0xff21202e +$highlightMed = 0xff403d52 +$highlightHigh = 0xff524f67 diff --git a/gruvbox_modules/kitty/kitty.conf b/gruvbox_modules/kitty/kitty.conf new file mode 100644 index 0000000..8b923b1 --- /dev/null +++ b/gruvbox_modules/kitty/kitty.conf @@ -0,0 +1,10 @@ +include themes/gruvbox.conf + +font_family Fira Code Nerd Font +bold_font auto +italic_font auto +bold_italic_font auto + +confirm_os_window_close 0 +background_opacity 0.8 +background_blur 0 diff --git a/gruvbox_modules/kitty/themes/gruvbox.conf b/gruvbox_modules/kitty/themes/gruvbox.conf new file mode 100644 index 0000000..34eacee --- /dev/null +++ b/gruvbox_modules/kitty/themes/gruvbox.conf @@ -0,0 +1,56 @@ +# vim:ft=kitty + +# gruvbox-dark colorscheme for kitty +# snazzy theme used as base + +cursor #928374 +cursor_text_color background + +visual_bell_color #8ec07c +bell_border_color #8ec07c + +active_border_color #d3869b +inactive_border_color #665c54 + +active_tab_foreground #fbf1c7 +active_tab_background #665c54 +inactive_tab_foreground #a89984 +inactive_tab_background #3c3836 + +foreground #ebdbb2 +background #272727 +selection_foreground #655b53 +selection_background #ebdbb2 +url_color #d65c0d + +# black +color0 #272727 +color8 #928373 + +# red +color1 #cc231c +color9 #fb4833 + +# green +color2 #989719 +color10 #b8ba25 + +# yellow +color3 #d79920 +color11 #fabc2e + +# blue +color4 #448488 +color12 #83a597 + +# magenta +color5 #b16185 +color13 #d3859a + +# cyan +color6 #689d69 +color14 #8ec07b + +# white +color7 #a89983 +color15 #ebdbb2 diff --git a/gruvbox_modules/kitty/themes/rose-pine-dawn.conf b/gruvbox_modules/kitty/themes/rose-pine-dawn.conf new file mode 100644 index 0000000..397c9a8 --- /dev/null +++ b/gruvbox_modules/kitty/themes/rose-pine-dawn.conf @@ -0,0 +1,56 @@ +## name: Rosé Pine Dawn +## author: mvllow +## license: MIT +## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-dawn.conf +## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +foreground #575279 +background #faf4ed +selection_foreground #575279 +selection_background #dfdad9 + +cursor #cecacd +cursor_text_color #575279 + +url_color #907aa9 + +active_tab_foreground #575279 +active_tab_background #f2e9e1 +inactive_tab_foreground #9893a5 +inactive_tab_background #faf4ed + +active_border_color #286983 +inactive_border_color #dfdad9 + +# black +color0 #f2e9e1 +color8 #9893a5 + +# red +color1 #b4637a +color9 #b4637a + +# green +color2 #286983 +color10 #286983 + +# yellow +color3 #ea9d34 +color11 #ea9d34 + +# blue +color4 #56949f +color12 #56949f + +# magenta +color5 #907aa9 +color13 #907aa9 + +# cyan +color6 #d7827e +color14 #d7827e + +# white +color7 #575279 +color15 #575279 + diff --git a/gruvbox_modules/kitty/themes/rose-pine-moon.conf b/gruvbox_modules/kitty/themes/rose-pine-moon.conf new file mode 100644 index 0000000..4d4de88 --- /dev/null +++ b/gruvbox_modules/kitty/themes/rose-pine-moon.conf @@ -0,0 +1,56 @@ +## name: Rosé Pine Moon +## author: mvllow +## license: MIT +## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-moon.conf +## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +foreground #e0def4 +background #232136 +selection_foreground #e0def4 +selection_background #44415a + +cursor #56526e +cursor_text_color #e0def4 + +url_color #c4a7e7 + +active_tab_foreground #e0def4 +active_tab_background #393552 +inactive_tab_foreground #6e6a86 +inactive_tab_background #232136 + +active_border_color #3e8fb0 +inactive_border_color #44415a + +# black +color0 #393552 +color8 #6e6a86 + +# red +color1 #eb6f92 +color9 #eb6f92 + +# green +color2 #3e8fb0 +color10 #3e8fb0 + +# yellow +color3 #f6c177 +color11 #f6c177 + +# blue +color4 #9ccfd8 +color12 #9ccfd8 + +# magenta +color5 #c4a7e7 +color13 #c4a7e7 + +# cyan +color6 #ea9a97 +color14 #ea9a97 + +# white +color7 #e0def4 +color15 #e0def4 + diff --git a/gruvbox_modules/kitty/themes/rose-pine.conf b/gruvbox_modules/kitty/themes/rose-pine.conf new file mode 100644 index 0000000..575c06b --- /dev/null +++ b/gruvbox_modules/kitty/themes/rose-pine.conf @@ -0,0 +1,56 @@ +## name: Rosé Pine +## author: mvllow +## license: MIT +## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine.conf +## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +foreground #e0def4 +background #191724 +selection_foreground #e0def4 +selection_background #403d52 + +cursor #524f67 +cursor_text_color #e0def4 + +url_color #c4a7e7 + +active_tab_foreground #e0def4 +active_tab_background #26233a +inactive_tab_foreground #6e6a86 +inactive_tab_background #191724 + +active_border_color #31748f +inactive_border_color #403d52 + +# black +color0 #26233a +color8 #6e6a86 + +# red +color1 #eb6f92 +color9 #eb6f92 + +# green +color2 #31748f +color10 #31748f + +# yellow +color3 #f6c177 +color11 #f6c177 + +# blue +color4 #9ccfd8 +color12 #9ccfd8 + +# magenta +color5 #c4a7e7 +color13 #c4a7e7 + +# cyan +color6 #ebbcba +color14 #ebbcba + +# white +color7 #e0def4 +color15 #e0def4 + diff --git a/gruvbox_modules/nvim/default.nix b/gruvbox_modules/nvim/default.nix new file mode 100644 index 0000000..3b3a238 --- /dev/null +++ b/gruvbox_modules/nvim/default.nix @@ -0,0 +1,21 @@ +{config, pkgs, lib, inputs, ...}: + +{ + programs.nixvim = { + enable = true; + colorschemes.gruvbox.enable = true; + plugins.nvim-tree.enable = true; + plugins.treesitter.enable = true; + plugins.lualine.enable = true; + plugins.lsp.enable = true; + plugins.luasnip.enable = true; + plugins.toggleterm.enable = true; + plugins.cmp.enable = true; + plugins.gitsigns.enable = true; + plugins.web-devicons.enable = true; + plugins.which-key.enable = true; + plugins.cmp-nvim-lsp.enable = true; + plugins.telescope.enable = true; + plugins.indent-blankline.enable = true; + }; +} diff --git a/gruvbox_modules/rofi/apps.rasi b/gruvbox_modules/rofi/apps.rasi new file mode 100644 index 0000000..d7d0d7d --- /dev/null +++ b/gruvbox_modules/rofi/apps.rasi @@ -0,0 +1,17 @@ +configuration { + show-icons: true; + font: "FreeSans Regular 12"; + icon-theme: "Gruvbox-Plus-Dark"; + + display-ssh: "󰣀 ssh:"; + display-run: "󱓞 run:"; + display-drun: "󰣖 drun:"; + display-window: "󱂬 window:"; + display-combi: "󰕘 combi:"; + display-filebrowser: "󰉋 filebrowser:"; + + dpi: 110; +} + + +@theme "~/.config/rofi/gruvbox-material.rasi" diff --git a/gruvbox_modules/rofi/config.rasi b/gruvbox_modules/rofi/config.rasi new file mode 100644 index 0000000..d7d0d7d --- /dev/null +++ b/gruvbox_modules/rofi/config.rasi @@ -0,0 +1,17 @@ +configuration { + show-icons: true; + font: "FreeSans Regular 12"; + icon-theme: "Gruvbox-Plus-Dark"; + + display-ssh: "󰣀 ssh:"; + display-run: "󱓞 run:"; + display-drun: "󰣖 drun:"; + display-window: "󱂬 window:"; + display-combi: "󰕘 combi:"; + display-filebrowser: "󰉋 filebrowser:"; + + dpi: 110; +} + + +@theme "~/.config/rofi/gruvbox-material.rasi" diff --git a/gruvbox_modules/rofi/gruvbox-material.rasi b/gruvbox_modules/rofi/gruvbox-material.rasi new file mode 100644 index 0000000..30c40e3 --- /dev/null +++ b/gruvbox_modules/rofi/gruvbox-material.rasi @@ -0,0 +1,141 @@ +* { + gruv0: #282828; + gruv1: #32302f; + gruv2: #45403d; + gruv3: #5a524c; + + gruv4: #fbf1c7; + gruv5: #f4e8be; + gruv6: #eee0b7; + + gruv7: #a89984; + gruv8: #928374; + gruv9: #7c6f64; + gruv10: #504945; + red: #ea6962; + + orange: #e78a4e; + yellow: #d8a657; + aqua: #89b482; + purple: #d3869b; + + reddark: #c14a4a; + yellowdark: #b47109; + + foreground: @gruv9; + background-color: transparent; + + highlight: underline bold #eee0b7; + + transparent: rgba(0,0,0,0.1); + +} + +window { + location: center; + anchor: center; + border-radius: 20px; + height: 560px; + width: 600px; + + background-color: #282828; + spacing: 0; + children: [mainbox]; + orientation: horizontal; +} + +mainbox { + spacing: 0; + children: [ inputbar, message, listview ]; +} + +message { + padding: 10px; + border: 0px 2px 2px 2px; + border-color: @gruv0; + background-color: @transparent; +} + +inputbar { + color: @gruv6; + padding: 14px; + background-color: @transparent; + border-color: @gruv6; + + border: 4px; + border-radius: 20px 20px 0px 0px; +} + +entry, prompt, case-indicator { + text-font: inherit; + text-color: inherit; +} + +prompt { + margin: 0px 1em 0em 0em ; +} + +listview { + padding: 8px; + border-radius: 0px 0px 20px 20px; + border: 0px 4px 4px 4px; + border-color: @gruv6; + background-color: @transparent; + dynamic: false; +} + +element { + padding: 5px; + vertical-align: 0.5; + border-radius: 5px; + color: @foreground; + text-color: @gruv6; + background-color: @transparent; +} + +element.normal.active { + background-color: @yellow; +} + +element.normal.urgent { + background-color: @reddark; +} + +element.selected.normal { + background-color: @gruv7; + text-color: @gruv0; +} + +element.selected.active { + background-color: @yellowdark; +} + +element.selected.urgent { + background-color: @red; +} + +element.alternate.normal { + background-color: @transparent; +} + +element-text, element-icon { + size: 3ch; + margin: 0 10 0 0; + vertical-align: 0.5; + text-color: @gruv6; +} + +button { + padding: 6px; + color: @foreground; + horizontal-align: 0.5; + + border: 2px 0px 2px 2px; + border-radius: 5px; + border-color: @foreground; +} + +button.selected.normal { + border: 2px 0px 2px 2px; + border-color: @foreground; +} diff --git a/gruvbox_modules/waybar/config b/gruvbox_modules/waybar/config new file mode 100644 index 0000000..8bf1dbe --- /dev/null +++ b/gruvbox_modules/waybar/config @@ -0,0 +1,87 @@ +{ + "layer": "top", + "margin": "5, 5, 5, 5", + "modules-left": ["hyprland/workspaces"], + "modules-center": ["clock"], + "modules-right": ["mpris", "cava", "network", "wireplumber", "tray"], + "battery": { + "format": "{capacity}% {icon}", + "format-icons": ["", "", "", "", ""] + }, + "clock": { + "format-alt": "{:%a, %d. %b %H:%M}" + }, + + "cava": { + "bars": 14, + "bar_delimiter": 0, + "format-icons" : ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ], + }, + + "network": { + "format": "{ifname}", + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "󰈁", + "format-disconnected": "", //An empty format will hide the module. + "tooltip-format": "{ifname} via {gwaddr} 󰊗", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50 + }, + + "privacy": { + "icon-spacing": 4, + "icon-size": 18, + "transition-duration": 250, + "modules": [ + { + "type": "screenshare", + "tooltip": true, + "tooltip-icon-size": 24 + }, + { + "type": "audio-out", + "tooltip": true, + "tooltip-icon-size": 24 + }, + { + "type": "audio-in", + "tooltip": true, + "tooltip-icon-size": 24 + } + ] + }, + + + "mpris": { + "format": "{player_icon}", + "format-paused": "{status_icon}", + "player-icons": { + "default": "▶", + "mpv": "🎵" + }, + "status-icons": { + "paused": "⏸" + }, + }, + + "wireplumber": { + "format": "{volume}%", + "format-muted": "󰝟", + "on-click": "pavucontrol", + "scroll-step": 0.8, + "max-volume": 100, + "tooltip": true, + "tooltip-format": "{volume}% volume on device {node_name}" + }, + + "hyprland/workspaces": { + "active-only": false, + "format": "{icon}", + "format-icons": { + "active": "", + "default": "", + } + } +} diff --git a/gruvbox_modules/waybar/rose-pine.css b/gruvbox_modules/waybar/rose-pine.css new file mode 100644 index 0000000..a3ae0e4 --- /dev/null +++ b/gruvbox_modules/waybar/rose-pine.css @@ -0,0 +1,23 @@ +/* +* Variant: Rosé Pine +* Maintainer: DankChoir +*/ + +@define-color base #191724; +@define-color surface #1f1d2e; +@define-color overlay #26233a; + +@define-color muted #6e6a86; +@define-color subtle #908caa; +@define-color text #e0def4; + +@define-color love #eb6f92; +@define-color gold #f6c177; +@define-color rose #ebbcba; +@define-color pine #31748f; +@define-color foam #9ccfd8; +@define-color iris #c4a7e7; + +@define-color highlightLow #21202e; +@define-color highlightMed #403d52; +@define-color highlightHigh #524f67; diff --git a/gruvbox_modules/waybar/style.css b/gruvbox_modules/waybar/style.css new file mode 100644 index 0000000..7fab9a8 --- /dev/null +++ b/gruvbox_modules/waybar/style.css @@ -0,0 +1,93 @@ + +* { + font-family: "Roboto"; + font-size: 17px; + border-radius: 10px; +} + +window#waybar { + background-color: #282828; + color: #ebdbb2; + margin: 0 4px; +} +window > box { + background-color: transparent; + margin-top: 5px; + margin-bottom: 5px; + margin-left: 5px; + margin-right: 5px; +} + +#network { + padding-left: 4px; + padding-right: 2px; + color: #458588; +} + +#cava { + color: #b8bb26; + margin-left: 5px; +} + +#tray { + margin-right: 5px; + margin-left: 5px; +} + +#workspaces.button { + color: #ebdbb2; +} + +#workspaces.button.focused { + color: #a89984; + background-color: #ebdbb2; +} + +#clock { + padding: 0 5px; + margin-left: 5px; + margin-right: 5px; +} +#mpris { + padding-left: 5px; +} + +.modules-center { + background: #3c3836; + box-shadow: 0px 0px 5px 0px #101010; +} + +.modules-right { + background: #3c3836; + box-shadow: 0px 0px 5px 0px #101010; +} + +.modules-left { + background: #3c3836; + box-shadow: 0px 0px 5px 0px #101010; +} + +#wireplumber { + padding-left: 5px; + +} + +#pulseaudio-slider slider { + min-height: 0px; + min-width: 0px; + opacity: 0; + background-image: none; + border: none; + box-shadow: none; +} +#pulseaudio-slider trough { + min-height: 5px; + min-width: 80px; + border-radius: 5px; + background-color: #282828; +} +#pulseaudio-slider highlight { + min-width: 10px; + border-radius: 5px; + background-color: #98971a; +} diff --git a/home.nix b/home.nix index 93f3dc2..89f2197 100644 --- a/home.nix +++ b/home.nix @@ -19,12 +19,14 @@ pkgs.adw-gtk3 ]; + programs.hyprlock.enable = true; xdg.configFile.hypr.source = ./modules/hypr; xdg.configFile.waybar.source = ./modules/waybar; xdg.configFile.cava.source = ./modules/cava; xdg.configFile.kitty.source = ./modules/kitty; xdg.configFile.rofi.source = ./modules/rofi; + xdg.configFile.dunst.source = ./modules/dunst; services.mpd-mpris.enable = true; diff --git a/modules/cava/config b/modules/cava/config index 21364cc..87a8c5c 100644 --- a/modules/cava/config +++ b/modules/cava/config @@ -165,16 +165,18 @@ ; continuous_rendering = 0 [color] - -background = '#191724' gradient = 1 -gradient_count = 6 -gradient_color_1 = '#31748f' -gradient_color_2 = '#9ccfd8' -gradient_color_3 = '#c4a7e7' -gradient_color_4 = '#ebbcba' -gradient_color_5 = '#f6c177' -gradient_color_6 = '#eb6f92' +gradient_count = 8 + +#GruvBox Green to Red Gradient +gradient_color_1 = '#98971a' +gradient_color_2 = '#98971a' +gradient_color_3 = '#fabd2f' +gradient_color_4 = '#fabd2f' +gradient_color_5 = '#fabd2f' +gradient_color_6 = '#d65d0e' +gradient_color_7 = '#cc241d' +gradient_color_8 = '#cc241d' [smoothing] diff --git a/modules/dunst/dunstrc b/modules/dunst/dunstrc new file mode 100644 index 0000000..060fdd7 --- /dev/null +++ b/modules/dunst/dunstrc @@ -0,0 +1,22 @@ + +[global] +separator_color= frame +progress_bar = true +progress_bar_corner_radius = 10 +corner_radius = 10 +icon_corner_radius = 10 + +[urgency_low] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#1d2021" + +[urgency_normal] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#1d2021" + +[urgency_critical] +background = "#3c1f1e" +foreground = "#ddc7a1" +frame_color = "#3c1f1e" diff --git a/modules/hypr/hyprland.conf b/modules/hypr/hyprland.conf index 1f5778f..6902bbc 100644 --- a/modules/hypr/hyprland.conf +++ b/modules/hypr/hyprland.conf @@ -3,14 +3,12 @@ autogenerated = 0 # remove this line to remove the warning source=~/.config/hypr/rose-pine.conf # See https://wiki.hyprland.org/Configuring/Monitors/ -monitor=DP-3,2560x1440@170,0x0,1 -monitor=DP-2,3840x2160@60,auto,1.5 -workspace=10,monitor:DP-2 -workspace=1,monitor:DP-3 +monitor = HDMI-A-1, 2560x1440@60, 0x0, 1 exec-once = hyprctl dispatch workspace 1 -exec-once = swaybg -i ~/Pictures/outset_island_night.jpg +exec-once = swaybg -i ~/Pictures/Wallpaper/wallhaven-z85eoy.jpg +exec-once = hyprlock exec-once = waybar -# exec-once = waybar +exec-once = sunshine # See https://wiki.hyprland.org/Configuring/Keywords/ for more # Execute your favorite apps at launch @@ -21,12 +19,12 @@ exec-once = waybar # Set programs that you use $terminal = kitty -$fileManager = cosmic-files -$menu = rofi -show drun +$fileManager = cosmic-files +$menu = rofi -config ~/.config/rofi/apps.rasi -show drun # Some default env vars. env = XCURSOR_SIZE,24 -env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that +env = QT_QPA_PLATFORMTHEME,qt6ct # change to qt6ct if you have that # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ input { @@ -35,6 +33,7 @@ input { kb_model = kb_options = kb_rules = + accel_profile = flat follow_mouse = 1 @@ -49,11 +48,10 @@ general { # See https://wiki.hyprland.org/Configuring/Variables/ for more gaps_in = 5 - gaps_out = 20 + gaps_out = 5 border_size = 2 - col.active_border = $rose - col.inactive_border = $muted - + col.active_border = rgb(1d2021) + col.inactive_border = rgb(1d2021) layout = dwindle # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on @@ -64,7 +62,15 @@ decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more rounding = 10 - + + blur { + enabled = yes + size = 5 + passes = 3 + new_optimizations = on + ignore_opacity = on + xray = false + } drop_shadow = yes shadow_range = 4 @@ -93,10 +99,6 @@ dwindle { preserve_split = yes # you probably want this } -master { - # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more - new_is_master = true -} gestures { # See https://wiki.hyprland.org/Configuring/Variables/ for more @@ -105,21 +107,21 @@ gestures { misc { # See https://wiki.hyprland.org/Configuring/Variables/ for more - force_default_wallpaper = -1 # Set to 0 to disable the anime mascot wallpapers + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers } # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more -device:epic-mouse-v1 { - sensitivity = -0.5 -} + # Example windowrule v1 # windowrule = float, ^(kitty)$ # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -windowrulev2 = nomaximizerequest, class:.* # You'll probably like this. + +# Window Rules + # See https://wiki.hyprland.org/Configuring/Keywords/ for more @@ -128,12 +130,14 @@ $mainMod = SUPER # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more bind = $mainMod, Return, exec, $terminal bind = $mainMod, Q, killactive, -bind = $mainMod, M, exit, +bind = $mainMod, M, exec, hyprlock bind = $mainMod, E, exec, $fileManager bind = $mainMod, V, togglefloating, bind = $mainMod, Space, exec, $menu bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, J, togglesplit, # dwindle +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ +bind = , XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- # Move focus with mainMod + arrow keys bind = $mainMod, left, movefocus, l diff --git a/modules/hypr/hyprlock.conf b/modules/hypr/hyprlock.conf new file mode 100644 index 0000000..61d443c --- /dev/null +++ b/modules/hypr/hyprlock.conf @@ -0,0 +1,84 @@ +background { + monitor = + path = ~/Pictures/Wallpaper/wallhaven-z85eoy.jpg + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_passes = 3 # 0 disables blurring + blur_size = 13 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + + +image { + monitor = + path = ~/NixOS-Configs/pfp.jpg + border_size = 2 + border_color = rgba(255, 255, 255, 0) + size = 130 + rounding = -1 + rotate = 0 + reload_time = -1 + reload_cmd = + position = 0, 40 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:1000] echo -e "$(date +"%A, %B %d")" + color = rgba(235, 219, 178, 0.70) + font_size = 25 + font_family = Roboto Bold + position = 0, 350 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:1000] echo "$(date +"%I:%M")" + color = rgba(235, 219, 178, 0.70) + font_size = 120 + font_family = Roboto Bold + position = 0, 250 + halign = center + valign = center +} + +label { + monitor = + text = Joshua Elmasri + text_align = center # center/right or any value for default left. multi-line text alignment inside label container + color = rgba(235, 219, 178, 1.0) + font_size = 30 + font_family = Roboto Bold + rotate = 0 # degrees, counter-clockwise + + position = 0, -110 + halign = center + valign = center +} + +input-field { + monitor = + size = 300, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + dots_fade_time = 0 + outer_color = rgba(0, 0, 0, 0) + inner_color = rgba(255, 255, 255, 0.1) + font_color = rgb(235, 219, 178) + fade_on_empty = false + font_family = Roboto + placeholder_text = Password + hide_input = false + position = 0, -210 + halign = center + valign = center +} diff --git a/modules/kitty/kitty.conf b/modules/kitty/kitty.conf index 32cc63d..8b923b1 100644 --- a/modules/kitty/kitty.conf +++ b/modules/kitty/kitty.conf @@ -1,6 +1,10 @@ -include themes/rose-pine.conf +include themes/gruvbox.conf font_family Fira Code Nerd Font bold_font auto italic_font auto bold_italic_font auto + +confirm_os_window_close 0 +background_opacity 0.8 +background_blur 0 diff --git a/modules/kitty/themes/gruvbox.conf b/modules/kitty/themes/gruvbox.conf new file mode 100644 index 0000000..34eacee --- /dev/null +++ b/modules/kitty/themes/gruvbox.conf @@ -0,0 +1,56 @@ +# vim:ft=kitty + +# gruvbox-dark colorscheme for kitty +# snazzy theme used as base + +cursor #928374 +cursor_text_color background + +visual_bell_color #8ec07c +bell_border_color #8ec07c + +active_border_color #d3869b +inactive_border_color #665c54 + +active_tab_foreground #fbf1c7 +active_tab_background #665c54 +inactive_tab_foreground #a89984 +inactive_tab_background #3c3836 + +foreground #ebdbb2 +background #272727 +selection_foreground #655b53 +selection_background #ebdbb2 +url_color #d65c0d + +# black +color0 #272727 +color8 #928373 + +# red +color1 #cc231c +color9 #fb4833 + +# green +color2 #989719 +color10 #b8ba25 + +# yellow +color3 #d79920 +color11 #fabc2e + +# blue +color4 #448488 +color12 #83a597 + +# magenta +color5 #b16185 +color13 #d3859a + +# cyan +color6 #689d69 +color14 #8ec07b + +# white +color7 #a89983 +color15 #ebdbb2 diff --git a/modules/nvim/default.nix b/modules/nvim/default.nix index d0ce53d..3b3a238 100644 --- a/modules/nvim/default.nix +++ b/modules/nvim/default.nix @@ -3,15 +3,16 @@ { programs.nixvim = { enable = true; - colorschemes.nord.enable = true; + colorschemes.gruvbox.enable = true; plugins.nvim-tree.enable = true; plugins.treesitter.enable = true; plugins.lualine.enable = true; plugins.lsp.enable = true; plugins.luasnip.enable = true; plugins.toggleterm.enable = true; - plugins.nvim-cmp.enable = true; + plugins.cmp.enable = true; plugins.gitsigns.enable = true; + plugins.web-devicons.enable = true; plugins.which-key.enable = true; plugins.cmp-nvim-lsp.enable = true; plugins.telescope.enable = true; diff --git a/modules/rofi/apps.rasi b/modules/rofi/apps.rasi new file mode 100644 index 0000000..d7d0d7d --- /dev/null +++ b/modules/rofi/apps.rasi @@ -0,0 +1,17 @@ +configuration { + show-icons: true; + font: "FreeSans Regular 12"; + icon-theme: "Gruvbox-Plus-Dark"; + + display-ssh: "󰣀 ssh:"; + display-run: "󱓞 run:"; + display-drun: "󰣖 drun:"; + display-window: "󱂬 window:"; + display-combi: "󰕘 combi:"; + display-filebrowser: "󰉋 filebrowser:"; + + dpi: 110; +} + + +@theme "~/.config/rofi/gruvbox-material.rasi" diff --git a/modules/rofi/config.rasi b/modules/rofi/config.rasi index 6dfc4c2..d7d0d7d 100644 --- a/modules/rofi/config.rasi +++ b/modules/rofi/config.rasi @@ -1,135 +1,17 @@ -@import "default" +configuration { + show-icons: true; + font: "FreeSans Regular 12"; + icon-theme: "Gruvbox-Plus-Dark"; -* { - bg: #191724; - cur: #1f1d2e; - fgd: #e0def4; - cmt: #6e6a86; - cya: #9ccfd8; - grn: #31748f; - ora: #ebbcba; - pur: #c4a7e7; - red: #eb6f92; - yel: #f6c177; + display-ssh: "󰣀 ssh:"; + display-run: "󱓞 run:"; + display-drun: "󰣖 drun:"; + display-window: "󱂬 window:"; + display-combi: "󰕘 combi:"; + display-filebrowser: "󰉋 filebrowser:"; - font: "Cartograph CF 12"; - - foreground: @fgd; - background: @bg; - active-background: @grn; - urgent-background: @red; - - selected-background: @active-background; - selected-urgent-background: @urgent-background; - selected-active-background: @active-background; - separatorcolor: @active-background; - bordercolor: @ora; + dpi: 110; } -#window { - background-color: @background; - border: 3; - border-radius: 6; - border-color: @bordercolor; - padding: 5; -} -#mainbox { - border: 0; - padding: 5; -} -#message { - border: 1px dash 0px 0px ; - border-color: @separatorcolor; - padding: 1px ; -} -#textbox { - text-color: @foreground; -} -#listview { - fixed-height: 0; - border: 2px dash 0px 0px ; - border-color: @bordercolor; - spacing: 2px ; - scrollbar: false; - padding: 2px 0px 0px ; -} -#element { - border: 0; - padding: 1px ; -} -#element.normal.normal { - background-color: @background; - text-color: @foreground; -} -#element.normal.urgent { - background-color: @urgent-background; - text-color: @urgent-foreground; -} -#element.normal.active { - background-color: @active-background; - text-color: @background; -} -#element.selected.normal { - background-color: @selected-background; - text-color: @foreground; -} -#element.selected.urgent { - background-color: @selected-urgent-background; - text-color: @foreground; -} -#element.selected.active { - background-color: @selected-active-background; - text-color: @background; -} -#element.alternate.normal { - background-color: @background; - text-color: @foreground; -} -#element.alternate.urgent { - background-color: @urgent-background; - text-color: @foreground; -} -#element.alternate.active { - background-color: @active-background; - text-color: @foreground; -} -#scrollbar { - width: 2px ; - border: 0; - handle-width: 8px ; - padding: 0; -} -#sidebar { - border: 2px dash 0px 0px ; - border-color: @separatorcolor; -} -#button.selected { - background-color: @selected-background; - text-color: @foreground; -} -#inputbar { - spacing: 0; - text-color: @foreground; - padding: 1px ; -} -#case-indicator { - spacing: 0; - text-color: @foreground; -} -#entry { - spacing: 0; - text-color: @cya; -} -#prompt { - spacing: 0; - text-color: @grn; -} -#inputbar { - children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; -} -#textbox-prompt-colon { - expand: false; - str: ":"; - margin: 0px 0.3em 0em 0em; - text-color: @grn; -} + +@theme "~/.config/rofi/gruvbox-material.rasi" diff --git a/modules/rofi/gruvbox-material.rasi b/modules/rofi/gruvbox-material.rasi new file mode 100644 index 0000000..30c40e3 --- /dev/null +++ b/modules/rofi/gruvbox-material.rasi @@ -0,0 +1,141 @@ +* { + gruv0: #282828; + gruv1: #32302f; + gruv2: #45403d; + gruv3: #5a524c; + + gruv4: #fbf1c7; + gruv5: #f4e8be; + gruv6: #eee0b7; + + gruv7: #a89984; + gruv8: #928374; + gruv9: #7c6f64; + gruv10: #504945; + red: #ea6962; + + orange: #e78a4e; + yellow: #d8a657; + aqua: #89b482; + purple: #d3869b; + + reddark: #c14a4a; + yellowdark: #b47109; + + foreground: @gruv9; + background-color: transparent; + + highlight: underline bold #eee0b7; + + transparent: rgba(0,0,0,0.1); + +} + +window { + location: center; + anchor: center; + border-radius: 20px; + height: 560px; + width: 600px; + + background-color: #282828; + spacing: 0; + children: [mainbox]; + orientation: horizontal; +} + +mainbox { + spacing: 0; + children: [ inputbar, message, listview ]; +} + +message { + padding: 10px; + border: 0px 2px 2px 2px; + border-color: @gruv0; + background-color: @transparent; +} + +inputbar { + color: @gruv6; + padding: 14px; + background-color: @transparent; + border-color: @gruv6; + + border: 4px; + border-radius: 20px 20px 0px 0px; +} + +entry, prompt, case-indicator { + text-font: inherit; + text-color: inherit; +} + +prompt { + margin: 0px 1em 0em 0em ; +} + +listview { + padding: 8px; + border-radius: 0px 0px 20px 20px; + border: 0px 4px 4px 4px; + border-color: @gruv6; + background-color: @transparent; + dynamic: false; +} + +element { + padding: 5px; + vertical-align: 0.5; + border-radius: 5px; + color: @foreground; + text-color: @gruv6; + background-color: @transparent; +} + +element.normal.active { + background-color: @yellow; +} + +element.normal.urgent { + background-color: @reddark; +} + +element.selected.normal { + background-color: @gruv7; + text-color: @gruv0; +} + +element.selected.active { + background-color: @yellowdark; +} + +element.selected.urgent { + background-color: @red; +} + +element.alternate.normal { + background-color: @transparent; +} + +element-text, element-icon { + size: 3ch; + margin: 0 10 0 0; + vertical-align: 0.5; + text-color: @gruv6; +} + +button { + padding: 6px; + color: @foreground; + horizontal-align: 0.5; + + border: 2px 0px 2px 2px; + border-radius: 5px; + border-color: @foreground; +} + +button.selected.normal { + border: 2px 0px 2px 2px; + border-color: @foreground; +} diff --git a/modules/waybar/config b/modules/waybar/config index 8ca467c..8bf1dbe 100644 --- a/modules/waybar/config +++ b/modules/waybar/config @@ -2,8 +2,8 @@ "layer": "top", "margin": "5, 5, 5, 5", "modules-left": ["hyprland/workspaces"], - "modules-center": ["mpris", "clock"], - "modules-right": ["cava", "privacy", "network", "pulseaudio/slider", "tray"], + "modules-center": ["clock"], + "modules-right": ["mpris", "cava", "network", "wireplumber", "tray"], "battery": { "format": "{capacity}% {icon}", "format-icons": ["", "", "", "", ""] @@ -13,7 +13,6 @@ }, "cava": { - "cava_config": "/home/joshuaelm/.config/cava/config", "bars": 14, "bar_delimiter": 0, "format-icons" : ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ], @@ -56,18 +55,33 @@ "mpris": { - "format": "{player_icon} {title}", - "format-paused": "{status_icon} {title}", - "format-len": 50, - "status-icons": { - "paused": "" + "format": "{player_icon}", + "format-paused": "{status_icon}", + "player-icons": { + "default": "▶", + "mpv": "🎵" }, - }, - "pulseaudio/slider": { - "min": 0, - "max": 100 - }, - "hyprland/workspaces": { - "active-only": false + "status-icons": { + "paused": "⏸" + }, + }, + + "wireplumber": { + "format": "{volume}%", + "format-muted": "󰝟", + "on-click": "pavucontrol", + "scroll-step": 0.8, + "max-volume": 100, + "tooltip": true, + "tooltip-format": "{volume}% volume on device {node_name}" + }, + + "hyprland/workspaces": { + "active-only": false, + "format": "{icon}", + "format-icons": { + "active": "", + "default": "", + } } } diff --git a/modules/waybar/style.css b/modules/waybar/style.css index ddf1685..7fab9a8 100644 --- a/modules/waybar/style.css +++ b/modules/waybar/style.css @@ -1,14 +1,13 @@ -@import "./rose-pine.css"; * { - font-family: "FiraCode Nerd ont"; + font-family: "Roboto"; font-size: 17px; border-radius: 10px; } window#waybar { - background-color: @base; - color: @text; + background-color: #282828; + color: #ebdbb2; margin: 0 4px; } window > box { @@ -22,11 +21,11 @@ window > box { #network { padding-left: 4px; padding-right: 2px; - color: @foam; + color: #458588; } #cava { - color: @iris; + color: #b8bb26; margin-left: 5px; } @@ -36,12 +35,12 @@ window > box { } #workspaces.button { - color: @text; + color: #ebdbb2; } #workspaces.button.focused { - color: @overlay; - background-color: @text; + color: #a89984; + background-color: #ebdbb2; } #clock { @@ -50,25 +49,29 @@ window > box { margin-right: 5px; } #mpris { - margin-right: 5px; - margin-left: 5px + padding-left: 5px; } .modules-center { - background: @surface; + background: #3c3836; box-shadow: 0px 0px 5px 0px #101010; } .modules-right { - background: @surface; + background: #3c3836; box-shadow: 0px 0px 5px 0px #101010; } .modules-left { - background: @surface; + background: #3c3836; box-shadow: 0px 0px 5px 0px #101010; } +#wireplumber { + padding-left: 5px; + +} + #pulseaudio-slider slider { min-height: 0px; min-width: 0px; @@ -81,10 +84,10 @@ window > box { min-height: 5px; min-width: 80px; border-radius: 5px; - background-color: @base; + background-color: #282828; } #pulseaudio-slider highlight { min-width: 10px; border-radius: 5px; - background-color: @pine; + background-color: #98971a; } diff --git a/pfp.jpg b/pfp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e97bf9788d63099340b5b29cbe1a93b5e714b7a GIT binary patch literal 72815 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 rIEFQ;F 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

6!kdu(KD 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 -u>tRsn$+1A#FBG*xkV7!++} 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