From b593cdeb3e34b7c956f8a34d4bdadb5fd45dadfb Mon Sep 17 00:00:00 2001 From: Nicolai Van der Storm Date: Fri, 13 Oct 2023 15:56:14 +0200 Subject: [PATCH] Initial commit :rocket: --- .sops.yaml | 5 + flake.lock | 299 ++++++++++++++++ flake.nix | 56 +++ nix/lib/colors.nix | 4 + nix/lib/default.nix | 0 nix/systems/main/base/default.nix | 71 ++++ nix/systems/main/base/docker.nix | 11 + nix/systems/main/base/networking.nix | 13 + nix/systems/main/base/packages.nix | 68 ++++ nix/systems/main/base/services.nix | 74 ++++ nix/systems/main/base/virtulization.nix | 29 ++ nix/systems/main/desktop/default.nix | 30 ++ .../main/desktop/hardware-configuration.nix | 68 ++++ nix/users/base/default.nix | 8 + nix/users/base/neovim.nix | 25 ++ nix/users/base/packages.nix | 15 + nix/users/base/zsh.nix | 29 ++ nix/users/nicolaivds/colors/default.nix | 17 + nix/users/nicolaivds/default.nix | 48 +++ nix/users/nicolaivds/general/default.nix | 7 + nix/users/nicolaivds/general/packages.nix | 65 ++++ nix/users/nicolaivds/programs/brave.nix | 13 + nix/users/nicolaivds/programs/default.nix | 10 + nix/users/nicolaivds/programs/git.nix | 69 ++++ nix/users/nicolaivds/programs/mpd.nix | 23 ++ nix/users/nicolaivds/programs/sops.nix | 20 ++ nix/users/nicolaivds/programs/vscodium.nix | 7 + nix/users/nicolaivds/programs/webcord.nix | 19 ++ nix/users/nicolaivds/secrets/secrets.yaml | 24 ++ nix/users/nicolaivds/themes/default.nix | 7 + nix/users/nicolaivds/themes/gtk.nix | 37 ++ nix/users/nicolaivds/themes/qt.nix | 8 + nix/users/nicolaivds/wayland/default.nix | 10 + nix/users/nicolaivds/wayland/foot.nix | 52 +++ nix/users/nicolaivds/wayland/hyprland.nix | 228 +++++++++++++ nix/users/nicolaivds/wayland/waybar.nix | 323 ++++++++++++++++++ nix/users/nicolaivds/wayland/wlogout.nix | 33 ++ nix/users/nicolaivds/wayland/wofi.nix | 55 +++ nvim/init.lua | 11 + nvim/lua/core/colors.lua | 18 + nvim/lua/core/functions.lua | 112 ++++++ nvim/lua/core/keymaps.lua | 93 +++++ nvim/lua/core/options.lua | 33 ++ nvim/lua/lazy.lua | 83 +++++ nvim/lua/plugins/colorschemes/catppuccin.lua | 49 +++ nvim/lua/plugins/colorschemes/dracula.lua | 48 +++ nvim/lua/plugins/colorschemes/gruvbox.lua | 27 ++ nvim/lua/plugins/colorschemes/onedarkpro.lua | 6 + nvim/lua/plugins/colorschemes/rosepine.lua | 54 +++ nvim/lua/plugins/colorschemes/tokyonight.lua | 40 +++ 50 files changed, 2454 insertions(+) create mode 100644 .sops.yaml create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/lib/colors.nix create mode 100644 nix/lib/default.nix create mode 100644 nix/systems/main/base/default.nix create mode 100644 nix/systems/main/base/docker.nix create mode 100644 nix/systems/main/base/networking.nix create mode 100644 nix/systems/main/base/packages.nix create mode 100644 nix/systems/main/base/services.nix create mode 100644 nix/systems/main/base/virtulization.nix create mode 100644 nix/systems/main/desktop/default.nix create mode 100644 nix/systems/main/desktop/hardware-configuration.nix create mode 100644 nix/users/base/default.nix create mode 100644 nix/users/base/neovim.nix create mode 100644 nix/users/base/packages.nix create mode 100644 nix/users/base/zsh.nix create mode 100644 nix/users/nicolaivds/colors/default.nix create mode 100644 nix/users/nicolaivds/default.nix create mode 100644 nix/users/nicolaivds/general/default.nix create mode 100644 nix/users/nicolaivds/general/packages.nix create mode 100644 nix/users/nicolaivds/programs/brave.nix create mode 100644 nix/users/nicolaivds/programs/default.nix create mode 100644 nix/users/nicolaivds/programs/git.nix create mode 100644 nix/users/nicolaivds/programs/mpd.nix create mode 100644 nix/users/nicolaivds/programs/sops.nix create mode 100644 nix/users/nicolaivds/programs/vscodium.nix create mode 100644 nix/users/nicolaivds/programs/webcord.nix create mode 100644 nix/users/nicolaivds/secrets/secrets.yaml create mode 100644 nix/users/nicolaivds/themes/default.nix create mode 100644 nix/users/nicolaivds/themes/gtk.nix create mode 100644 nix/users/nicolaivds/themes/qt.nix create mode 100644 nix/users/nicolaivds/wayland/default.nix create mode 100644 nix/users/nicolaivds/wayland/foot.nix create mode 100644 nix/users/nicolaivds/wayland/hyprland.nix create mode 100644 nix/users/nicolaivds/wayland/waybar.nix create mode 100644 nix/users/nicolaivds/wayland/wlogout.nix create mode 100644 nix/users/nicolaivds/wayland/wofi.nix create mode 100644 nvim/init.lua create mode 100644 nvim/lua/core/colors.lua create mode 100644 nvim/lua/core/functions.lua create mode 100644 nvim/lua/core/keymaps.lua create mode 100644 nvim/lua/core/options.lua create mode 100644 nvim/lua/lazy.lua create mode 100644 nvim/lua/plugins/colorschemes/catppuccin.lua create mode 100644 nvim/lua/plugins/colorschemes/dracula.lua create mode 100644 nvim/lua/plugins/colorschemes/gruvbox.lua create mode 100644 nvim/lua/plugins/colorschemes/onedarkpro.lua create mode 100644 nvim/lua/plugins/colorschemes/rosepine.lua create mode 100644 nvim/lua/plugins/colorschemes/tokyonight.lua diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..ba204e2 --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,5 @@ +keys: + - &master age16xvq5a9js563tk9mqltxaz5wkjte9rkj2et4zwswrr96pkzq4susghwmmm +creation_rules: + - path_regex: ^nix/users/[^/]+/secrets/[^/]+\.(yaml|json)$ + age: *master \ No newline at end of file diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ad46d2e --- /dev/null +++ b/flake.lock @@ -0,0 +1,299 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1692799911, + "narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696940889, + "narHash": "sha256-p2Wic74A1tZpFcld1wSEbFQQbrZ/tPDuLieCnspamQo=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "6bba64781e4b7c1f91a733583defbd3e46b49408", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1697151905, + "narHash": "sha256-sfuiRn7D5D2NzDkXXN/DUUcs2d1ddlf3VmzDBzDO2Tk=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "3a61350286de842c7f1566c38e2b42821080ddf4", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "maxfetch": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1690770330, + "narHash": "sha256-LzOhrFFjGs9GIDjk1lUFKhlnzJuEUrKjBcv1eT3kaY8=", + "owner": "jobcmax", + "repo": "maxfetch", + "rev": "17baa4047073e20572403b70703c69696af6b68d", + "type": "github" + }, + "original": { + "owner": "jobcmax", + "repo": "maxfetch", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1694767346, + "narHash": "sha256-5uH27SiVFUwsTsqC5rs3kS7pBoNhtoy9QfTP9BmknGk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ace5093e36ab1e95cb9463863491bee90d5a4183", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1690640159, + "narHash": "sha256-5DZUYnkeMOsVb/eqPYb9zns5YsnQXRJRC8Xx/nPMcno=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e6ab46982debeab9831236869539a507f670a129", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1697059129, + "narHash": "sha256-9NJcFF9CEYPvHJ5ckE8kvINvI84SZZ87PvqMbH6pro0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5e4c2ada4fcd54b99d56d7bd62f384511a7e2593", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1693060755, + "narHash": "sha256-KNsbfqewEziFJEpPR0qvVz4rx0x6QXxw1CcunRhlFdk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c66ccfa00c643751da2fd9290e096ceaa30493fc", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "orcaslicer": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1693147294, + "narHash": "sha256-4+09HY6FhZTZBHnQaKMANq8nAz//lIZ95X78ylCKjr4=", + "owner": "ovlach", + "repo": "nix-orca-slicer", + "rev": "1e71e6e01ef3b49d0731ca611b6bfce32dbe26d0", + "type": "github" + }, + "original": { + "owner": "ovlach", + "repo": "nix-orca-slicer", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "hyprland": "hyprland", + "maxfetch": "maxfetch", + "nixpkgs": "nixpkgs_3", + "orcaslicer": "orcaslicer", + "sops-nix": "sops-nix" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": [] + }, + "locked": { + "lastModified": 1697064251, + "narHash": "sha256-xxp2sB+4vqB6S6zC/L5J8LlRKgVbgIZOcYl9/TDrEzI=", + "owner": "mic92", + "repo": "sops-nix", + "rev": "f995ea159252a53b25fa99824f2891e3b479d511", + "type": "github" + }, + "original": { + "owner": "mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "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_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1696410538, + "narHash": "sha256-ecDhdYLXWHsxMv+EWG36mCNDvzRbu9qfjH7dLxL7aGM=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "3406c1b17a4a7e6d4e2a7d9c1176affa72bce1bc", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "3406c1b17a4a7e6d4e2a7d9c1176affa72bce1bc", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1694628480, + "narHash": "sha256-Qg9hstRw0pvjGu5hStkr2UX1D73RYcQ9Ns/KnZMIm9w=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "8f45a6435069b9e24ebd3160eda736d7a391cbf2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..a1538e7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,56 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + maxfetch.url = "github:jobcmax/maxfetch"; + orcaslicer.url = "github:ovlach/nix-orca-slicer"; + hyprland.url = "github:hyprwm/Hyprland"; + sops-nix = { + url = "github:mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs-stable.follows = ""; + }; + }; + + outputs = { self, nixpkgs, home-manager, ...}@inputs: + let + system = "x86_64-linux"; + username = "nicolaivds"; + home_profile = "nicolaivds"; + pkgs = nixpkgs.legacyPackages.${system}; + # The path to this very repo + flake_path = "~/.dotfiles"; + in + { + homeConfigurations = { + "${username}" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { inherit username flake_path inputs; }; + modules = [ + ./nix/users/${home_profile} + # Pin registry to flake + { nix.registry.nixpkgs.flake = nixpkgs; } + # Pin channel to flake + # { home.sessionVariables.NIX_PATH = "nixpkgs=nixpkgs=flake:nixpkgs$\{NIX_PATH:+:$NIX_PATH}"; } + { home.sessionVariables.NIX_PATH = "nixpkgs=flake:nixpkgs$\{NIX_PATH:+:$NIX_PATH}"; } + ]; + }; + }; + + nixosConfigurations = { + desktop = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit username flake_path inputs; }; + modules = [ + ./nix/systems/main/desktop + { nix.registry.nixpkgs.flake = nixpkgs; } + # { nix.nixPath = [ "nixpkgs=configflake:nixpkgs" ]; } + { nix.nixPath = [ "nixpkgs=flake:nixpkgs" ]; } + ]; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/lib/colors.nix b/nix/lib/colors.nix new file mode 100644 index 0000000..645a510 --- /dev/null +++ b/nix/lib/colors.nix @@ -0,0 +1,4 @@ +{ lib, hex }: +rec { + +} \ No newline at end of file diff --git a/nix/lib/default.nix b/nix/lib/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/nix/systems/main/base/default.nix b/nix/systems/main/base/default.nix new file mode 100644 index 0000000..7ae1e28 --- /dev/null +++ b/nix/systems/main/base/default.nix @@ -0,0 +1,71 @@ +{ username, pkgs, ... }: +{ + imports = [ + ./networking.nix + ./packages.nix + ./services.nix + ./virtulization.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + nix = { + settings = { + auto-optimise-store = true; + experimental-features = [ "nix-command" "flakes" ]; + }; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + }; + nixpkgs.config.allowUnfree = true; + + # Set your time zone. + time.timeZone = "Europe/Brussels"; + + users = { + defaultUserShell = pkgs.zsh; + groups = { + "${username}" = {}; + }; + users.nicolaivds = { + isNormalUser = true; + # initialPassword = "gigachad"; + extraGroups = ["wheel" "video" "plugdev" "${username}"]; + packages = with pkgs; [ + ]; + }; + }; + + environment.sessionVariables = rec { + WLR_NO_HARDWARE_CURSORS = "1"; + NIXOS_OZONE_WL = "1"; + LIBSEAT_BACKEND = "logind"; + + XDG_CACHE_HOME = "$HOME/.cache"; + XDG_CONFIG_HOME = "$HOME/.config"; + XDG_DATA_HOME = "$HOME/.local/share"; + XDG_STATE_HOME = "$HOME/.local/state"; + + # Not officially in the specification + XDG_BIN_HOME = "$HOME/.local/bin"; + PATH = [ + "${XDG_BIN_HOME}" + ]; + }; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html) + + system.stateVersion = "23.05"; # Did you read the comment? +} \ No newline at end of file diff --git a/nix/systems/main/base/docker.nix b/nix/systems/main/base/docker.nix new file mode 100644 index 0000000..c399d78 --- /dev/null +++ b/nix/systems/main/base/docker.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, inputs, ... }: +{ + users.users.justinlime.extraGroups = [ "docker" ]; + environment.systemPackages = with pkgs; [ + docker-compose + ]; + virtualisation.docker = { + enable = true; + storageDriver = true; + }; +} \ No newline at end of file diff --git a/nix/systems/main/base/networking.nix b/nix/systems/main/base/networking.nix new file mode 100644 index 0000000..09e473f --- /dev/null +++ b/nix/systems/main/base/networking.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + networking = { + networkmanager.enable = true; + nameservers = [ "1.1.1.1" "1.0.0.1" ]; + firewall = { + enable = true; + checkReversePath = false; + allowedTCPPorts = [ 80 443 ]; + allowedUDPPorts = []; + }; + }; +} \ No newline at end of file diff --git a/nix/systems/main/base/packages.nix b/nix/systems/main/base/packages.nix new file mode 100644 index 0000000..6f207a2 --- /dev/null +++ b/nix/systems/main/base/packages.nix @@ -0,0 +1,68 @@ +{ pkgs, inputs, flake_path, ... }: +{ + # List packages installed in system profile + environment = { + systemPackages = with pkgs; [ + age + curl + gcc + git + gnome.file-roller + pulseaudio + unzip + wireplumber + wget + wl-clipboard + zip + inputs.home-manager.packages.${pkgs.system}.home-manager + ]; + variables = { EDITOR = "nvim"; }; + pathsToLink = [ "/share/zsh" ]; + }; + + hardware.opengl.enable = true; + + # Programs + programs = { + dconf.enable = true; + direnv.enable = true; + hyprland.enable = true; + thunar = { + enable = true; + plugins = with pkgs.xfce; [ + xfconf + thunar-volman + thunar-archive-plugin + thunar-media-tags-plugin + ]; + }; + zsh = { + enable = true; + syntaxHighlighting.enable = true; + enableCompletion = true; + autosuggestions.enable = true; + setOptions = ["PROMPT_SUBST" "appendhistory"]; + shellAliases = { + ga = "git add"; + gs = "git status"; + gb = "git branch"; + gm = "git merge"; + gpl = "git pull"; + gplo = "git pull origin"; + gps = "git push"; + gpso = "git push origin"; + gc = "git commit"; + gcm = "git commit -m"; + gch = "git checkout"; + gchb = "git checkout -b"; + gcoe = "git config user.email"; + gcon = "git config user.name"; + all-switch = "nix-switch && home-switch"; + all-update = "nix flake update ${flake_path}# && all-switch"; + vi = "nvim"; + vim = "nvim"; + vimdiff = "nvim -d"; + }; + }; + }; +} diff --git a/nix/systems/main/base/services.nix b/nix/systems/main/base/services.nix new file mode 100644 index 0000000..2e28d9a --- /dev/null +++ b/nix/systems/main/base/services.nix @@ -0,0 +1,74 @@ +{ lib, pkgs, ... }: +{ + # List services that you want to enable: + services = { + xserver = { + layout = "be"; + xkbVariant = "nodeadkeys"; + videoDrivers = ["nvidia"]; + exportConfiguration = true; + + #displayManager.gdm.enable = true; + }; + + gnome.gnome-keyring.enable = true; + + spice-vdagentd.enable = true; + gvfs = { + enable = true; + package = lib.mkForce pkgs.gnome3.gvfs; + }; + + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + udev.packages = with pkgs; [ + via + ]; + printing = { + enable = true; + drivers = with pkgs; [ + gutenprint + hplip + ]; + }; + }; + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ + #pkgs.xdg-desktop-portal-hyprland + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-wlr + ]; + }; + virtualisation = { + docker.enable = true; + docker.rootless = { + enable = true; + setSocketVariable = true; + }; + spiceUSBRedirection.enable = true; + libvirtd = { + enable = true; + allowedBridges = ["wlo1"]; + qemu = { + swtpm.enable = true; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + }; + }; + }; + security = { + rtkit.enable = true; + pam.services.swaylock = { #Swaylock fix for wrong password + text = '' + auth include login + ''; + }; + }; +} \ No newline at end of file diff --git a/nix/systems/main/base/virtulization.nix b/nix/systems/main/base/virtulization.nix new file mode 100644 index 0000000..837b5fd --- /dev/null +++ b/nix/systems/main/base/virtulization.nix @@ -0,0 +1,29 @@ +{ config, lib, pkgs, inputs, ... }: +{ + users.users.nicolaivds.extraGroups = [ "kvm" "input" "libvirtd" ]; + environment.systemPackages = with pkgs; [ + virt-manager + virt-viewer + win-spice + win-virtio + spice + spice-gtk + spice-protocol + ]; + + services.spice-vdagentd.enable = true; + virtualisation = { + spiceUSBRedirection.enable = true; + libvirtd = { + enable = true; + allowedBridges = ["wlo1"]; + qemu = { + swtpm.enable = true; + ovmf = { + enable = true; + packages = [ pkgs.OVMFFull.fd ]; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/systems/main/desktop/default.nix b/nix/systems/main/desktop/default.nix new file mode 100644 index 0000000..235cf9c --- /dev/null +++ b/nix/systems/main/desktop/default.nix @@ -0,0 +1,30 @@ +{ pkgs, flake_path, ... }: +{ + imports = [ + ./hardware-configuration.nix + ../base + ]; + + # System + networking.hostName = "Beast"; + programs.steam = { + enable = true; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + }; + environment = { + systemPackages = with pkgs; [ + mangohud + nvidia-vaapi-driver + egl-wayland + ]; + }; + + powerManagement = { + enable = true; + cpuFreqGovernor = "performance"; + }; + + # Programs + programs.zsh.shellAliases.nix-switch = "nixos-rebuild switch --use-remote-sudo --flake ${flake_path}#desktop"; +} \ No newline at end of file diff --git a/nix/systems/main/desktop/hardware-configuration.nix b/nix/systems/main/desktop/hardware-configuration.nix new file mode 100644 index 0000000..c9b10fb --- /dev/null +++ b/nix/systems/main/desktop/hardware-configuration.nix @@ -0,0 +1,68 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/0b17d697-e4df-4a42-b374-57f4474c8d36"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/813C-8212"; + fsType = "vfat"; + }; + + fileSystems."/mnt/venus" = + { device = "/dev/disk/by-uuid/dfc684ed-744d-4560-8c69-846693fb51e6"; + fsType = "ext4"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/9304179a-f639-41bb-8819-872fc99d5166"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware = { + cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + opengl = { + enable = true; + + # Vulkan + driSupport = true; + driSupport32Bit = true; + + # VA-API + extraPackages = with pkgs; [ + vaapiVdpau + libvdpau-va-gl + nvidia-vaapi-driver + ]; + }; + + nvidia = { + modesetting.enable = true; + open = true; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.vulkan_beta; + }; + }; +} diff --git a/nix/users/base/default.nix b/nix/users/base/default.nix new file mode 100644 index 0000000..40e8921 --- /dev/null +++ b/nix/users/base/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./neovim.nix + ./zsh.nix + ./packages.nix + ]; +} diff --git a/nix/users/base/neovim.nix b/nix/users/base/neovim.nix new file mode 100644 index 0000000..d154189 --- /dev/null +++ b/nix/users/base/neovim.nix @@ -0,0 +1,25 @@ +{ inputs, pkgs, ... }: +{ + home.packages = with pkgs; [ + neovim + ripgrep + + # Language Servers + lua-language-server # Lua + nixd # Nix + gopls # GoLang + rust-analyzer # Rust + zls # Zig + llvmPackages_15.clang-unwrapped #C, C++ + python311Packages.jedi-language-server #Python + nodePackages_latest.vscode-langservers-extracted #HTML,CSS, JSON + nodePackages_latest.grammarly-languageserver #Markdown + nodePackages_latest.typescript-language-server #Javascript and Typescript + nodePackages_latest.bash-language-server #Bash + nodePackages_latest.dockerfile-language-server-nodejs #Dockerfiles + nodePackages_latest.yaml-language-server #Yaml + ]; + # xdg.configFile = { + # "nvim".source = "${inputs.self}/nvim"; + # }; +} diff --git a/nix/users/base/packages.nix b/nix/users/base/packages.nix new file mode 100644 index 0000000..755b1f2 --- /dev/null +++ b/nix/users/base/packages.nix @@ -0,0 +1,15 @@ +{ pkgs, inputs, ... }: +{ + fonts.fontconfig.enable = true; + + home.packages = with pkgs; [ + gcc + vrrtest + websocat + roboto + fira-code + pciutils + libnotify + (nerdfonts.override { fonts = [ "RobotoMono" ]; }) + ]; +} \ No newline at end of file diff --git a/nix/users/base/zsh.nix b/nix/users/base/zsh.nix new file mode 100644 index 0000000..d7fb4f1 --- /dev/null +++ b/nix/users/base/zsh.nix @@ -0,0 +1,29 @@ +{ config, ... }: +{ + programs.zsh = { + enable = true; + autocd = true; + enableAutosuggestions = true; + enableCompletion = true; + syntaxHighlighting.enable = true; + dotDir = "~/.config/zsh"; + history.path = "~/.config/zsh/.zsh_history"; + initExtra = '' + setopt appendhistory + parse_git_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' + } + setopt PROMPT_SUBST + PROMPT='%B%F{183}%m%f%F{111}[%f%F{158}%~%f%F{111}]%f%F{111}$(parse_git_branch)%f %F{183}>%f%f%b ' + if [[ "$TERM" == "dumb" ]] + then + unsetopt zle + unsetopt prompt_cr + unsetopt prompt_subst + unfunction precmd + unfunction preexec + PS1='$ ' + fi + ''; + }; +} diff --git a/nix/users/nicolaivds/colors/default.nix b/nix/users/nicolaivds/colors/default.nix new file mode 100644 index 0000000..8ac4815 --- /dev/null +++ b/nix/users/nicolaivds/colors/default.nix @@ -0,0 +1,17 @@ +rec { + primary_accent_hex = "cba6f7"; + secondary_accent_hex = "89b4fa"; + tertiary_accent_hex = "f5f5f5"; + primary_background_hex = "11111B"; + secondary_background_hex = "1b1b2b"; + tertiary_background_hex = "25253a"; + + primary_accent_rgba = "rgba(203,166,247,${opacity})"; + secondary_accent_rgba = "rgba(137,180,250,${opacity})"; + tertiary_accent_rgba = "rgba(245,245,245,${opacity})"; + primary_background_rgba = "rgba(17,17,27,${opacity})"; + secondary_background_rgba = "rgba(27,27,43,${opacity})"; + tertiary_background_rgba = "rgba(37,37,58,${opacity})"; + + opacity = "1"; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/default.nix b/nix/users/nicolaivds/default.nix new file mode 100644 index 0000000..c082d5c --- /dev/null +++ b/nix/users/nicolaivds/default.nix @@ -0,0 +1,48 @@ +{ inputs, username, flake_path, ... }: +let + # Variables to share accross configs + custom = { + font = "RobotoMono Nerd Font"; + fontsize = "12"; + primary_accent = "cba6f7"; + secondary_accent= "89b4fa"; + tertiary_accent = "f5f5f5"; + background = "11111B"; + opacity = "1"; + cursor = "Numix-Cursor"; + palette = import ./colors; + }; +in +{ + _module.args = { inherit inputs username custom; }; + imports = [ + ./general + ./programs + ./themes + ./wayland + ]; + + # Let Home Manager install and mange itself + programs.home-manager.enable = true; + nixpkgs.config.allowUnfree = true; + nixpkgs.config.allowUnfreePredicate = _: true; + home.shellAliases = { + home-switch = "home-manager switch --flake ${flake_path}#${username}"; + sudo = "sudo -E"; + sudopath = "sudo env PATH=$PATH"; + }; + + # Home Manager needs a bit of information about you and the path it should manage + home.username = "${username}"; + home.homeDirectory = "/home/${username}"; + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "23.05"; +} diff --git a/nix/users/nicolaivds/general/default.nix b/nix/users/nicolaivds/general/default.nix new file mode 100644 index 0000000..904c508 --- /dev/null +++ b/nix/users/nicolaivds/general/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ../../base + ./packages.nix + ]; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/general/packages.nix b/nix/users/nicolaivds/general/packages.nix new file mode 100644 index 0000000..8a05940 --- /dev/null +++ b/nix/users/nicolaivds/general/packages.nix @@ -0,0 +1,65 @@ +{ pkgs, inputs, ... }: +{ + #Overlays/Overrides + nixpkgs.overlays = [ + (self: super: { + waybar = super.waybar.overrideAttrs (oldAttrs: { + mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ]; + }); + }) + ]; + + programs.direnv.enable = true; + + #Packages + home.packages = with pkgs; [ + betterbird + bottles + brave + btop + cliphist + foot + gamemode + gamescope + glibc + go + grim + hplipWithPlugin + inputs.maxfetch.packages.${pkgs.system}.default + inputs.orcaslicer.packages.${pkgs.system}.orca-slicer + libreoffice + lutris + mpv + neofetch + neovim + nix-prefetch-github + obs-studio + obs-studio-plugins.obs-pipewire-audio-capture + obs-studio-plugins.obs-vkcapture + obs-studio-plugins.wlrobs + pavucontrol + picard + playerctl + protontricks + protonup-qt + qbittorrent + remmina + slurp + steamtinkerlaunch + swayidle + swaylock-effects + swaynotificationcenter + swww + vlc + waybar + wine-wayland + winetricks + wl-clipboard + wlogout + wofi + xdg-utils + xdotool + xorg.xprop + xorg.xwininfo + ]; +} diff --git a/nix/users/nicolaivds/programs/brave.nix b/nix/users/nicolaivds/programs/brave.nix new file mode 100644 index 0000000..4198b36 --- /dev/null +++ b/nix/users/nicolaivds/programs/brave.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: +{ + programs.chromium = { + enable = true; + package = pkgs.brave; + extensions = [ + { id = "nngceckbapebfimnlniiiahkandclblb"; } # Bitwarden + { id = "gebbhagfogifgggkldgodflihgfeippi"; } # Return Youtube Dislike + { id = "mnjggcdmjocbbbhaepdhchncahnbgone"; } # SponsorBlock + { id = "bmnlcjabgnpnenekpadlanbbkooimhnj"; } # Honey + ]; + }; +} diff --git a/nix/users/nicolaivds/programs/default.nix b/nix/users/nicolaivds/programs/default.nix new file mode 100644 index 0000000..47cabfc --- /dev/null +++ b/nix/users/nicolaivds/programs/default.nix @@ -0,0 +1,10 @@ +{ + imports = [ + ./webcord.nix + ./mpd.nix + ./brave.nix + ./vscodium.nix + ./git.nix + ./sops.nix + ]; +} diff --git a/nix/users/nicolaivds/programs/git.nix b/nix/users/nicolaivds/programs/git.nix new file mode 100644 index 0000000..6d1e81e --- /dev/null +++ b/nix/users/nicolaivds/programs/git.nix @@ -0,0 +1,69 @@ +{ pkgs, config, ... }: +{ + services.gpg-agent.enable = true; + programs = { + git = { + enable = true; + delta.enable = true; + includes = [ + { + condition = "gitdir:${config.home.homeDirectory}/GIT/Personal/"; + contents = { + user = { + name = "Nicolai Van der Storm"; + email = "nicolai@nvds.be"; + signingkey = "CA53B34914EFD59B"; + }; + gpg.program = "gpg2"; + commit.gpgsign = true; + }; + } + + { + condition = "gitdir:${config.home.homeDirectory}/.dotfiles/"; + contents = { + user = { + name = "Nicolai Van der Storm"; + email = "nicolai@nvds.be"; + signingkey = "CA53B34914EFD59B"; + }; + gpg.program = "gpg2"; + commit.gpgsign = true; + }; + } + ]; + + }; + gpg = { + enable = true; + homedir = "${config.xdg.configHome}/gpg"; + publicKeys = [ + {source = "${config.xdg.configHome}/gpg/nicolaivds_pup.gpg";} + {source = "${config.xdg.configHome}/gpg/nicolaivds.gpg";} + ]; + }; + + ssh = { + enable = true; + matchBlocks = { + # Personal git server + "git.nvds.be" = { + hostname = "git.nvds.be"; + identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519_personal"; + }; + + # Github + "github.com" = { + hostname = "github.com"; + identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519_personal"; + }; + + # Gitlab + "gitlab.com" = { + hostname = "gitlab.com"; + identityFile = "${config.home.homeDirectory}/.ssh/id_ed25519_personal"; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/programs/mpd.nix b/nix/users/nicolaivds/programs/mpd.nix new file mode 100644 index 0000000..806d0fd --- /dev/null +++ b/nix/users/nicolaivds/programs/mpd.nix @@ -0,0 +1,23 @@ +{ config, pkgs, ... }: +{ + services = { + mpdris2.enable = true; + mpd = { + enable = true; + musicDirectory = "${config.home.homeDirectory}/Music/"; + network.startWhenNeeded = true; + extraConfig = '' + audio_output { + type "pipewire" + name "PipeWire Sound Server" + } + ''; + }; + }; + programs = { + ncmpcpp = { + enable = true; + package = pkgs.ncmpcpp.override { visualizerSupport = true; }; + }; + }; +} diff --git a/nix/users/nicolaivds/programs/sops.nix b/nix/users/nicolaivds/programs/sops.nix new file mode 100644 index 0000000..1110126 --- /dev/null +++ b/nix/users/nicolaivds/programs/sops.nix @@ -0,0 +1,20 @@ +{ inputs, lib, config, ... }: +{ + imports = [ + inputs.sops-nix.homeManagerModules.sops + # + ]; + + sops = { + age.keyFile = "${config.xdg.configHome}/sops/age/keys.txt"; + defaultSopsFile = ../secrets/secrets.yaml; + secrets = { + ssh_nicolaivds.path = "${config.home.homeDirectory}/.ssh/id_ed25519_personal"; + ssh_nicolaivds_pub.path = "${config.home.homeDirectory}/.ssh/id_ed25519_personal.pub"; + gpg_nicolaivds_pub.path = "${config.xdg.configHome}/gpg/nicolaivds_pup.gpg"; + gpg_nicolaivds.path = "${config.xdg.configHome}/gpg/nicolaivds.gpg"; + }; + }; + + systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ]; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/programs/vscodium.nix b/nix/users/nicolaivds/programs/vscodium.nix new file mode 100644 index 0000000..a0815d1 --- /dev/null +++ b/nix/users/nicolaivds/programs/vscodium.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + programs.vscode = { + enable = true; + package = pkgs.vscodium; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/programs/webcord.nix b/nix/users/nicolaivds/programs/webcord.nix new file mode 100644 index 0000000..c4e7c36 --- /dev/null +++ b/nix/users/nicolaivds/programs/webcord.nix @@ -0,0 +1,19 @@ +{ pkgs, lib, ... }: +let + catppuccin-mocha = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "discord"; + rev = "f5e294288267ed3eca46b43cfaea63a544230906"; + hash = "sha256-LlZaJ9FCQ3otEzbWT2Zv4QObc0EmxyHpQ+onuQP1p4Y="; + }; +in { + home.packages = with pkgs; [ + (webcord-vencord.override { webcord = webcord.override { electron_25 = electron_24;};}) + ]; + + xdg.configFile = { + "WebCord/Themes/Mocha" = { + source = "${catppuccin-mocha}/themes/mocha.theme.css"; + }; + }; +} diff --git a/nix/users/nicolaivds/secrets/secrets.yaml b/nix/users/nicolaivds/secrets/secrets.yaml new file mode 100644 index 0000000..44b4dd4 --- /dev/null +++ b/nix/users/nicolaivds/secrets/secrets.yaml @@ -0,0 +1,24 @@ +ssh_nicolaivds_pub: ENC[AES256_GCM,data:N6AXjdwuU1Ju1dEzW5EjxTB+s+EkFsdFKR2AnYXOuZL0g7l2B5iA2FxuksehjA36zYUD5uHqpZoxLis6tXV3vyFZmYyemZdIcJWsjQDcJB9dWPXSPCooIDjZ4+//3R3llpmULe+Kakj9uZJ8uGNlYxuRaEA=,iv:ArJYTSukbL/HIgfcqWq/M2mY9vSjdP98OFTwktJKyrc=,tag:uc/Vkj/l9UQiQNnLqyrscA==,type:str] +ssh_nicolaivds: ENC[AES256_GCM,data:uC0RoX4gd7IgfiUY3B4l+VmgKzw9iaHQB3a877jBmrNpVtJZpPQGCJ5vXy+FtjZJVGet2LFIWJmD4Mr112k8sRtWTiNLS5CzbEdFPYQ1EzTaYwjoB3LUabkMrvPHZdecPGyu/9QytJ2QFV8QLF+CElTsUSUwkaWNr+y7tFZhBBL0Q5ao37sXaUImfs7dZAR8J0Gd8rh3LrMNQ8OBuFTnE2D+sQpTZ2xNJ8EtCvAGQymQ02POwf//d1oKGGZw+F1WUluS7GkEVaSp5k9RdbB6ZNYLERwXeaGUUMrE8NFr+i6M0HJg3V/Te9PlZ5bj11uKIERr9hpUqozvm4TPTaTSry3hij1F1YXwz30wiF2PXc52b+At2z5DCJVIY8M7zsvv5rZWfuWx9cU/bze/VaBfHGQMtrBpaJXSxhPwVs7F5F7YZsZ9TjOjxdynMy/2nbPhajRp+fs0X6vIsRfQdMT73ibjQMuCtockqZPLPFiP51bsljS5JG+i4r/LQRBWbvTVVLBx+BE+1syXY/Eb7z++nntdpcq/urqJaY/+yb62i4KYvr9nTHpiQUcSJSHYL/ym,iv:n0zZ5AOBsy8mffOE6rSPt01ZT2Ve1YfWKyaoKu8fM3Y=,tag:3fqTCR/bYeV8vCH5NwFvfQ==,type:str] +gpg_nicolaivds_pub: ENC[AES256_GCM,data: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,iv:PB9SKDbc+QwR+scqnb4Ua+12i/lamA8GebORFJ540+A=,tag:vb+g/D3EChD0iaXEKtVXow==,type:str] +gpg_nicolaivds: ENC[AES256_GCM,data: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,iv:M074GB1qG8a33nWaeegth0MmKiVjHEoo9RlfvkzhQck=,tag:HNn0EA6/SCWSBEytNo2liw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age16xvq5a9js563tk9mqltxaz5wkjte9rkj2et4zwswrr96pkzq4susghwmmm + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJK3MydXVhaTZpN3d4Ukor + dEVrZlZRMmFGaGNDdFkrM2xEUWlVTDMvUkVJCkNSYllhdXp2QXFMRUwybDBZZDJr + WXh3UDdKeE1ld1dWTFE5M1Zpbi9odlEKLS0tIHJSK3dQTHphR3M3Z1hWck9LVXln + N2tPVEtHMHRiUjBTSXN0WXZGcFpENm8KEvuPmfhoHF2YnO9L7DeldPuQpj6nT17G + tEDJfmFxdc93kx2RTdJP6r4mrGOFw3OshODKlehxMUZjAM/CjGHlog== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2023-10-13T09:24:13Z" + mac: ENC[AES256_GCM,data:0CgkO4voBIlv5NkP1vEnaxN/Z87D4UlMj25DCUbkmzE1EKwu+I8fAM8IGKTIoEDTWxd/YyUhHPnLkln4xJDHWS6U4yQxMsWZCNA98cYgWF4ZfHojM9FpZ3yD9TOAT9vkfWOM+1jGn6yc+YMC5/HOMySNTpgm/Q9delXt6SpTYl8=,iv:U1ydwl6CGPMIJyL7T+K774H/eUT3aGLCvXJjdaITCmY=,tag:rhIvigxBOgIOdGIMNEuz6g==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.8.0 diff --git a/nix/users/nicolaivds/themes/default.nix b/nix/users/nicolaivds/themes/default.nix new file mode 100644 index 0000000..c9e2876 --- /dev/null +++ b/nix/users/nicolaivds/themes/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./gtk.nix + ./qt.nix + ]; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/themes/gtk.nix b/nix/users/nicolaivds/themes/gtk.nix new file mode 100644 index 0000000..dcbc014 --- /dev/null +++ b/nix/users/nicolaivds/themes/gtk.nix @@ -0,0 +1,37 @@ +{ + pkgs, + custom ? { + font = "RobotoMono Nerd Font"; + fontsize = "12"; + cursor = "Numix-Cursor"; + }, + ... +}: +{ + gtk = { + enable = true; + font.name = "${custom.font} ${custom.fontsize}"; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.catppuccin-papirus-folders; + }; + cursorTheme = { + name = "${custom.cursor}"; + package = pkgs.numix-cursor-theme; + }; + theme = { + name = "Catppuccin-Mocha-Standard-Blue-Dark"; + package = pkgs.catppuccin-gtk.override { variant="mocha"; }; + }; + gtk3.extraConfig = { + Settings = '' + gtk-application-prefer-dark-theme=1 + ''; + }; + gtk4.extraConfig = { + Settings = '' + gtk-application-prefer-dark-theme=1 + ''; + }; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/themes/qt.nix b/nix/users/nicolaivds/themes/qt.nix new file mode 100644 index 0000000..915f21c --- /dev/null +++ b/nix/users/nicolaivds/themes/qt.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + qt = { + enable = true; + platformTheme = "gtk"; + style.name = "gtk2"; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/default.nix b/nix/users/nicolaivds/wayland/default.nix new file mode 100644 index 0000000..395315b --- /dev/null +++ b/nix/users/nicolaivds/wayland/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + imports = [ + ./hyprland.nix + ./waybar.nix + ./wofi.nix + ./foot.nix + ./wlogout.nix + ]; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/foot.nix b/nix/users/nicolaivds/wayland/foot.nix new file mode 100644 index 0000000..54831c5 --- /dev/null +++ b/nix/users/nicolaivds/wayland/foot.nix @@ -0,0 +1,52 @@ +{ + custom ? { + font = "RobotoMono Nerd Font"; + fontsize = "12"; + primary_accent = "cba6f7"; + background = "11111B"; + opacity = ".85"; + }, + ... +}: +{ + programs.foot = { + enable = true; + server.enable = true; + settings = { + main = { + term = "xterm-256color"; + font = "${custom.font}:size=${custom.fontsize}"; + pad = "10x5 center"; + dpi-aware = "no"; + }; + cursor = { + color = "${custom.primary_accent} ${custom.primary_accent}"; + style = "beam"; + }; + colors = { + alpha="${custom.opacity}"; + background="${custom.palette.tertiary_background_hex}"; + # background="${custom.background}"; + regular0="11111B"; # black + regular1="ff5555"; # red + regular2="afffd7"; # green + regular3="f1fa8c"; # yellow + regular4="87afff"; # blue + regular5="bd93f9"; # magenta + regular6="8be9fd"; # cyan + regular7="f8f8f2"; # white + bright0="2d5b69"; # bright black + bright1="ff665c"; # bright red + bright2="84c747"; # bright green + bright3="ebc13d"; # bright yellow + bright4="58a3ff"; # bright blue + bright5="ff84cd"; # bright magenta + bright6="53d6c7"; # bright cyan + bright7="cad8d9"; # bright white + }; + tweak = { + sixel = "yes"; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/hyprland.nix b/nix/users/nicolaivds/wayland/hyprland.nix new file mode 100644 index 0000000..d333737 --- /dev/null +++ b/nix/users/nicolaivds/wayland/hyprland.nix @@ -0,0 +1,228 @@ +{ + config, + custom ? { + fontsize = "12"; + primary_accent = "cba6f7"; + secondary_accent = "89b4fa"; + tertiary_accent = "f5f5f5"; + background = "11111B"; + opacity = ".85"; + cursor = "Numix-Cursor"; + }, + inputs, + pkgs, + ... +}: +{ + wayland.windowManager.hyprland = { + enable = true; + package = inputs.hyprland.packages.${pkgs.system}.hyprland; + enableNvidiaPatches = true; + xwayland.enable = true; + systemd.enable = true; + settings = { + "$mainMod" = "SUPER"; + monitor = [ + "DP-2, 2560x1440@144, 0x0, 1" + ]; + exec-once = [ + "waybar" + "swww init" + ''swayidle -w timeout 1800 'swaylock -f -i ${config.home.homeDirectory}/photos/wallpapers/wallpaper.png' timeout 1805 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' before-sleep "swaylock -f -i ${config.home.homeDirectory}/photos/wallpapers/wallpaper.png"'' + "hyprctl setcursor ${custom.cursor} ${custom.fontsize}" + "wl-paste --type text --watch cliphist store &" + "wl-paste --type image --watch cliphist store &" + "swaync" + ]; + input = { + kb_layout = "be"; + follow_mouse = 1; + force_no_accel = 1; + numlock_by_default = true; + sensitivity = 0; + }; + general = { + gaps_in = 6; + gaps_out = 10; + border_size = 2; + # "col.active_border" = "rgb(${custom.primary_accent})"; + "col.active_border" = "rgba(${custom.palette.tertiary_background_hex}00)"; + "col.inactive_border" = "rgba(${custom.background}00)"; + #allow_tearing = true; + layout = "dwindle"; + }; + decoration = { + rounding = 10; + shadow_ignore_window = true; + drop_shadow = true; + shadow_range = 40; + shadow_render_power = 2; + # "col.shadow" = "rgb(${custom.primary_accent})"; + "col.shadow" = "rgb(${custom.background})"; + "col.shadow_inactive" = "rgba(${custom.background}00)"; + blur = { + enabled = false; + size = 6; + passes = 3; + new_optimizations = true; + ignore_opacity = true; + noise = 0.0117; + contrast = 1.2; + xray = false; + brightness = 1; + }; + }; + animations = { + enabled = true; + bezier = "overshot,0.13,0.99,0.29,1.1"; + animation = [ + "windows,1,6,overshot,slide" + "border,1,10,default" + "fade,1,10,default" + "workspaces,1,6,overshot,slide" + ]; + }; + dwindle = { + pseudotile = true; + preserve_split = true; + force_split = 2; + }; + master = { + new_is_master = true; + }; + gestures = { + workspace_swipe = false; + }; + misc = { + vfr = true; + vrr = 0; + disable_hyprland_logo = true; + disable_splash_rendering = true; + }; + bind = [ + # TODO: Look into using special workspace + # Exit to tty + "$mainMod SHIFT, X, exit " + + # Launch + "$mainMod, RETURN, exec, foot" + "$mainMod, D, exec, wofi" + ''$mainMod,P,exec,mkdir -p ${config.home.homeDirectory}/photos/screenshots; grim -t png -g "$(slurp)" ${config.home.homeDirectory}/photos/screenshots/$(date +%Y-%m-%d_%H-%m-%s).png'' + "$mainMod SHIFT,N,exec, swaync-client -t -sw" + "$mainMod,X,exec, wlogout -b 4" + "$mainMod,V,exec, cliphist list | wofi -dmenu | cliphist decode | wl-paste" + + # Window Options + "$mainMod SHIFT, P, pseudo" + "$mainMod, S, togglesplit" + "$mainMod, F, fullscreen" + "$mainMod, Space, togglefloating " + "$mainMod, Q, killactive" + + # Focus Windows + "$mainMod, H, movefocus, l" + "$mainMod, L, movefocus, r" + "$mainMod, K, movefocus, u" + "$mainMod, J, movefocus, d" + + # Move Windows + "$mainMod SHIFT,H,movewindow,l" + "$mainMod SHIFT,L,movewindow,r" + "$mainMod SHIFT,K,movewindow,u" + "$mainMod SHIFT,J,movewindow,d" + + # Switch workspaces + "$mainMod, AMPERSAND, workspace, 1" + "$mainMod, EACUTE, workspace, 2" + "$mainMod, QUOTEDBL, workspace, 3" + "$mainMod, APOSTROPHE, workspace, 4" + "$mainMod, PARENLEFT, workspace, 5" + "$mainMod, SECTION, workspace, 6" + "$mainMod, EGRAVE, workspace, 7" + "$mainMod, EXCLAM, workspace, 8" + "$mainMod, CCEDILLA, workspace, 9" + "$mainMod, AGRAVE, workspace, 10" + + # Switch active window to workspace + "$mainMod SHIFT, AMPERSAND, movetoworkspace, 1" + "$mainMod SHIFT, EACUTE, movetoworkspace, 2" + "$mainMod SHIFT, QUOTEDBL, movetoworkspace, 3" + "$mainMod SHIFT, APOSTROPHE, movetoworkspace, 4" + "$mainMod SHIFT, PARENLEFT, movetoworkspace, 5" + "$mainMod SHIFT, SECTION, movetoworkspace, 6" + "$mainMod SHIFT, EGRAVE, movetoworkspace, 7" + "$mainMod SHIFT, EXCLAM, movetoworkspace, 8" + "$mainMod SHIFT, CCEDILLA, movetoworkspace, 9" + "$mainMod SHIFT, AGRAVE, movetoworkspace, 10" + + # Scroll workspace with mouse scrollwheel + "$mainMod, mouse_down, workspace, e+1" + "$mainMod, mouse_up, workspace, e-1" + ]; + bindm = [ + # Move and resize windows with mouse too + "$mainMod, mouse:272, movewindow" + "$mainMod SHIFT, mouse:272, resizewindow" + ]; + bindle = [ + # Volume Keys + ",XF86AudioRaiseVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ +5% " + ",XF86AudioLowerVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ -5% " + ]; + windowrulev2 = [ + # "opacity ${custom.opacity} ${custom.opacity},class:^(thunar)$" + # "opacity ${custom.opacity} ${custom.opacity},class:^(WebCord)$" + # "opacity 0.90 0.90,class:^(Brave-browser)$" + # "opacity 0.90 0.90,class:^(brave-browser)$" + # "opacity 0.90 0.90,class:^(firefox)$" + "float,class:^(pavucontrol)$" + "float,class:^(file_progress)$" + "float,class:^(confirm)$" + "float,class:^(dialog)$" + "float,class:^(download)$" + "float,class:^(notification)$" + "float,class:^(error)$" + "float,class:^(confirmreset)$" + "float,title:^(Open File)$" + "float,title:^(branchdialog)$" + "float,title:^(Confirm to replace files)$" + "float,title:^(File Operation Progress)$" + "float,title:^(mpv)$" + "float, title:^(Picture-in-Picture)$" + # Ensure tearing for specific games + # "immediate, class:^(cs2)$" + # "immediate, class:^(love)$" + # "immediate, title:^(Freesync test)$" + ]; + layerrule = [ + "blur, waybar" + "blur, wofi" + "ignorezero, wofi" + ]; + }; + # Submaps + extraConfig = '' + # will switch to a submap called resize + bind=$mainMod,R,submap,resize + + # will start a submap called "resize" + submap=resize + + # sets repeatable binds for resizing the active window + binde=,L,resizeactive,15 0 + binde=,H,resizeactive,-15 0 + binde=,K,resizeactive,0 -15 + binde=,J,resizeactive,0 15 + + # use reset to go back to the global submap + bind=,escape,submap,reset + bind=$mainMod,R,submap,reset + + # will reset the submap, meaning end the current one and return to the global one + submap=reset + + # For tearing + env = WLR_DRM_NO_ATOMIC,1 + ''; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/waybar.nix b/nix/users/nicolaivds/wayland/waybar.nix new file mode 100644 index 0000000..298de94 --- /dev/null +++ b/nix/users/nicolaivds/wayland/waybar.nix @@ -0,0 +1,323 @@ +{ + config, + custom ? { + font = "RobotoMono Nerd Font"; + fontsize = "12"; + primary_accent = "cba6f7"; + secondary_accent = "89b4fa"; + tertiary_accent = "f5f5f5"; + background = "11111B"; + opacity = ".85"; + cursor = "Numix-Cursor"; + }, + ... +}: +{ + programs.waybar = { + enable = true; + settings.mainBar = { + position= "top"; + layer= "top"; + height= 35; + margin-top= 0; + margin-bottom= 0; + margin-left= 0; + margin-right= 0; + modules-left= [ + "custom/launcher" + "custom/playerctl#backward" + "custom/playerctl#play" + "custom/playerctl#foward" + "custom/playerlabel" + ]; + modules-center= [ + "cava#left" + "hyprland/workspaces" + "cava#right" + ]; + modules-right= [ + "tray" + "pulseaudio" + "network" + "clock" + ]; + clock= { + format = " {:%a, %d %b, %I:%M %p}"; + tooltip= "true"; + tooltip-format= "{:%Y %B}\n{calendar}"; + format-alt= " {:%d/%m}"; + }; + "wlr/workspaces"= { + active-only= false; + all-outputs= false; + disable-scroll= false; + on-scroll-up= "hyprctl dispatch workspace e-1"; + on-scroll-down= "hyprctl dispatch workspace e+1"; + format = "{name}"; + on-click= "activate"; + format-icons= { + urgent= ""; + active= ""; + default = ""; + sort-by-number= true; + }; + }; + "cava#left" = { + framerate = 60; + autosens = 1; + bars = 18; + lower_cutoff_freq = 50; + higher_cutoff_freq = 10000; + method = "pipewire"; + source = "auto"; + stereo = true; + reverse = false; + bar_delimiter = 0; + monstercat = false; + waves = false; + input_delay = 2; + format-icons = [ + "" + "" + "" + "" + "" + "" + "" + "" + ]; + }; + "cava#right" = { + framerate = 60; + autosens = 1; + bars = 18; + lower_cutoff_freq = 50; + higher_cutoff_freq = 10000; + method = "pipewire"; + source = "auto"; + stereo = true; + reverse = false; + bar_delimiter = 0; + monstercat = false; + waves = false; + input_delay = 2; + format-icons = [ + "" + "" + "" + "" + "" + "" + "" + "" + ]; + }; + "custom/playerctl#backward"= { + format= "󰙣 "; + on-click= "playerctl previous"; + on-scroll-up = "playerctl volume .05+"; + on-scroll-down = "playerctl volume .05-"; + }; + "custom/playerctl#play"= { + format= "{icon}"; + return-type= "json"; + exec= "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F"; + on-click= "playerctl play-pause"; + on-scroll-up = "playerctl volume .05+"; + on-scroll-down = "playerctl volume .05-"; + format-icons= { + Playing = "󰏥 "; + Paused = ""; + Stopped = ""; + }; + }; + "custom/playerctl#foward"= { + format= "󰙡 "; + on-click= "playerctl next"; + on-scroll-up = "playerctl volume .05+"; + on-scroll-down = "playerctl volume .05-"; + }; + "custom/playerlabel"= { + format= "󰎈 {} 󰎈"; + return-type= "json"; + max-length= 40; + exec = "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F"; + on-click= ""; + }; + + memory= { + format= "󰍛 {}%"; + format-alt= "󰍛 {used}/{total} GiB"; + interval= 5; + }; + cpu= { + format= "󰻠 {usage}%"; + format-alt= "󰻠 {avg_frequency} GHz"; + interval= 5; + }; + network = { + format-wifi = " {signalStrength}%"; + format-ethernet = "󰈀 100% "; + tooltip-format = "Connected to {essid} {ifname} via {gwaddr}"; + format-linked = "{ifname} (No IP)"; + format-disconnected = "󰖪 0% "; + }; + tray= { + icon-size= 20; + spacing= 8; + }; + pulseaudio= { + format= "{icon} {volume}%"; + format-muted= "󰝟"; + format-icons= { + default= ["󰕿" "󰖀" "󰕾"]; + }; + # on-scroll-up= "bash ${config.home.homeDirectory}/.scripts/volume up"; + # on-scroll-down= "bash ${config.home.homeDirectory}/.scripts/volume down"; + scroll-step= 5; + on-click= "pavucontrol"; + }; + "custom/randwall"= { + format= "󰏘"; + # on-click= "bash $HOME/.config/hypr/randwall.sh"; + # on-click-right= "bash $HOME/.config/hypr/wall.sh"; + }; + "custom/launcher"= { + format= ""; + # on-click= "bash $HOME/.config/rofi/launcher.sh"; + # on-click-right= "bash $HOME/.config/rofi/run.sh"; + tooltip= "false"; + }; + }; + style = '' + * { + border: none; + border-radius: 0px; + font-family: ${custom.font}; + font-size: 14px; + min-height: 0; + } + + window#waybar { + background: ${custom.palette.primary_background_rgba}; + } + + #cava.left, #cava.right { + background: #${custom.palette.tertiary_background_hex}; + margin: 5px; + padding: 8px 16px; + color: #${custom.primary_accent}; + } + #cava.left { + border-radius: 24px 10px 24px 10px; + } + #cava.right { + border-radius: 10px 24px 10px 24px; + } + #workspaces { + background: #${custom.palette.tertiary_background_hex}; + margin: 5px 5px; + padding: 8px 5px; + border-radius: 16px; + color: #${custom.primary_accent} + } + #workspaces button { + padding: 0px 5px; + margin: 0px 3px; + border-radius: 16px; + color: transparent; + background: ${custom.palette.primary_background_rgba}; + transition: all 0.3s ease-in-out; + } + + #workspaces button.active { + background-color: #${custom.secondary_accent}; + color: #${custom.background}; + border-radius: 16px; + min-width: 50px; + background-size: 400% 400%; + transition: all 0.3s ease-in-out; + } + + #workspaces button:hover { + background-color: #${custom.tertiary_accent}; + color: #${custom.background}; + border-radius: 16px; + min-width: 50px; + background-size: 400% 400%; + } + + #tray, #pulseaudio, #network, #battery, + #custom-playerctl.backward, #custom-playerctl.play, #custom-playerctl.foward{ + background: #${custom.palette.tertiary_background_hex}; + font-weight: bold; + margin: 5px 0px; + } + #tray, #pulseaudio, #network, #battery{ + color: #${custom.tertiary_accent}; + border-radius: 10px 24px 10px 24px; + padding: 0 20px; + margin-left: 7px; + } + #clock { + color: #${custom.tertiary_accent}; + background: #${custom.palette.tertiary_background_hex}; + border-radius: 0px 0px 0px 40px; + padding: 10px 10px 15px 25px; + margin-left: 7px; + font-weight: bold; + font-size: 16px; + } + #custom-launcher { + color: #${custom.secondary_accent}; + background: #${custom.palette.tertiary_background_hex}; + border-radius: 0px 0px 40px 0px; + margin: 0px; + padding: 0px 35px 0px 15px; + font-size: 28px; + } + + #custom-playerctl.backward, #custom-playerctl.play, #custom-playerctl.foward { + background: #${custom.palette.tertiary_background_hex}; + font-size: 22px; + } + #custom-playerctl.backward:hover, #custom-playerctl.play:hover, #custom-playerctl.foward:hover{ + color: #${custom.tertiary_accent}; + } + #custom-playerctl.backward { + color: #${custom.primary_accent}; + border-radius: 24px 0px 0px 10px; + padding-left: 16px; + margin-left: 7px; + } + #custom-playerctl.play { + color: #${custom.secondary_accent}; + padding: 0 5px; + } + #custom-playerctl.foward { + color: #${custom.primary_accent}; + border-radius: 0px 10px 24px 0px; + padding-right: 12px; + margin-right: 7px + } + #custom-playerlabel { + background: #${custom.palette.tertiary_background_hex}; + color: #${custom.tertiary_accent}; + padding: 0 20px; + border-radius: 24px 10px 24px 10px; + margin: 5px 0; + font-weight: bold; + } + #window{ + background: #${custom.palette.tertiary_background_hex}; + padding-left: 15px; + padding-right: 15px; + border-radius: 16px; + margin-top: 5px; + margin-bottom: 5px; + font-weight: normal; + font-style: normal; + } + ''; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/wlogout.nix b/nix/users/nicolaivds/wayland/wlogout.nix new file mode 100644 index 0000000..0f6da51 --- /dev/null +++ b/nix/users/nicolaivds/wayland/wlogout.nix @@ -0,0 +1,33 @@ +{ config, ... }: +{ + programs.wlogout = { + enable = true; + layout = [ + { + label = "lock"; + # action = "waylock -f -i ${config.home.homeDirectory}/photos/wallpapers/wallpaper.png"; + action = "swaylock"; + text = "lock"; + keybind = "l"; + } + { + label = "shutdown"; + action = "systemctl poweroff"; + text = "Shutdown"; + keybind = "s"; + } + { + label = "reboot"; + action = "systemctl reboot"; + text = "Reboot"; + keybind = "r"; + } + { + label = "logout"; + action = "loginctl terminate-user $USER"; + text = "Log out"; + keybind = "e"; + } + ]; + }; +} \ No newline at end of file diff --git a/nix/users/nicolaivds/wayland/wofi.nix b/nix/users/nicolaivds/wayland/wofi.nix new file mode 100644 index 0000000..185cd9a --- /dev/null +++ b/nix/users/nicolaivds/wayland/wofi.nix @@ -0,0 +1,55 @@ +{ + custom ? { + font = "RobotoMono Nerd Font"; + primary_accent = "cba6f7"; + secondary_accent = "89b4fa"; + tertiary_accent = "f5f5f5"; + background = "11111B"; + opacity = "1"; + }, + ... +}: +{ + programs.wofi = { + enable = true; + settings = { + allow_images = true; + width = "25%"; + hide_scroll = true; + term = "foot"; + show = "drun"; + }; + style ='' + * { + font-family: ${custom.font},monospace; + font-weight: bold; + } + #window { + border-radius: 40px; + background: ${custom.palette.primary_background_rgba} + } + #input { + border-radius: 100px; + margin: 20px; + padding: 15px 25px; + background: ${custom.palette.tertiary_background_rgba}; + color: #${custom.tertiary_accent}; + } + #outer-box { + font-weight: bold; + font-size: 14px; + } + #entry { + margin: 10px 80px; + padding: 20px 20px; + border-radius: 200px; + } + #entry:selected{ + background-color:#${custom.primary_accent}; + color: #${custom.background}; + } + #entry:hover { + } + ''; + }; +} \ No newline at end of file diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..a134fcc --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,11 @@ +--- Plugin Manager --- +require(".lazy") + +--- Colorschemes --- +vim.cmd("runtime! lua/plugins/colorschemes/*.lua") + +--- All Core Files --- +vim.cmd("runtime! lua/core/*.lua") + +--- All Other Plugins --- +vim.cmd("runtime! lua/plugins/*.lua") \ No newline at end of file diff --git a/nvim/lua/core/colors.lua b/nvim/lua/core/colors.lua new file mode 100644 index 0000000..220f4f8 --- /dev/null +++ b/nvim/lua/core/colors.lua @@ -0,0 +1,18 @@ +local status, color = pcall(vim.cmd.colorscheme, "catppuccin") +if not status then + print(color, 'using murphy instead') + vim.cmd.colorscheme("murphy") +end + +vim.opt.fillchars:append { eob = " " } -- Gets rid of tilde after line numbers +vim.cmd.set("noshowmode") -- Hide mode mode at bottom +vim.cmd.set("noruler") + +---------- These are now handled by the transparent nvim plugin -------- +-- vim.api.nvim_set_hl(0, "Normal", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "NonText", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "NormalFloat", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "LineNr", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "SignColumn", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "VertSplit", {bg = "none"}) +-- vim.api.nvim_set_hl(0, "TabLine", {bg = "none"}) \ No newline at end of file diff --git a/nvim/lua/core/functions.lua b/nvim/lua/core/functions.lua new file mode 100644 index 0000000..32d1d74 --- /dev/null +++ b/nvim/lua/core/functions.lua @@ -0,0 +1,112 @@ +function edit_nvim() + vim.cmd(":e $MYVIMRC") + vim.cmd(":cd ~/.config/nvim") + vim.cmd(":NvimTreeOpen") +end + +function randomquote() + local quote = { + "Bing Chilling", + "The Stink Boys", + "Whopper Whopper Whopper Whopper Junior Double Triple Whopper", + "White Monster", + "The system plays us everday...", + "sudo systemctl restart justinlime", + "sudo systemctl start justinlime", + "sudo systemctl stop justinlime", + "sudo systemctl enable justinlime", + "sudo systemctl disable justinlime", + } + return quote[math.random(1,#quote)] +end + +function randomsplash() + local splash = { + { + [[ ⠀ ]], + [[ ⠀⠀ ⣞⢽⢪⢣⢣⢣⢫⡺⡵⣝⡮⣗⢷⢽⢽⢽⣮⡷⡽⣜⣜⢮⢺⣜⢷⢽⢝⡽⣝ ]], + [[ ⠀ ⠸⡸⠜⠕⠕⠁⢁⢇⢏⢽⢺⣪⡳⡝⣎⣏⢯⢞⡿⣟⣷⣳⢯⡷⣽⢽⢯⣳⣫⠇ ]], + [[ ⠀⠀ ⠀⢀⢀⢄⢬⢪⡪⡎⣆⡈⠚⠜⠕⠇⠗⠝⢕⢯⢫⣞⣯⣿⣻⡽⣏⢗⣗⠏ ⠀]], + [[ ⠀ ⠀ ⠪⡪⡪⣪⢪⢺⢸⢢⢓⢆⢤⢀⠀⠀⠀⠀⠈⢊⢞⡾⣿⡯⣏⢮⠷⠁⠀ ⠀ ]], + [[ ⠀ ⠀ ⠀⠀⠈⠊⠆⡃⠕⢕⢇⢇⢇⢇⢇⢏⢎⢎⢆⢄⠀⢑⣽⣿⢝⠲⠉⠀⠀⠀ ⠀]], + [[ ⠀ ⠀⠀⠀ ⠀⠀⡿⠂⠠⠀⡇⢇⠕⢈⣀⠀⠁⠡⠣⡣⡫⣂⣿⠯⢪⠰⠂⠀⠀⠀⠀ ]], + [[ ⠀⠀ ⠀⠀⠀⡦⡙⡂⢀⢤⢣⠣⡈⣾⡃⠠⠄⠀⡄⢱⣌⣶⢏⢊⠂⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ ⠀ ⠀⠀⠀⢝⡲⣜⡮⡏⢎⢌⢂⠙⠢⠐⢀⢘⢵⣽⣿⡿⠁⠁⠀⠀⠀⠀⠀⠀ ⠀]], + [[ ⠀ ⠀ ⠀⠀⠀⠨⣺⡺⡕⡕⡱⡑⡆⡕⡅⡕⡜⡼⢽⡻⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ ⠀ ⠀⠀⠀⣼⣳⣫⣾⣵⣗⡵⡱⡡⢣⢑⢕⢜⢕⡝⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ ⠀ ⠀⠀⣴⣿⣾⣿⣿⣿⡿⡽⡑⢌⠪⡢⡣⣣⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ ⠀ ⠀⠀⡟⡾⣿⢿⢿⢵⣽⣾⣼⣘⢸⢸⣞⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ ⠀ ⠀⠀⠀⠁⠇⠡⠩⡫⢿⣝⡻⡮⣒⢽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ]], + [[ ⠀ _ _ _ ___ ]], + [[ ⠀ | \ | | (_) |__ \ ]], + [[ ⠀ | \| | ___ ___ __ __ _ _ __ ___ ) | ]], + [[ ⠀ | . ` | / _ \ / _ \\ \ / /| || '_ ` _ \ / / ]], + [[ ⠀ | |\ || __/| (_) |\ V / | || | | | | ||_| ]], + [[ ⠀ |_| \_| \___| \___/ \_/ |_||_| |_| |_|(_) ]], + [[ ⠀ ]], + [[______________________________________________________]], + [[ ⠀ ]], + [[ ⠀ ]], + }, + { + [[ ⠀ ]], + [[⠀⠀⠀⠀⠀⡰⢂⣾⠿⠛⠒⠚⠛⠃⠺⢶⡀⠀⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⢠⡣⠋⠁⠀⠀⠀⠀⠀⢀⡐⠒⢙⣄⠀⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⠀⡘⠀⠀⠀⠀⠀⠀⢄⠉⠀⠐⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀]], + [[⠀⠀⠀⣾⠁⠀⠀⠄⠂⢈⣠⠎⠀⠀⣸⣿⡿⠓⢬⡇⠀⠀⠀⠀⠀]], + [[⠀⠀⢸⡟⠀⠔⣁⣤⣶⣿⠋⢰⠀⠀⣿⡟⠻⣦⠀⢳⠀⠀⠀⠀⠀]], + [[⠀⠀⣷⡇⢠⣾⢟⢭⣭⡭⡄⠀⡆⠀⣿⣷⣶⠺⡆⢸⡄⠀⠀⠀⠀]], + [[⠀⠀⠇⡇⠛⠡⣑⣈⣛⠝⢁⡀⠇⠀⣿⡿⠛⠒⣡⠇⣧⣀⠀⠀⠀]], + [[⠀⠀⢠⠁⠈⠐⠤⠄⠀⣠⢸⠈⠢⠀⣿⡇⠀⠀⠠⠚⣿⣿⠀⠀⠀]], + [[⡄⠀⢾⠀⡆⠠⣴⠞⠯⡀⠈⠙⠲⣶⣿⡇⠑⣦⡄⠀⣿⣿⠀⠀⠀]], + [[⠈⠺⡮⠀⢡⠀⠀⠀⠀⠀⠁⠐⠒⠒⠛⠃⠈⠛⠇⠀⡏⡏⠀⠀⠀]], + [[⠀⢰⠁⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡄⠀⢷⠀⠀⠀]], + [[⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠃⠀⢸⠀⠀⠀]], + [[⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡄⠀⠀]], + [[⠀⠀⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠸⡳⡀⠀]], + [[⠀⠀⠀⠑⢄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣯⣼⡇⠑⣄]], + [[ ]], + [[ ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ]], + [[ ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ]], + [[ ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ]], + [[ ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ]], + [[ ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ]], + [[ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ]], + [[ ⠀ ]], + [[______________________________________________________]], + [[ ⠀ ]], + [[ ⠀ ]], + }, + { + [[ ]], + [[⣿⣿⣿⣿⡏⣀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿]], + [[⣿⣿⣿⢏⣴⣿⣷⠀⠀⠀⠀⠀⢾⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿]], + [[⣿⣿⣟⣾⣿⡟⠁⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣷⢢⠀⠀⠀⠀⠀⠀⠀⢸⣿]], + [[⣿⣿⣿⣿⣟⠀⡴⠄⠀⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⣿]], + [[⣿⣿⣿⠟⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠶⢴⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⣿]], + [[⣿⣁⡀⠀⠀⢰⢠⣦⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⡄⠀⣴⣶⣿⡄⣿]], + [[⣿⡋⠀⠀⠀⠎⢸⣿⡆⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⠗⢘⣿⣟⠛⠿⣼]], + [[⣿⣿⠋⢀⡌⢰⣿⡿⢿⡀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⡇⠀⢸⣿⣿⣧⢀⣼]], + [[⣿⣿⣷⢻⠄⠘⠛⠋⠛⠃⠀⠀⠀⠀⠀⢿⣧⠈⠉⠙⠛⠋⠀⠀⠀⣿⣿⣿⣿⣿]], + [[⣿⣿⣧⠀⠈⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⠀⠀⠀⢀⢃⠀⠀⢸⣿⣿⣿⣿]], + [[⣿⣿⡿⠀⠴⢗⣠⣤⣴⡶⠶⠖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡸⠀⣿⣿⣿⣿]], + [[⣿⣿⣿⡀⢠⣾⣿⠏⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠉⠀⣿⣿⣿⣿]], + [[⣿⣿⣿⣧⠈⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿]], + [[⣿⣿⣿⣿⡄⠈⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿]], + [[⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿]], + [[⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]], + [[⣿⣿⣿⣿⣿⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]], + [[ __ ]], + [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], + [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], + [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], + [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], + [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]], + [[ ]], + [[______________________________________________________]], + [[ ]], + [[ ]], + }, + } + return splash[math.random(1,#splash)] +end diff --git a/nvim/lua/core/keymaps.lua b/nvim/lua/core/keymaps.lua new file mode 100644 index 0000000..df27505 --- /dev/null +++ b/nvim/lua/core/keymaps.lua @@ -0,0 +1,93 @@ +local opts = { noremap = true, silent = true } +local map = vim.keymap.set + +--Leader Key +map("", "", "", opts) +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +---------- Normal Mode ---------- + +--Window Resize +map("n", "", ":vertical resize +2", opts) +map("n", "", ":resize +2", opts) +map("n", "", ":resize -2", opts) +map("n", "", ":vertical resize -2", opts) + +---------- Insert Mode ---------- + +--jj gang rise up +map("i", "jj", "", opts) + +---------- Visual Mode ----------- + +--Move Selections +map("v", "", "< gv", opts) +map("v", "", ":m '>+1gv=gv", opts) +map("v", "", ":m '<-2gv=gv", opts) +map("v", "", "> gv", opts) + +---------- Terminal Mode ---------- + +--Escape Terminal +map('t', 'jj', [[]], opts) +map('t', '', [[]], opts) +map('t', '', [[]], opts) + +--------- Custom Functions ---------- + +--Edit Nvim +map("n", "en", ":lua edit_nvim()", opts) + +---------- Plugins ---------------- + +--Fugative +map("n", "ga", ":G add", opts) +map("n", "gs", ":G status", opts) +map("n", "gb", ":G branch", opts) +map("n", "gm", ":G merge", opts) +map("n", "gpl", ":G pull", opts) +map("n", "gplo", ":G pull origin", opts) +map("n", "gps", ":G push", opts) +map("n", "gpso", ":G push origin", opts) +map("n", "gc", ":G commit", opts) +map("n", "gcm", ":G commit -m", opts) +map("n", "gch", ":G checkout", opts) +map("n", "gchb", ":G checkout -b", opts) +map("n", "gcoe", ":G config user.email", opts) +map("n", "gcon", ":G config user.name", opts) + +--Nvim Tree +map("n", "dt", ":NvimTreeToggle", opts) + +--Transparency +map("n", "tt", ":TransparentToggle", opts) + +--Telescope +map('n', 'ff', ":Telescope find_files", opts) +map('n', 'fw', ":Telescope live_grep", opts) +map('n', 'fgc', ":Telescope git_commits", opts) +map('n', 'fgs', ":Telescope git_stash", opts) +map('n', 'fgb', ":Telescope git_branches", opts) +map('n', 'fv', ":Telescope treesitter", opts) +map('n', 'fs', ":Telescope spell_suggest", opts) +map('n', 'fc', ":Telescope colorscheme", opts) + +--BufferLine +map("n", "1", ":BufferLineGoToBuffer 1", opts) +map("n", "2", ":BufferLineGoToBuffer 2", opts) +map("n", "3", ":BufferLineGoToBuffer 3", opts) +map("n", "4", ":BufferLineGoToBuffer 4", opts) +map("n", "5", ":BufferLineGoToBuffer 5", opts) +map("n", "6", ":BufferLineGoToBuffer 6", opts) +map("n", "7", ":BufferLineGoToBuffer 7", opts) +map("n", "8", ":BufferLineGoToBuffer 8", opts) +map("n", "9", ":BufferLineGoToBuffer 9", opts) + +map("n", "h", ":BufferLineCyclePrev", opts) +map("n", "l", ":BufferLineCycleNext", opts) + +map("n", "", ":BufferLineMovePrev", opts) +map("n", "", ":BufferLineMoveNext", opts) + +map("n", "qq", ":bdelete", opts) -- Close current buffer diff --git a/nvim/lua/core/options.lua b/nvim/lua/core/options.lua new file mode 100644 index 0000000..6ccfa2f --- /dev/null +++ b/nvim/lua/core/options.lua @@ -0,0 +1,33 @@ +local opt = vim.opt +opt.clipboard = "unnamedplus" +opt.guicursor = "a:blinkon0" --Disable cursor blink +opt.guicursor = "i:ver25-iCursor" --Change to beam cursor when in insert mode +opt.mouse = "a" +opt.smartcase = true +opt.smartindent = true +opt.number = true +opt.relativenumber = true +opt.cursorline = false +opt.cursorlineopt='number' +opt.wrap = false +opt.shiftwidth = 4 +opt.softtabstop = 4 +opt.tabstop = 4 +opt.backupdir = vim.fn.expand("~/.local/share/nvim/data/backup") +opt.undodir = vim.fn.expand("~/.local/share/nvim/data/undo") +opt.directory = vim.fn.expand("~/.local/share/nvim/data/swap") +opt.ignorecase = true +opt.splitbelow = true +opt.splitright = true +opt.swapfile = false +opt.undofile = true +opt.backup = false +opt.expandtab = true +opt.termguicolors = true +opt.scrolloff = 8 +opt.updatetime = 50 +opt.cursorline = true +vim.api.nvim_create_autocmd("FileType", { --Set indentation to 2 spaces for nix files + pattern = "nix", + command = "setlocal shiftwidth=2 tabstop=2" +}) diff --git a/nvim/lua/lazy.lua b/nvim/lua/lazy.lua new file mode 100644 index 0000000..8728956 --- /dev/null +++ b/nvim/lua/lazy.lua @@ -0,0 +1,83 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + print([[ +Installing lazy.nvim and plugins..... +⠀⣞⢽⢪⢣⢣⢣⢫⡺⡵⣝⡮⣗⢷⢽⢽⢽⣮⡷⡽⣜⣜⢮⢺⣜⢷⢽⢝⡽⣝ +⠸⡸⠜⠕⠕⠁⢁⢇⢏⢽⢺⣪⡳⡝⣎⣏⢯⢞⡿⣟⣷⣳⢯⡷⣽⢽⢯⣳⣫⠇ +⠀⠀⢀⢀⢄⢬⢪⡪⡎⣆⡈⠚⠜⠕⠇⠗⠝⢕⢯⢫⣞⣯⣿⣻⡽⣏⢗⣗⠏⠀ +⠀⠪⡪⡪⣪⢪⢺⢸⢢⢓⢆⢤⢀⠀⠀⠀⠀⠈⢊⢞⡾⣿⡯⣏⢮⠷⠁⠀⠀ +⠀⠀⠀⠈⠊⠆⡃⠕⢕⢇⢇⢇⢇⢇⢏⢎⢎⢆⢄⠀⢑⣽⣿⢝⠲⠉⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⡿⠂⠠⠀⡇⢇⠕⢈⣀⠀⠁⠡⠣⡣⡫⣂⣿⠯⢪⠰⠂⠀⠀⠀⠀ +⠀⠀⠀⠀⡦⡙⡂⢀⢤⢣⠣⡈⣾⡃⠠⠄⠀⡄⢱⣌⣶⢏⢊⠂⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⢝⡲⣜⡮⡏⢎⢌⢂⠙⠢⠐⢀⢘⢵⣽⣿⡿⠁⠁⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠨⣺⡺⡕⡕⡱⡑⡆⡕⡅⡕⡜⡼⢽⡻⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⣼⣳⣫⣾⣵⣗⡵⡱⡡⢣⢑⢕⢜⢕⡝⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⣴⣿⣾⣿⣿⣿⡿⡽⡑⢌⠪⡢⡣⣣⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⡟⡾⣿⢿⢿⢵⣽⣾⣼⣘⢸⢸⣞⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠁⠇⠡⠩⡫⢿⣝⡻⡮⣒⢽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ]]) + }) +end +vim.opt.rtp:prepend(lazypath) + +local plugins = { + --- Lazy --- + "folke/lazy.nvim", --Lazy will manage itself + + --- Colorschemes --- + { "catppuccin/nvim", name = "catppuccin", lazy = false, priority = 1000 }, + { 'rose-pine/neovim', name = 'rose-pine', lazy = false, priority = 1000 }, + { "olimorris/onedarkpro.nvim", lazy = false, priority = 1000 }, + { "Mofiqul/dracula.nvim", lazy = false, priority = 1000 }, + { 'folke/tokyonight.nvim', lazy = false, priority = 1000 }, + { "ellisonleao/gruvbox.nvim", lazy = false, priority = 1000 }, + + --- LSP--- + -- "jose-elias-alvarez/null-ls.nvim", + -- "neovim/nvim-lspconfig", --LSP + + -- -- CMP + -- "hrsh7th/nvim-cmp", --Completion + -- "hrsh7th/cmp-nvim-lsp", --Completion LSP integration + -- "hrsh7th/cmp-path", --Completion show system paths + -- "hrsh7th/cmp-buffer", --Completion shows text from current buffer + -- "hrsh7th/cmp-cmdline", + -- "hrsh7th/cmp-nvim-lua", + -- "saadparwaiz1/cmp_luasnip", --Completion snippets + -- { "L3MON4D3/LuaSnip", dependencies = { "rafamadriz/friendly-snippets" } }, --Extra snippets + + + -- --- The Rest ---- + -- "lukas-reineke/indent-blankline.nvim", --Sexy indent lines + -- "windwp/nvim-ts-autotag", --Auto tags for HTML + -- "norcalli/nvim-colorizer.lua", --Visualize Hex/RGB/etc + -- "lewis6991/gitsigns.nvim", --Shows deletions/additions/modifications if in git repo + -- "tpope/vim-fugitive", --Git command integration + -- "xiyaowong/transparent.nvim", --Transparency Toggle + -- "andweeb/presence.nvim", --Discord Rich Presence + -- "numToStr/Comment.nvim", --Easy full line or selection commenting out + -- { "folke/which-key.nvim", event = "VeryLazy" }, --Shows key combinations if youre dumb + -- { 'windwp/nvim-autopairs', event = "InsertEnter" }, --Automatic pairs for braces, brackets, quotes, etc. + -- { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" }, --Parser for better highlighting, use :TSUpdate + -- { 'akinsho/toggleterm.nvim', version = "*", config = true }, --Quick toggle terminal in neovim + -- { "nvim-tree/nvim-tree.lua", dependencies = { "nvim-tree/nvim-web-devicons" } }, --File Browser, Devicons need a hack nerd font + -- { "akinsho/bufferline.nvim", dependencies = { "nvim-tree/nvim-web-devicons" } }, --Tabs + -- { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" } }, --Sexy bar at the bottom + -- { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, --Plenary needs g++ and gcc + -- { + -- 'glepnir/dashboard-nvim', + -- event = 'VimEnter', + -- dependencies = { + -- 'nvim-tree/nvim-web-devicons' } + -- }, --Dope ass dashboard +} + +local opts = {} +require("lazy").setup(plugins, opts) \ No newline at end of file diff --git a/nvim/lua/plugins/colorschemes/catppuccin.lua b/nvim/lua/plugins/colorschemes/catppuccin.lua new file mode 100644 index 0000000..d7210ec --- /dev/null +++ b/nvim/lua/plugins/colorschemes/catppuccin.lua @@ -0,0 +1,49 @@ +local status, plugin = pcall(require,'catppuccin') +if not status then + print('Plugin Error: ', plugin) + return +end + +plugin.setup({ + flavour = "mocha", -- latte, frappe, macchiato, mocha + background = { -- :h background + light = "latte", + dark = "mocha", + }, + transparent_background = false, + show_end_of_buffer = false, -- show the '~' characters after the end of buffers + term_colors = false, + dim_inactive = { + enabled = false, + shade = "dark", + percentage = 0.15, + }, + no_italic = false, -- Force no italic + no_bold = false, -- Force no bold + no_underline = false, -- Force no underline + styles = { + comments = { "italic" }, + conditionals = { "italic" }, + loops = {}, + functions = {}, + keywords = {}, + strings = {}, + variables = {}, + numbers = {}, + booleans = {}, + properties = {}, + types = {}, + operators = {}, + }, + color_overrides = {}, + custom_highlights = {}, + integrations = { + cmp = true, + gitsigns = true, + nvimtree = true, + telescope = true, + notify = false, + mini = false, + -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) + }, +}) diff --git a/nvim/lua/plugins/colorschemes/dracula.lua b/nvim/lua/plugins/colorschemes/dracula.lua new file mode 100644 index 0000000..66c83ed --- /dev/null +++ b/nvim/lua/plugins/colorschemes/dracula.lua @@ -0,0 +1,48 @@ +local status, plugin = pcall(require,'dracula') +if not status then + print('Plugin Error: ', plugin) + return +end +plugin.setup({ + -- customize dracula color palette + colors = { + bg = "#282A36", + fg = "#F8F8F2", + selection = "#44475A", + comment = "#6272A4", + red = "#FF5555", + orange = "#FFB86C", + yellow = "#F1FA8C", + green = "#50fa7b", + purple = "#BD93F9", + cyan = "#8BE9FD", + pink = "#FF79C6", + bright_red = "#FF6E6E", + bright_green = "#69FF94", + bright_yellow = "#FFFFA5", + bright_blue = "#D6ACFF", + bright_magenta = "#FF92DF", + bright_cyan = "#A4FFFF", + bright_white = "#FFFFFF", + menu = "#21222C", + visual = "#3E4452", + gutter_fg = "#4B5263", + nontext = "#3B4048", + }, + -- show the '~' characters after the end of buffers + show_end_of_buffer = true, -- default false + -- use transparent background + transparent_bg = false, -- default false + -- set custom lualine background color + lualine_bg_color = "#44475a", -- default nil + -- set italic comment + italic_comment = true, -- default false + -- overrides the default highlights see `:h synIDattr` + overrides = { + -- Examples + -- NonText = { fg = dracula.colors().white }, -- set NonText fg to white + -- NvimTreeIndentMarker = { link = "NonText" }, -- link to NonText highlight + -- Nothing = {} -- clear highlight of Nothing + }, +}) + diff --git a/nvim/lua/plugins/colorschemes/gruvbox.lua b/nvim/lua/plugins/colorschemes/gruvbox.lua new file mode 100644 index 0000000..f45825a --- /dev/null +++ b/nvim/lua/plugins/colorschemes/gruvbox.lua @@ -0,0 +1,27 @@ +local status, plugin = pcall(require,'gruvbox') +if not status then + print('Plugin Error: ', plugin) + return +end +plugin.setup({ + undercurl = true, + underline = true, + bold = true, + italic = { + strings = true, + comments = true, + operators = false, + folds = true, + }, + strikethrough = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, + inverse = true, -- invert background for search, diffs, statuslines and errors + contrast = "", -- can be "hard", "soft" or empty string + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = false, +}) diff --git a/nvim/lua/plugins/colorschemes/onedarkpro.lua b/nvim/lua/plugins/colorschemes/onedarkpro.lua new file mode 100644 index 0000000..bfb34c5 --- /dev/null +++ b/nvim/lua/plugins/colorschemes/onedarkpro.lua @@ -0,0 +1,6 @@ +local status, plugin = pcall(require,'onedarkpro') +if not status then + print('Plugin Error: ', plugin) + return +end +plugin.setup({}) diff --git a/nvim/lua/plugins/colorschemes/rosepine.lua b/nvim/lua/plugins/colorschemes/rosepine.lua new file mode 100644 index 0000000..c9197cf --- /dev/null +++ b/nvim/lua/plugins/colorschemes/rosepine.lua @@ -0,0 +1,54 @@ +local status, plugin = pcall(require,'rose-pine') +if not status then + print('Plugin Error: ', plugin) + return +end +plugin.setup({ + --- @usage 'auto'|'main'|'moon'|'dawn' + variant = 'auto', + --- @usage 'main'|'moon'|'dawn' + dark_variant = 'main', + bold_vert_split = false, + dim_nc_background = false, + disable_background = false, + disable_float_background = false, + disable_italics = false, + + --- @usage string hex value or named color from rosepinetheme.com/palette + groups = { + background = 'base', + background_nc = '_experimental_nc', + panel = 'surface', + panel_nc = 'base', + border = 'highlight_med', + comment = 'muted', + link = 'iris', + punctuation = 'subtle', + + error = 'love', + hint = 'iris', + info = 'foam', + warn = 'gold', + + headings = { + h1 = 'iris', + h2 = 'foam', + h3 = 'rose', + h4 = 'gold', + h5 = 'pine', + h6 = 'foam', + } + -- or set all headings at once + -- headings = 'subtle' + }, + + -- Change specific vim highlight groups + -- https://github.com/rose-pine/neovim/wiki/Recipes + highlight_groups = { + ColorColumn = { bg = 'rose' }, + + -- Blend colours against the "base" background + CursorLine = { bg = 'foam', blend = 10 }, + StatusLine = { fg = 'love', bg = 'love', blend = 10 }, + } +}) diff --git a/nvim/lua/plugins/colorschemes/tokyonight.lua b/nvim/lua/plugins/colorschemes/tokyonight.lua new file mode 100644 index 0000000..10d20e5 --- /dev/null +++ b/nvim/lua/plugins/colorschemes/tokyonight.lua @@ -0,0 +1,40 @@ +local status, plugin = pcall(require,'tokyonight') +if not status then + print('Plugin Error: ', plugin) + return +end +plugin.setup({ + -- your configuration comes here + -- or leave it empty to use the default settings + style = "moon", -- The theme comes in three styles, `storm`, `moon`, a darker variant `night` and `day` + light_style = "day", -- The theme is used when the background is set to light + transparent = false, -- Enable this to disable setting the background color + terminal_colors = true, -- Configure the colors used when opening a `:terminal` in Neovim + styles = { + -- Style to be applied to different syntax groups + -- Value is any valid attr-list value for `:help nvim_set_hl` + comments = { italic = true }, + keywords = { italic = true }, + functions = {}, + variables = {}, + -- Background styles. Can be "dark", "transparent" or "normal" + sidebars = "dark", -- style for sidebars, see below + floats = "dark", -- style for floating windows + }, + sidebars = { "qf", "help" }, -- Set a darker background on sidebar-like windows. For example: `["qf", "vista_kind", "terminal", "packer"]` + day_brightness = 0.3, -- Adjusts the brightness of the colors of the **Day** style. Number between 0 and 1, from dull to vibrant colors + hide_inactive_statusline = false, -- Enabling this option, will hide inactive statuslines and replace them with a thin border instead. Should work with the standard **StatusLine** and **LuaLine**. + dim_inactive = false, -- dims inactive windows + lualine_bold = false, -- When `true`, section headers in the lualine theme will be bold + + --- You can override specific color groups to use other groups or a hex color + --- function will be called with a ColorScheme table + ---@param colors ColorScheme + on_colors = function(colors) end, + + --- You can override specific highlights to use other groups or a hex color + --- function will be called with a Highlights and ColorScheme table + ---@param highlights Highlights + ---@param colors ColorScheme + on_highlights = function(highlights, colors) end, +})