From d78da97be7ce882d791c92e3ccbb948782f2232f Mon Sep 17 00:00:00 2001 From: notgne2 Date: Mon, 29 Mar 2021 15:22:47 -0700 Subject: [PATCH] wew lad --- common.nix | 95 ++ flake.lock | 25 + flake.nix | 31 + goodhm.nix | 48 + home-manager/common.nix | 74 ++ home-manager/data/codium-base16.nix | 1134 +++++++++++++++++ home-manager/data/emojis.txt | 1570 ++++++++++++++++++++++++ home-manager/data/gtk2-base16.nix | 23 + home-manager/data/kitty-base16.nix | 38 + home-manager/data/nixos_circlejerk.png | Bin 0 -> 7111 bytes home-manager/data/rofi-base16.nix | 150 +++ home-manager/data/vim-base16.nix | 401 ++++++ home-manager/data/waybar-base16.nix | 117 ++ home-manager/data/waybar.nix | 111 ++ home-manager/modules/colors.nix | 370 ++++++ home-manager/modules/default.nix | 15 + home-manager/modules/ezchromium.nix | 128 ++ home-manager/modules/ezcodium.nix | 73 ++ home-manager/modules/ezpcusr.nix | 1006 +++++++++++++++ home-manager/modules/fonts.nix | 64 + home-manager/users/chekkie.nix | 39 + home-manager/users/glooder.nix | 80 ++ home-manager/users/notgne2.nix | 50 + home-manager/users/notgne2_pc.nix | 438 +++++++ modules/default.nix | 13 + modules/ezpassthru.nix | 51 + modules/ezpc.nix | 197 +++ modules/ezvahi.nix | 22 + modules/ezwg.nix | 97 ++ modules/fuckingprint.nix | 57 + modules/kiosk.nix | 84 ++ modules/workstation.nix | 118 ++ users/chekkie.nix | 13 + users/glooder.nix | 14 + users/notgne2.nix | 16 + 35 files changed, 6762 insertions(+) create mode 100644 common.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 goodhm.nix create mode 100644 home-manager/common.nix create mode 100644 home-manager/data/codium-base16.nix create mode 100644 home-manager/data/emojis.txt create mode 100644 home-manager/data/gtk2-base16.nix create mode 100644 home-manager/data/kitty-base16.nix create mode 100644 home-manager/data/nixos_circlejerk.png create mode 100644 home-manager/data/rofi-base16.nix create mode 100644 home-manager/data/vim-base16.nix create mode 100644 home-manager/data/waybar-base16.nix create mode 100644 home-manager/data/waybar.nix create mode 100644 home-manager/modules/colors.nix create mode 100644 home-manager/modules/default.nix create mode 100644 home-manager/modules/ezchromium.nix create mode 100644 home-manager/modules/ezcodium.nix create mode 100644 home-manager/modules/ezpcusr.nix create mode 100644 home-manager/modules/fonts.nix create mode 100644 home-manager/users/chekkie.nix create mode 100644 home-manager/users/glooder.nix create mode 100644 home-manager/users/notgne2.nix create mode 100644 home-manager/users/notgne2_pc.nix create mode 100644 modules/default.nix create mode 100644 modules/ezpassthru.nix create mode 100644 modules/ezpc.nix create mode 100644 modules/ezvahi.nix create mode 100644 modules/ezwg.nix create mode 100644 modules/fuckingprint.nix create mode 100644 modules/kiosk.nix create mode 100644 modules/workstation.nix create mode 100644 users/chekkie.nix create mode 100644 users/glooder.nix create mode 100644 users/notgne2.nix diff --git a/common.nix b/common.nix new file mode 100644 index 0000000..a068566 --- /dev/null +++ b/common.nix @@ -0,0 +1,95 @@ +{ config, pkgs, lib, options, ... }: + +{ + imports = [ + ./modules + ]; + + config = { + hardware.enableAllFirmware = true; + hardware.cpu.amd.updateMicrocode = true; + + services.earlyoom.enable = true; + + # based mosh + programs.mosh.enable = true; + + systemd.services.nix-daemon.serviceConfig.IOSchedulingClass = 3; + + nix = { + package = lib.mkDefault pkgs.nixUnstable; + + gc = { + automatic = true; + dates = "20:00"; + options = "--delete-older-than 40d"; + }; + + daemonIONiceLevel = 7; + daemonNiceLevel = 19; + trustedUsers = [ "root" "builder" "@wheel" ]; + + extraOptions = '' + builders-use-substitutes = true + experimental-features = nix-command flakes + keep-outputs = true + keep-derivations = true + ''; + }; + + # make nginx have good logging and defaults + services.nginx = { + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + appendHttpConfig = '' + error_log stderr; + access_log syslog:server=unix:/dev/log combined; + ''; + }; + + # allow reverse ssh port shit to be public sometimes + services.openssh.gatewayPorts = "clientspecified"; + + # no homo + nixpkgs.config.oraclejdk.accept_license = true; + + # set some basic system props + security.sudo.wheelNeedsPassword = false; + networking.networkmanager.enable = lib.mkDefault true; + networking.nameservers = [ "1.1.1.1" "1.0.0.1" ]; + time.timeZone = lib.mkDefault "America/Phoenix"; + + # package list + environment.systemPackages = with pkgs; [ + wget + vim + nano + curl + httpie + git + unzip + htop + (python37Full.withPackages (ps: with ps; [ pip setuptools ])) + neofetch + ripgrep + lsd + lm_sensors + rsync + bind + ]; + + # Allow ssh + services.openssh.enable = true; + services.openssh.passwordAuthentication = false; + + # Use a firewall + networking.firewall.enable = lib.mkDefault true; + networking.firewall.allowedTCPPorts = [ 22 443 80 ]; + + programs.fish.enable = true; + users.defaultUserShell = pkgs.fish; + + system.stateVersion = lib.mkDefault (builtins.abort "pls specify system.stateVersion (to 19.03)"); + }; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..acaec75 --- /dev/null +++ b/flake.lock @@ -0,0 +1,25 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1604629176, + "narHash": "sha256-ogLk0dOqWJ7FmyigD9ls8qrUD5VZ7BJqrPwC/YoBLkc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "11fc05583669cf3cb8c99dc6cb6f6ca7d93fa01d", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..e57eeac --- /dev/null +++ b/flake.nix @@ -0,0 +1,31 @@ +{ + outputs = { self, nixpkgs }: { + nixosModules = { + ezpassthru = import ./modules/ezpassthru.nix; + ezpc = import ./modules/ezpc.nix; + ezvahi = import ./modules/ezvahi.nix; + ezwg = import ./modules/ezwg.nix; + kiosk = import ./modules/kiosk.nix; + fuckingprint = import ./modules/fuckingprint.nix; + workstation = import ./modules/workstation.nix; + all = import ./modules/default.nix; + }; + + homeManagerModules = { + ezpcusr = import ./home-manager/modules/ezpcusr.nix; + all = import ./home-manager/modules/default.nix; + }; + + # Not really modules? but eh + nixosModules.common = import ./common.nix; + nixosModules.common-notgne2 = import ./users/notgne2.nix; + nixosModules.common-glooder = import ./users/glooder.nix; + nixosModules.common-chekkie = import ./users/chekkie.nix; + + homeManagerModules.common = import ./home-manager/common.nix; + homeManagerModules.common-notgne2 = import ./home-manager/users/notgne2.nix; + homeManagerModules.common-notgne2_pc = import ./home-manager/users/notgne2_pc.nix; + homeManagerModules.common-glooder = import ./home-manager/users/glooder.nix; + homeManagerModules.common-chekkie = import ./home-manager/users/chekkie.nix; + }; +} diff --git a/goodhm.nix b/goodhm.nix new file mode 100644 index 0000000..967f7ce --- /dev/null +++ b/goodhm.nix @@ -0,0 +1,48 @@ +hm: + +{ configuration +, pkgs +, inputs ? { } +}: + +with pkgs.lib; +let + collectFailed = cfg: + map (x: x.message) (filter (x: !x.assertion) cfg.assertions); + + showWarnings = res: + let + f = w: x: builtins.trace "warning: ${w}" x; + in + fold f res res.config.warnings; + + extendedLib = import "${hm}/modules/lib/stdlib-extended.nix" pkgs.lib; + + hmModules = + import "${hm}/modules/modules.nix" { + inherit pkgs; + check = true; + useNixpkgsModule = false; + lib = extendedLib; + }; + + rawModule = extendedLib.evalModules { + modules = [ configuration ] ++ hmModules; + specialArgs = { + inherit inputs; + modulesPath = "${hm}/modules"; + }; + }; + + module = showWarnings ( + let + failed = collectFailed rawModule.config; + failedStr = concatStringsSep "\n" (map (x: "- ${x}") failed); + in + if failed == [ ] + then rawModule + else throw "\nFailed assertions:\n${failedStr}" + ); + +in +module.config.home.activationPackage diff --git a/home-manager/common.nix b/home-manager/common.nix new file mode 100644 index 0000000..2214130 --- /dev/null +++ b/home-manager/common.nix @@ -0,0 +1,74 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ ./modules ]; + + programs.vim = { + enable = true; + extraConfig = '' + set nocompatible + set nocp + set backspace=indent,eol,start + ''; + }; + + home.sessionVariables = { TERM = "xterm-256color"; }; + + programs.bat.enable = true; + + programs.fish = + let + bobthefish = builtins.fetchGit { + url = "https://github.com/oh-my-fish/theme-bobthefish.git"; + rev = "a2ad38aa051aaed25ae3bd6129986e7f27d42d7b"; + }; + in + { + enable = true; + shellAliases = { + cat = "bat"; + }; + plugins = [ + { + name = "done"; + src = builtins.fetchGit { + url = "https://github.com/franciscolourenco/done.git"; + rev = "9351f5a9f4ae6c73dd6f18e41364e63a77be5d90"; + }; + } + { + name = "bobthefish"; + src = bobthefish; + } + ]; + interactiveShellInit = '' + set TERM xterm-256color + + # Load nix shit on non-NixOS computers (yea yea laugh it up we all have legacy machines somewhere) + if not set -q NIX_PATH + fenv source $HOME/.nix-profile/etc/profile.d/nix.sh + end + + set -U __done_min_cmd_duration 2000 + set -U __done_notification_command '${pkgs.espeak}/bin/espeak yyyyyi' + + source ${bobthefish}/fish_prompt.fish + + set -Ua fish_user_paths ~/.bin + set -Ua fish_user_paths ~/.local/bin + set -Ua fish_user_paths ~/.npm-global/bin + set -Ua fish_user_paths ~/.cargo/bin + + set -U fish_key_bindings fish_default_key_bindings + set -g theme_nerd_fonts yes + + function fish_greeting + begin ${pkgs.figlet}/bin/figlet -f mini heh; echo ""; uptime; uname -a; end | ${pkgs.lolcat}/bin/lolcat + end + + eval (${pkgs.direnv}/bin/direnv hook fish) + + ${pkgs.thefuck}/bin/thefuck --alias | source + ''; + }; +} diff --git a/home-manager/data/codium-base16.nix b/home-manager/data/codium-base16.nix new file mode 100644 index 0000000..6bb5507 --- /dev/null +++ b/home-manager/data/codium-base16.nix @@ -0,0 +1,1134 @@ +name: base16: + +'' + { + "name": "Base16 ${name}", + "type": "dark", + "colors": { + // Contrast colors + // "contrastActiveBorder": "#f00", //7 + // "contrastBorder": "#f00", //6 + + // Base colors + // "focusBorder": "#f00", //7 + "foreground": "#${base16."base05"}", //5 + "widget.shadow": "#${base16."base00"}", //0 + "selection.background": "#${base16."base0D"}", //D + "errorForeground": "#${base16."base08"}", //8 + + // Button control + "button.background": "#${base16."base01"}", //1 + "button.foreground": "#${base16."base07"}", //7 + "button.hoverBackground": "#${base16."base04"}", //4 + + // Dropdown control + "dropdown.background": "#${base16."base00"}", //0 + // "dropdown.border": "#f00", //2 + "dropdown.foreground": "#${base16."base05"}", //5 + + // Input control + "input.background": "#${base16."base00"}", //0 + // "input.border": "#f00", //0 + "input.foreground": "#${base16."base05"}", //5 + "input.placeholderForeground": "#${base16."base03"}", //3 + "inputOption.activeBorder": "#${base16."base09"}", //9 + "inputValidation.errorBackground": "#${base16."base08"}", //8 + "inputValidation.errorBorder": "#${base16."base08"}", //8 + "inputValidation.infoBackground": "#${base16."base0D"}", //D + "inputValidation.infoBorder": "#${base16."base0D"}", //D + "inputValidation.warningBackground": "#${base16."base0A"}", //A + "inputValidation.warningBorder": "#${base16."base0A"}", //A + + // Scroll bar control + "scrollbar.shadow": "#${base16."base01"}", //1 + "scrollbarSlider.activeBackground": "#${base16."base04"}6f", //4 + "scrollbarSlider.background": "#${base16."base02"}6f", //2 + "scrollbarSlider.hoverBackground": "#${base16."base03"}6f", //3 + + // Badge + "badge.background": "#${base16."base00"}", //0 + "badge.foreground": "#${base16."base05"}", //5 + + // Progress bar + "progressBar.background": "#${base16."base03"}", //3 + + // Lists and trees + "list.activeSelectionBackground": "#${base16."base02"}", //2 + "list.activeSelectionForeground": "#${base16."base05"}", //5 + "list.dropBackground": "#${base16."base07"}", //7 + "list.focusBackground": "#${base16."base02"}", //2 + "list.focusForeground": "#${base16."base05"}", //5 + "list.highlightForeground": "#${base16."base07"}", //7 + "list.hoverBackground": "#${base16."base03"}", //3 + "list.hoverForeground": "#${base16."base05"}", //5 + "list.inactiveSelectionBackground": "#${base16."base02"}", //2 + "list.inactiveSelectionForeground": "#${base16."base05"}", //5 + "list.inactiveFocusBackground": "#${base16."base02"}", //2 + "list.invalidItemForeground": "#${base16."base08"}", //8 + "list.errorForeground": "#${base16."base08"}", //8 + "list.warningForeground": "#${base16."base09"}", //9 + + // Activity bar + "activityBar.background": "#${base16."base00"}", //0 + // "activityBar.border": "#f00", //0 + "activityBar.dropBackground": "#${base16."base07"}", //7 + "activityBar.foreground": "#${base16."base05"}", //5 + "activityBarBadge.background": "#${base16."base0D"}", //D + "activityBarBadge.foreground": "#${base16."base07"}", //7 + + // Side bar + "sideBar.background": "#${base16."base01"}", //1 + // "sideBar.border": "#f00", //1 + "sideBar.foreground": "#${base16."base05"}", //5 + "sideBarSectionHeader.background": "#${base16."base03"}", //3 + "sideBarSectionHeader.foreground": "#${base16."base05"}", //5 + "sideBarTitle.foreground": "#${base16."base05"}", //5 + + // Editor groups and tabs + "editorGroup.background": "#${base16."base00"}", //0 + // "editorGroup.border": "#f00", + "editorGroup.dropBackground": "#${base16."base02"}6f", //2 + "editorGroupHeader.noTabsBackground": "#${base16."base01"}", //1 + "editorGroupHeader.tabsBackground": "#${base16."base01"}", //1 + // "editorGroupHeader.tabsBorder": "#f00", + "tab.activeBackground": "#${base16."base00"}", //0 + "tab.activeForeground": "#${base16."base05"}", //5 + // "tab.border": "#f00", + // "tab.unfocusedActiveBorder": "#f00", + // "tab.activeBorderTop": "#f00", + "tab.inactiveBackground": "#${base16."base01"}", //1 + "tab.inactiveForeground": "#${base16."base03"}", //3 + "tab.unfocusedActiveForeground": "#${base16."base04"}", //4 + "tab.unfocusedInactiveForeground": "#${base16."base03"}", //3 + "tab.hoverBackground": "#${base16."base02"}", //2 + "tab.unfocusedHoverBackground": "#${base16."base02"}", //2 + // "tab.hoverBorder": "#f00", + // "tab.unfocusedHoverBorder": "#f00", + + // Editor colors + "editor.background": "#${base16."base00"}", //0 + "editor.foreground": "#${base16."base05"}", //5 + "editorLineNumber.foreground": "#${base16."base03"}", //3 + "editorCursor.foreground": "#${base16."base05"}", //5 + "editor.selectionBackground": "#${base16."base02"}", //2 + "editor.selectionHighlightBackground": "#${base16."base01"}", //1 + "editor.inactiveSelectionBackground": "#${base16."base02"}", //2 + "editor.wordHighlightBackground": "#${base16."base02"}", //2 + "editor.wordHighlightStrongBackground": "#${base16."base03"}", //3 + "editor.findMatchBackground": "#${base16."base0A"}6f", //A + "editor.findMatchHighlightBackground": "#${base16."base09"}6f", //9 + "editor.findRangeHighlightBackground": "#${base16."base01"}", //1 + "editor.hoverHighlightBackground": "#${base16."base02"}", //2 + "editor.lineHighlightBackground": "#${base16."base01"}", //1 + // "editor.lineHighlightBorder": "#f00", + "editorLink.activeForeground": "#${base16."base0D"}", //D + "editor.rangeHighlightBackground": "#${base16."base01"}", //1 + "editorWhitespace.foreground": "#${base16."base03"}", //3 + "editorIndentGuide.background": "#${base16."base03"}", //3 + "editorIndentGuide.activeBackground": "#${base16."base04"}", //4 + "editorRuler.foreground": "#${base16."base03"}", //3 + "editorCodeLens.foreground": "#${base16."base02"}", //2 + "editorBracketMatch.background": "#${base16."base02"}", //2 + // "editorBracketMatch.border": "#f00", + // "editorError.border": "#f0f", + + // Overview ruler + // "editorOverviewRuler.border": "#f00", + "editorOverviewRuler.findMatchForeground": "#${base16."base0A"}", //A + "editorOverviewRuler.rangeHighlightForeground": "#${ + base16."base03" + }", //3 + "editorOverviewRuler.selectionHighlightForeground": "#${ + base16."base02" + }", //2 + "editorOverviewRuler.wordHighlightForeground": "#${ + base16."base07" + }", //7 + "editorOverviewRuler.wordHighlightStrongForeground": "#${ + base16."base0D" + }", //D + "editorOverviewRuler.modifiedForeground": "#${base16."base0E"}", //E + "editorOverviewRuler.addedForeground": "#${base16."base0B"}", //B + "editorOverviewRuler.deletedForeground": "#${base16."base08"}", //8 + "editorOverviewRuler.errorForeground": "#${base16."base08"}", //8 + "editorOverviewRuler.warningForeground": "#${base16."base0A"}", //A + "editorOverviewRuler.infoForeground": "#${base16."base0C"}", //C + + // Errors and warnings + "editorError.foreground": "#${base16."base08"}", //8 + // "editorError.border": "", + "editorWarning.foreground": "#${base16."base0A"}", //A + // "editorWarning.border": "#f00", + "editorInfo.foreground": "#${base16."base0C"}", //C + // "editorInfo.border": "", + "editorGutter.addedBackground": "#${base16."base0B"}", //B + "editorGutter.background": "#${base16."base00"}", //0 + "editorGutter.deletedBackground": "#${base16."base08"}", //8 + "editorGutter.modifiedBackground": "#${base16."base0E"}", //E + + // Diff editor colors + "diffEditor.insertedTextBackground": "#${base16."base0B"}20", + // "diffEditor.insertedTextBorder": "#f00", + "diffEditor.removedTextBackground": "#${base16."base08"}20", + // "diffEditor.removedTextBorder": "#f00", + + // Editor widget colors + "editorWidget.background": "#${base16."base00"}", //0 + // "editorWidget.border": "#f00", + "editorSuggestWidget.background": "#${base16."base01"}", //1 + // "editorSuggestWidget.border": "#f00", + "editorSuggestWidget.foreground": "#${base16."base05"}", //5 + "editorSuggestWidget.highlightForeground": "#${base16."base0D"}", //D + "editorSuggestWidget.selectedBackground": "#${base16."base02"}", //2 + "editorHoverWidget.background": "#${base16."base00"}", //1 + // "editorHoverWidget.border": "#f00", + "debugExceptionWidget.background": "#${base16."base01"}", //1 + // "debugExceptionWidget.border": "#f00", + "editorMarkerNavigation.background": "#${base16."base01"}", //1 + "editorMarkerNavigationError.background": "#${base16."base08"}", //8 + "editorMarkerNavigationWarning.background": "#${base16."base0A"}", //A + + // Peek view colors + // "peekView.border": "#f00", + "peekViewEditor.background": "#${base16."base01"}", //1 + "peekViewEditor.matchHighlightBackground": "#${ + base16."base09" + }6f", //9 + "peekViewEditorGutter.background": "#${base16."base01"}", //1 + "peekViewResult.background": "#${base16."base00"}", //0 + "peekViewResult.fileForeground": "#${base16."base05"}", //5 + "peekViewResult.lineForeground": "#${base16."base03"}", //3 + "peekViewResult.matchHighlightBackground": "#${ + base16."base09" + }6f", //9 + "peekViewResult.selectionBackground": "#${base16."base02"}", //2 + "peekViewResult.selectionForeground": "#${base16."base05"}", //5 + "peekViewTitle.background": "#${base16."base02"}", //2 + "peekViewTitleDescription.foreground": "#${base16."base03"}", //3 + "peekViewTitleLabel.foreground": "#${base16."base05"}", //5 + + // Merge conflicts + // "merge.border": "#f00", + "merge.currentContentBackground": "#${base16."base0D"}40", //D + "merge.currentHeaderBackground": "#${base16."base0D"}40", //D + "merge.incomingContentBackground": "#${base16."base0B"}60", //B + "merge.incomingHeaderBackground": "#${base16."base0B"}60", //B + "editorOverviewRuler.currentContentForeground": "#${ + base16."base0D" + }", //D + "editorOverviewRuler.incomingContentForeground": "#${ + base16."base0B" + }", //B + "editorOverviewRuler.commonContentForeground": "#${ + base16."base0F" + }", //F + + // Panel colors + "panel.background": "#${base16."base00"}", //0 + // "panel.border": "#f00", + // "panelTitle.activeBorder": "#f00", + "panelTitle.activeForeground": "#${base16."base05"}", //5 + "panelTitle.inactiveForeground": "#${base16."base03"}", //3 + + // Status bar colors + "statusBar.background": "#${base16."base0D"}", //D + // "statusBar.border": "#f00", + "statusBar.debuggingBackground": "#${base16."base09"}", //9 + "statusBar.debuggingForeground": "#${base16."base07"}", //7 + // "statusBar.debuggingBorder": "", + "statusBar.foreground": "#${base16."base07"}", //7 + "statusBar.noFolderBackground": "#${base16."base0E"}", //E + "statusBar.noFolderForeground": "#${base16."base07"}", //7 + // "statusBar.noFolderBorder": "", + "statusBarItem.activeBackground": "#${base16."base03"}", //3 + "statusBarItem.hoverBackground": "#${base16."base02"}", //2 + "statusBarItem.prominentBackground": "#f0f", + "statusBarItem.prominentHoverBackground": "#f00", + + // Title bar colors (macOS) + "titleBar.activeBackground": "#${base16."base00"}", //0 + "titleBar.activeForeground": "#${base16."base05"}", //5 + "titleBar.inactiveBackground": "#${base16."base01"}", //1 + "titleBar.inactiveForeground": "#${base16."base03"}", //3 + + // Notification dialog colors + // "notificationCenter.border": "", + "notificationCenterHeader.foreground": "#${base16."base05"}", //5 + "notificationCenterHeader.background": "#${base16."base01"}", //1 + // "notificationToast.border": "", + "notifications.foreground": "#${base16."base05"}", //5 + "notifications.background": "#${base16."base02"}", //2 + // "notifications.border": "", + "notificationLink.foreground": "#${base16."base0D"}", //D + + // Below is no longer supported as of 1.21 + "notification.background": "#${base16."base02"}", //2 + "notification.foreground": "#${base16."base05"}", //5 + "notification.buttonBackground": "#${base16."base0D"}", //D + "notification.buttonHoverBackground": "#${base16."base02"}", //2 + "notification.buttonForeground": "#${base16."base07"}", //7 + "notification.infoBackground": "#${base16."base0C"}", //C + "notification.infoForeground": "#${base16."base07"}", //7 + "notification.warningBackground": "#${base16."base0A"}", //A + "notification.warningForeground": "#${base16."base07"}", //7 + "notification.errorBackground": "#${base16."base08"}", //8 + "notification.errorForeground": "#${base16."base07"}", //7 + // Above is no longer supported as of 1.21 + + // Extensions + "extensionButton.prominentBackground": "#${base16."base0B"}", //B + "extensionButton.prominentForeground": "#${base16."base07"}", //7 + "extensionButton.prominentHoverBackground": "#${base16."base02"}", //2 + + // Quick picker + // "pickerGroup.border": "#f00", + "pickerGroup.foreground": "#${base16."base03"}", //3 + + // Integrated terminal colors + "terminal.background": "#${base16."base00"}", //0 + "terminal.foreground": "#${base16."base05"}", //5 + "terminal.ansiBlack": "#${base16."base02"}", //2 + "terminal.ansiBrightBlack": "#${base16."base03"}", //3 + "terminal.ansiRed": "#${base16."base08"}", //8 + "terminal.ansiBrightRed": "#${base16."base08"}", //8 + "terminal.ansiYellow": "#${base16."base09"}", //9 + "terminal.ansiBrightYellow": "#${base16."base0A"}", //A + "terminal.ansiGreen": "#${base16."base0B"}", //B + "terminal.ansiBrightGreen": "#${base16."base0B"}", //B + "terminal.ansiCyan": "#${base16."base0C"}", //C + "terminal.ansiBrightCyan": "#${base16."base0C"}", //C + "terminal.ansiBlue": "#${base16."base0D"}", //D + "terminal.ansiBrightBlue": "#${base16."base0D"}", //D + "terminal.ansiMagenta": "#${base16."base0E"}", //E + "terminal.ansiBrightMagenta": "#${base16."base0E"}", //E + "terminal.ansiWhite": "#${base16."base06"}", //6 + "terminal.ansiBrightWhite": "#${base16."base07"}", //7 + + // Debug + "debugToolBar.background": "#${base16."base01"}", //1 + + // Welcome page + "welcomePage.buttonBackground": "#${base16."base01"}", //1 + "welcomePage.buttonHoverBackground": "#${base16."base02"}", //2 + "walkThrough.embeddedEditorBackground": "#${base16."base00"}", //0 + + // Git colors + "gitDecoration.modifiedResourceForeground": "#${base16."base0E"}", //E + "gitDecoration.deletedResourceForeground": "#${base16."base08"}", //8 + "gitDecoration.untrackedResourceForeground": "#${ + base16."base0B" + }", //B + "gitDecoration.ignoredResourceForeground": "#${base16."base03"}", //3 + "gitDecoration.conflictingResourceForeground": "#${ + base16."base0A" + }", //A + + // Settings editor colors + "settings.headerForeground": "#${base16."base05"}", //5 + "settings.modifiedItemForeground": "#${base16."base0B"}", //B + // "settings.inactiveSelectedItemBorder": "", + "settings.dropdownBackground": "#${base16."base01"}", //1 + "settings.dropdownForeground": "#${base16."base05"}", //5 + // "settings.dropdownBorder": "", + // "settings.dropdownListBorder": "", + "settings.checkboxBackground": "#${base16."base01"}", //1 + "settings.checkboxForeground": "#${base16."base05"}", //5 + // "settings.checkboxBorder": "", + "settings.textInputBackground": "#${base16."base01"}", //1 + "settings.textInputForeground": "#${base16."base05"}", //5 + // "settings.textInputBorder": "", + "settings.numberInputBackground": "#${base16."base01"}", //1 + "settings.numberInputForeground": "#${base16."base05"}", //5 + // "settings.numberInputBorder": "", + "settings.modifiedItemIndicator": "#${base16."base0D"}", //D + + // Breadcrumbs + "breadcrumb.foreground": "#${base16."base05"}", //5 + "breadcrumb.background": "#${base16."base01"}", //1 + "breadcrumb.focusForeground": "#${base16."base06"}", //6 + "breadcrumb.activeSelectionForeground": "#${base16."base07"}", //7 + "breadcrumbPicker.background": "#${base16."base01"}", //1 + + // Unknown + "descriptionForeground": "#${base16."base03"}", //3 + "textBlockQuote.background": "#${base16."base01"}", //1 + "textBlockQuote.border": "#${base16."base0D"}", //D + "textCodeBlock.background": "#${base16."base00"}", //0 + "textLink.activeForeground": "#${base16."base0C"}", //C + "textLink.foreground": "#${base16."base0D"}", //D + "textPreformat.foreground": "#${base16."base0D"}", //D + "textSeparator.foreground": "#f0f" + }, + "tokenColors": [ + { + "settings": { + "foreground": "#eeffffff", + "background": "#263238ff" + } + }, + { + "name": "Comment", + "scope": [ + "comment", + "punctuation.definition.comment" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#${base16."base03"}" //3 + } + }, + { + "name": "Variables, Parameters", + "scope": [ + "variable", + "string constant.other.placeholder", + "entity.name.variable.parameter", + "entity.name.variable.local", + "variable.parameter" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Properties", + "scope": [ + "variable.other.object.property" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Colors", + "scope": [ + "constant.other.color" + ], + "settings": { + "foreground": "#0f0" + } + }, + { + "name": "Invalid", + "scope": [ + "invalid", + "invalid.illegal" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Invalid - Deprecated", + "scope": [ + "invalid.deprecated" + ], + "settings": { + "foreground": "#${base16."base0F"}" //F + } + }, + { + "name": "Keyword, Storage", + "scope": [ + "keyword", + "storage.modifier" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Keyword Control", + "scope": [ + "keyword.control", + "keyword.control.flow", + "keyword.control.from", + "keyword.control.import", + "keyword.control.as" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Keyword", + "scope": [ + "keyword.other.using", + "keyword.other.namespace", + "keyword.other.class", + "keyword.other.new", + "keyword.other.event", + "keyword.other.this", + "keyword.other.await", + "keyword.other.var", + "keyword.other.package", + "keyword.other.import", + "variable.language.this", + "storage.type.ts" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Types, Primitives", + "scope": [ + "keyword.type", + "storage.type.primitive" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Function", + "scope": [ + "storage.type.function" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Operator, Misc", + "scope": [ + "constant.other.color", + "punctuation", + "punctuation.section.class.end", + "meta.tag", + "punctuation.definition.tag", + "punctuation.separator.inheritance.php", + "punctuation.definition.tag.html", + "punctuation.definition.tag.begin.html", + "punctuation.definition.tag.end.html", + "keyword.other.template", + "keyword.other.substitution" + ], + "settings": { + "foreground": "#${base16."base05"}" //5 + } + }, + { + "name": "Embedded", + "scope": [ + "punctuation.section.embedded", + "variable.interpolation" + ], + "settings": { + "foreground": "#${base16."base0F"}" //F + } + }, + { + "name": "Tag", + "scope": [ + "entity.name.tag", + "meta.tag.sgml", + "markup.deleted.git_gutter" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Function, Special Method", + "scope": [ + "entity.name.function", + "meta.function-call", + "variable.function", + "support.function", + "keyword.other.special-method" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Block Level Variables", + "scope": [ + "meta.block variable.other" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Other Variable, String Link", + "scope": [ + "support.other.variable", + "string.other.link" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Number, Constant, Function Argument, Tag Attribute, Embedded", + "scope": [ + "constant.numeric", + "constant.language", + "support.constant", + "constant.character", + "constant.escape", + "keyword.other.unit", + "keyword.other" + ], + "settings": { + "foreground": "#${base16."base09"}" //9 + } + }, + { + "name": "String, Symbols, Inherited Class, Markup Heading", + "scope": [ + "string", + "constant.other.symbol", + "constant.other.key", + "entity.other.inherited-class", + "markup.heading", + "markup.inserted.git_gutter", + "meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js" + ], + "settings": { + "fontStyle": "normal", + "foreground": "#${base16."base0B"}" //B + } + }, + { + "name": "Class, Support", + "scope": [ + "entity.name", + "support.type", + "support.class", + "support.orther.namespace.use.php", + "meta.use.php", + "support.other.namespace.php", + "markup.changed.git_gutter", + "support.type.sys-types" + ], + "settings": { + "foreground": "#${base16."base0A"}" //A + } + }, + { + "name": "Storage Type, Import Class", + "scope": [ + "storage.type", + "storage.modifier.package", + "storage.modifier.import" + ], + "settings": { + "foreground": "#${base16."base0A"}" //A + } + }, + { + "name": "Fields", + "scope": [ + "entity.name.variable.field" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Entity Types", + "scope": [ + "support.type" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "CSS Class and Support", + "scope": [ + "source.css support.type.property-name", + "source.sass support.type.property-name", + "source.scss support.type.property-name", + "source.less support.type.property-name", + "source.stylus support.type.property-name", + "source.postcss support.type.property-name" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Sub-methods", + "scope": [ + "entity.name.module.js", + "variable.import.parameter.js", + "variable.other.class.js" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Language methods", + "scope": [ + "variable.language" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "entity.name.method.js", + "scope": [ + "entity.name.method.js" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#82AAFF" + } + }, + { + "name": "meta.method.js", + "scope": [ + "meta.class-method.js entity.name.function.js", + "variable.function.constructor" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Attributes", + "scope": [ + "entity.other.attribute-name" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "HTML Attributes", + "scope": [ + "text.html.basic entity.other.attribute-name.html", + "text.html.basic entity.other.attribute-name" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#${base16."base0A"}" //A + } + }, + { + "name": "CSS Classes", + "scope": [ + "entity.other.attribute-name.class" + ], + "settings": { + "foreground": "#${base16."base0A"}" //A + } + }, + { + "name": "CSS ID's", + "scope": [ + "source.sass keyword.control" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Inserted", + "scope": [ + "markup.inserted" + ], + "settings": { + "foreground": "#${base16."base0B"}" //B + } + }, + { + "name": "Deleted", + "scope": [ + "markup.deleted" + ], + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Changed", + "scope": [ + "markup.changed" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Regular Expressions", + "scope": [ + "string.regexp" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Escape Characters", + "scope": [ + "constant.character.escape" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "URL", + "scope": [ + "*url*", + "*link*", + "*uri*" + ], + "settings": { + "fontStyle": "underline" + } + }, + { + "name": "Decorators", + "scope": [ + "tag.decorator.js entity.name.tag.js", + "tag.decorator.js punctuation.definition.tag.js" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#${base16."base0D"}" // D + } + }, + { + "name": "ES7 Bind Operator", + "scope": [ + "source.js constant.other.object.key.js string.unquoted.label.js" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#FF5370" + } + }, + { + "name": "JSON Key - Level 0", + "scope": [ + "source.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 1", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 2", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 3", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 4", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 5", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 6", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 7", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "JSON Key - Level 8", + "scope": [ + "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Markdown - Plain", + "scope": [ + "text.html.markdown", + "punctuation.definition.list_item.markdown" + ], + "settings": { + "foreground": "#${base16."base05"}" //5 + } + }, + { + "name": "Markdown - Markup Raw Inline", + "scope": [ + "text.html.markdown markup.inline.raw.markdown" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Markdown - Markup Raw Inline Punctuation", + "scope": [ + "text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown" + ], + "settings": { + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Markdown - Line Break", + "scope": [ + "text.html.markdown meta.dummy.line-break" + ], + "settings": { + "foreground": "" + } + }, + { + "name": "Markdown - Heading", + "scope": [ + "markdown.heading", + "markup.heading | markup.heading entity.name", + "markup.heading.markdown punctuation.definition.heading.markdown" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Markup - Italic", + "scope": [ + "markup.italic" + ], + "settings": { + "fontStyle": "italic", + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Markup - Bold", + "scope": [ + "markup.bold", + "markup.bold string" + ], + "settings": { + "fontStyle": "bold", + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Markup - Bold-Italic", + "scope": [ + "markup.bold markup.italic", + "markup.italic markup.bold", + "markup.quote markup.bold", + "markup.bold markup.italic string", + "markup.italic markup.bold string", + "markup.quote markup.bold string" + ], + "settings": { + "fontStyle": "bold", + "foreground": "#${base16."base08"}" //8 + } + }, + { + "name": "Markup - Underline", + "scope": [ + "markup.underline" + ], + "settings": { + "fontStyle": "underline", + "foreground": "#${base16."base09"}" //9 + } + }, + { + "name": "Markup - Strike", + "scope": [ + "markup.strike" + ], + "settings": { + "fontStyle": "strike", + "foreground": "" + } + }, + { + "name": "Markdown - Blockquote", + "scope": [ + "markup.quote punctuation.definition.blockquote.markdown" + ], + "settings": { + "background": "#${base16."base0C"}", //C + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Markup - Quote", + "scope": [ + "markup.quote" + ], + "settings": { + "fontStyle": "italic", + "foreground": "" + } + }, + { + "name": "Markdown - Link", + "scope": [ + "string.other.link.title.markdown" + ], + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "name": "Markdown - Link Description", + "scope": [ + "string.other.link.description.title.markdown" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Markdown - Link Anchor", + "scope": [ + "constant.other.reference.link.markdown" + ], + "settings": { + "foreground": "#${base16."base0A"}" //A + } + }, + { + "name": "Markup - Raw Block", + "scope": [ + "markup.raw.block" + ], + "settings": { + "foreground": "#${base16."base0E"}" //E + } + }, + { + "name": "Markdown - Raw Block Fenced", + "scope": [ + "markup.raw.block.fenced.markdown" + ], + "settings": { + "foreground": "#00000050" + } + }, + { + "name": "Markdown - Fenced Bode Block", + "scope": [ + "punctuation.definition.fenced.markdown" + ], + "settings": { + "foreground": "#00000050" + } + }, + { + "name": "Markdown - Fenced Bode Block Variable", + "scope": [ + "markup.raw.block.fenced.markdown", + "variable.language.fenced.markdown" + ], + "settings": { + "foreground": "#f0f" + } + }, + { + "name": "Markdown - Fenced Language", + "scope": [ + "variable.language.fenced.markdown" + ], + "settings": { + "foreground": "#f00" + } + }, + { + "name": "Markdown - Separator", + "scope": [ + "meta.separator" + ], + "settings": { + "fontStyle": "bold", + "background": "#00000050", + "foreground": "#${base16."base0C"}" //C + } + }, + { + "name": "Markup - Table", + "scope": [ + "markup.table" + ], + "settings": { + "foreground": "#f0f" + } + }, + { + "scope": "token.info-token", + "settings": { + "foreground": "#${base16."base0D"}" //D + } + }, + { + "scope": "token.warn-token", + "settings": { + "foreground": "#${base16."base0A"}" //A + } + }, + { + "scope": "token.error-token", + "settings": { + "foreground": "#${base16."base08"}" //8 + } + }, + { + "scope": "token.debug-token", + "settings": { + "foreground": "#${base16."base0E"}" //E + } + } + ] + } +'' diff --git a/home-manager/data/emojis.txt b/home-manager/data/emojis.txt new file mode 100644 index 0000000..d76e59d --- /dev/null +++ b/home-manager/data/emojis.txt @@ -0,0 +1,1570 @@ +๐Ÿ’ฏ 100 score perfect numbers century exam quiz test pass hundred +๐Ÿ”ข 1234 numbers blue-square +๐Ÿ˜€ Grinning face smile happy joy :D grin +๐Ÿ˜ฌ Grimacing face grimace teeth +๐Ÿ˜ Grin face happy smile joy kawaii +๐Ÿ˜‚ Joy face cry tears weep happy happytears haha +๐Ÿคฃ Rofl face rolling floor laughing lol haha +๐Ÿฅณ Partying face celebration woohoo +๐Ÿ˜ƒ Smiley face happy joy haha :D :) smile funny +๐Ÿ˜„ Smile face happy joy funny haha laugh like :D :) +๐Ÿ˜… Sweat Smile face hot happy laugh sweat smile relief +๐Ÿ˜† Laughing happy joy lol satisfied haha face glad XD laugh +๐Ÿ˜‡ Innocent face angel heaven halo +๐Ÿ˜‰ Wink face happy mischievous secret ;) smile eye +๐Ÿ˜Š Blush face smile happy flushed crush embarrassed shy joy +๐Ÿ™‚ Slightly Smiling Face face smile +๐Ÿ™ƒ Upside Down Face face flipped silly smile +โ˜บ๏ธ Relaxed face blush massage happiness +๐Ÿ˜‹ Yum happy joy tongue smile face silly yummy nom delicious savouring +๐Ÿ˜Œ Relieved face relaxed phew massage happiness +๐Ÿ˜ Heart Eyes face love like affection valentines infatuation crush heart +๐Ÿฅฐ Smiling Face with Three Hearts face love like affection valentines infatuation crush hearts adore +๐Ÿ˜˜ Kissing Heart face love like affection valentines infatuation kiss +๐Ÿ˜— Kissing love like face 3 valentines infatuation kiss +๐Ÿ˜™ Kissing Smiling Eyes face affection valentines infatuation kiss +๐Ÿ˜š Kissing Closed Eyes face love like affection valentines infatuation kiss +๐Ÿ˜œ Stuck out Tongue Winking Eye face prank childish playful mischievous smile wink tongue +๐Ÿคช Zany face goofy crazy +๐Ÿคจ Raised Eyebrow face distrust scepticism disapproval disbelief surprise +๐Ÿง Monocle face stuffy wealthy +๐Ÿ˜ Stuck out Tongue Closed Eyes face prank playful mischievous smile tongue +๐Ÿ˜› Stuck out Tongue face prank childish playful mischievous smile tongue +๐Ÿค‘ Money Mouth Face face rich dollar money +๐Ÿค“ Nerd Face face nerdy geek dork +๐Ÿ˜Ž Sunglasses face cool smile summer beach sunglass +๐Ÿคฉ Star Struck face smile starry eyes grinning +๐Ÿคก Clown Face face +๐Ÿค  Cowboy Hat Face face cowgirl hat +๐Ÿค— Hugs face smile hug +๐Ÿ˜ Smirk face smile mean prank smug sarcasm +๐Ÿ˜ถ No Mouth face hellokitty +๐Ÿ˜ Neutral Face indifference meh :| neutral +๐Ÿ˜‘ Expressionless face indifferent -_- meh deadpan +๐Ÿ˜’ Unamused indifference bored straight face serious sarcasm unimpressed skeptical dubious side_eye +๐Ÿ™„ Roll Eyes face eyeroll frustrated +๐Ÿค” Thinking face hmmm think consider +๐Ÿคฅ Lying Face face lie pinocchio +๐Ÿคญ Hand Over Mouth face whoops shock surprise +๐Ÿคซ Shushing face quiet shhh +๐Ÿคฌ Symbols Over Mouth face swearing cursing cussing profanity expletive +๐Ÿคฏ Exploding Head face shocked mind blown +๐Ÿ˜ณ Flushed face blush shy flattered +๐Ÿ˜ž Disappointed face sad upset depressed :( +๐Ÿ˜Ÿ Worried face concern nervous :( +๐Ÿ˜  Angry mad face annoyed frustrated +๐Ÿ˜ก Rage angry mad hate despise +๐Ÿ˜” Pensive face sad depressed upset +๐Ÿ˜• Confused face indifference huh weird hmmm :/ +๐Ÿ™ Slightly Frowning Face face frowning disappointed sad upset +โ˜น Frowning Face face sad upset frown +๐Ÿ˜ฃ Persevere face sick no upset oops +๐Ÿ˜– Confounded face confused sick unwell oops :S +๐Ÿ˜ซ Tired Face sick whine upset frustrated +๐Ÿ˜ฉ Weary face tired sleepy sad frustrated upset +๐Ÿฅบ Pleading face begging mercy +๐Ÿ˜ค Triumph face gas phew proud pride +๐Ÿ˜ฎ Open Mouth face surprise impressed wow whoa :O +๐Ÿ˜ฑ Scream face munch scared omg +๐Ÿ˜จ Fearful face scared terrified nervous oops huh +๐Ÿ˜ฐ Cold Sweat face nervous sweat +๐Ÿ˜ฏ Hushed face woo shh +๐Ÿ˜ฆ Frowning face aw what +๐Ÿ˜ง Anguished face stunned nervous +'( ๐Ÿ˜ข Cry face tears sad depressed upset : +๐Ÿ˜ฅ Disappointed Relieved face phew sweat nervous +๐Ÿคค Drooling Face face +๐Ÿ˜ช Sleepy face tired rest nap +๐Ÿ˜“ Sweat face hot sad tired exercise +๐Ÿฅต Hot face feverish heat red sweating +๐Ÿฅถ Cold face blue freezing frozen frostbite icicles +๐Ÿ˜ญ Sob face cry tears sad upset depressed +๐Ÿ˜ต Dizzy Face spent unconscious xox dizzy +๐Ÿ˜ฒ Astonished face xox surprised poisoned +๐Ÿค Zipper Mouth Face face sealed zipper secret +๐Ÿคข Nauseated Face face vomit gross green sick throw up ill +๐Ÿคง Sneezing Face face gesundheit sneeze sick allergy +๐Ÿคฎ Vomiting face sick +๐Ÿ˜ท Mask face sick ill disease +๐Ÿค’ Face with Thermometer sick temperature thermometer cold fever +๐Ÿค• Face with Head Bandage injured clumsy bandage hurt +๐Ÿฅด Woozy face dizzy intoxicated tipsy wavy +๐Ÿ˜ด Sleeping face tired sleepy night zzz +๐Ÿ’ค Zzz sleepy tired dream +๐Ÿ’ฉ Poop hankey shitface fail turd shit +๐Ÿ˜ˆ Smiling Imp devil horns +๐Ÿ‘ฟ Imp devil angry horns +๐Ÿ‘น Japanese Ogre monster red mask halloween scary creepy devil demon japanese ogre +๐Ÿ‘บ Japanese Goblin red evil mask monster scary creepy japanese goblin +๐Ÿ’€ Skull dead skeleton creepy death +๐Ÿ‘ป Ghost halloween spooky scary +๐Ÿ‘ฝ Alien UFO paul weird outer_space +๐Ÿค– Robot computer machine bot +๐Ÿ˜บ Smiley Cat animal cats happy smile +๐Ÿ˜ธ Smile Cat animal cats smile +๐Ÿ˜น Joy Cat animal cats haha happy tears +๐Ÿ˜ป Heart Eyes Cat animal love like affection cats valentines heart +๐Ÿ˜ผ Smirk Cat animal cats smirk +๐Ÿ˜ฝ Kissing Cat animal cats kiss +๐Ÿ™€ Scream Cat animal cats munch scared scream +๐Ÿ˜ฟ Crying Cat Face animal tears weep sad cats upset cry +๐Ÿ˜พ Pouting Cat animal cats +๐Ÿคฒ Palms up hands gesture cupped prayer +๐Ÿ™Œ Raised Hands gesture hooray yea celebration hands +๐Ÿ‘ Clap hands praise applause congrats yay +๐Ÿ‘‹ Wave hands gesture goodbye solong farewell hello hi palm +๐Ÿค™ Call Me Hand hands gesture +๐Ÿ‘ +1 thumbsup yes awesome good agree accept cool hand like +๐Ÿ‘Ž 1 thumbsdown no dislike hand +๐Ÿ‘Š Facepunch angry violence fist hit attack hand +โœŠ Fist fingers hand grasp +๐Ÿค› Fist Left hand fistbump +๐Ÿคœ Fist Right hand fistbump +โœŒ V fingers ohyeah hand peace victory two +๐Ÿ‘Œ Ok Hand fingers limbs perfect ok okay +โœ‹ Raised Hand fingers stop highfive palm ban +๐Ÿคš Raised Back of Hand fingers raised backhand +๐Ÿ‘ Open Hands fingers butterfly hands open +๐Ÿ’ช Muscle arm flex hand summer strong biceps +๐Ÿ™ Pray please hope wish namaste highfive +๐Ÿฆถ Foot kick stomp +๐Ÿฆต Leg kick limb +๐Ÿค Handshake agreement shake +โ˜ Point up hand fingers direction up +๐Ÿ‘† Point up 2 fingers hand direction up +๐Ÿ‘‡ Point Down fingers hand direction down +๐Ÿ‘ˆ Point Left direction fingers hand left +๐Ÿ‘‰ Point Right fingers hand direction right +๐Ÿ–• Fu hand fingers rude middle flipping +๐Ÿ– Raised Hand with Fingers Splayed hand fingers palm +๐ŸคŸ Love You hand fingers gesture +๐Ÿค˜ Metal hand fingers evil_eye sign_of_horns rock_on +๐Ÿคž Crossed Fingers good lucky +๐Ÿ–– Vulcan Salute hand fingers spock star trek +โœ Writing Hand lower_left_ballpoint_pen stationery write compose +๐Ÿคณ Selfie camera phone +๐Ÿ’… Nail Care beauty manicure finger fashion nail +๐Ÿ‘„ Lips mouth kiss +๐Ÿฆท Tooth teeth dentist +๐Ÿ‘… Tongue mouth playful +๐Ÿ‘‚ Ear face hear sound listen +๐Ÿ‘ƒ Nose smell sniff +๐Ÿ‘ Eye face look see watch stare +๐Ÿ‘€ Eyes look watch stalk peek see +๐Ÿง  Brain smart intelligent +๐Ÿ‘ค Bust in Silhouette user person human +๐Ÿ‘ฅ Busts in Silhouette user person human group team +๐Ÿ—ฃ Speaking Head user person human sing say talk +๐Ÿ‘ถ Baby child boy girl toddler +๐Ÿง’ Child gender-neutral young +๐Ÿ‘ฆ Boy man male guy teenager +๐Ÿ‘ง Girl female woman teenager +๐Ÿง‘ Adult gender-neutral person +๐Ÿ‘จ Man mustache father dad guy classy sir moustache +๐Ÿ‘ฉ Woman female girls lady +๐Ÿ‘ฑโ€โ™€๏ธ Blonde Woman woman female girl blonde person +๐Ÿ‘ฑ Blonde Man man male boy blonde guy person +๐Ÿง” Bearded Person person bewhiskered +๐Ÿง“ Older Adult human elder senior gender-neutral +๐Ÿ‘ด Older Man human male men old elder senior +๐Ÿ‘ต Older Woman human female women lady old elder senior +๐Ÿ‘ฒ Man with Gua Pi Mao male boy chinese +๐Ÿง• Woman with Headscarf female hijab mantilla tichel +๐Ÿ‘ณโ€โ™€๏ธ Woman with Turban female indian hinduism arabs woman +๐Ÿ‘ณ Man with Turban male indian hinduism arabs +๐Ÿ‘ฎโ€โ™€๏ธ Policewoman woman police law legal enforcement arrest 911 female +๐Ÿ‘ฎ Policeman man police law legal enforcement arrest 911 +๐Ÿ‘ทโ€โ™€๏ธ Construction Worker Woman female human wip build construction worker labor woman +๐Ÿ‘ท Construction Worker Man male human wip guy build construction worker labor +๐Ÿ’‚โ€โ™€๏ธ Guardswoman uk gb british female royal woman +๐Ÿ’‚ Guardsman uk gb british male guy royal +๐Ÿ•ต๏ธโ€โ™€๏ธ Female Detective human spy detective female woman +๐Ÿ•ต Male Detective human spy detective +๐Ÿ‘ฉโ€โš•๏ธ Woman Health Worker doctor nurse therapist healthcare woman human +๐Ÿ‘จโ€โš•๏ธ Man Health Worker doctor nurse therapist healthcare man human +๐Ÿ‘ฉโ€๐ŸŒพ Woman Farmer rancher gardener woman human +๐Ÿ‘จโ€๐ŸŒพ Man Farmer rancher gardener man human +๐Ÿ‘ฉโ€๐Ÿณ Woman Cook chef woman human +๐Ÿ‘จโ€๐Ÿณ Man Cook chef man human +๐Ÿ‘ฉโ€๐ŸŽ“ Woman Student graduate woman human +๐Ÿ‘จโ€๐ŸŽ“ Man Student graduate man human +๐Ÿ‘ฉโ€๐ŸŽค Woman Singer rockstar entertainer woman human +๐Ÿ‘จโ€๐ŸŽค Man Singer rockstar entertainer man human +๐Ÿ‘ฉโ€๐Ÿซ Woman Teacher instructor professor woman human +๐Ÿ‘จโ€๐Ÿซ Man Teacher instructor professor man human +๐Ÿ‘ฉโ€๐Ÿญ Woman Factory Worker assembly industrial woman human +๐Ÿ‘จโ€๐Ÿญ Man Factory Worker assembly industrial man human +๐Ÿ‘ฉโ€๐Ÿ’ป Woman Technologist coder developer engineer programmer software woman human laptop computer +๐Ÿ‘จโ€๐Ÿ’ป Man Technologist coder developer engineer programmer software man human laptop computer +๐Ÿ‘ฉโ€๐Ÿ’ผ Woman Office Worker business manager woman human +๐Ÿ‘จโ€๐Ÿ’ผ Man Office Worker business manager man human +๐Ÿ‘ฉโ€๐Ÿ”ง Woman Mechanic plumber woman human wrench +๐Ÿ‘จโ€๐Ÿ”ง Man Mechanic plumber man human wrench +๐Ÿ‘ฉโ€๐Ÿ”ฌ Woman Scientist biologist chemist engineer physicist woman human +๐Ÿ‘จโ€๐Ÿ”ฌ Man Scientist biologist chemist engineer physicist man human +๐Ÿ‘ฉโ€๐ŸŽจ Woman Artist painter woman human +๐Ÿ‘จโ€๐ŸŽจ Man Artist painter man human +๐Ÿ‘ฉโ€๐Ÿš’ Woman Firefighter fireman woman human +๐Ÿ‘จโ€๐Ÿš’ Man Firefighter fireman man human +๐Ÿ‘ฉโ€โœˆ๏ธ Woman Pilot aviator plane woman human +๐Ÿ‘จโ€โœˆ๏ธ Man Pilot aviator plane man human +๐Ÿ‘ฉโ€๐Ÿš€ Woman Astronaut space rocket woman human +๐Ÿ‘จโ€๐Ÿš€ Man Astronaut space rocket man human +๐Ÿ‘ฉโ€โš–๏ธ Woman Judge justice court woman human +๐Ÿ‘จโ€โš–๏ธ Man Judge justice court man human +๐Ÿฆธโ€โ™€๏ธ Woman Superhero woman female good heroine superpowers +๐Ÿฆธโ€โ™‚๏ธ Man Superhero man male good hero superpowers +๐Ÿฆนโ€โ™€๏ธ Woman Supervillain woman female evil bad criminal heroine superpowers +๐Ÿฆนโ€โ™‚๏ธ Man Supervillain man male evil bad criminal hero superpowers +๐Ÿคถ Mrs Claus woman female xmas mother christmas +๐ŸŽ… Santa festival man male xmas father christmas +๐Ÿง™โ€โ™€๏ธ Sorceress woman female mage witch +๐Ÿง™โ€โ™‚๏ธ Wizard man male mage sorcerer +๐Ÿงโ€โ™€๏ธ Woman Elf woman female +๐Ÿงโ€โ™‚๏ธ Man Elf man male +๐Ÿง›โ€โ™€๏ธ Woman Vampire woman female +๐Ÿง›โ€โ™‚๏ธ Man Vampire man male dracula +๐ŸงŸโ€โ™€๏ธ Woman Zombie woman female undead walking dead +๐ŸงŸโ€โ™‚๏ธ Man Zombie man male dracula undead walking dead +๐Ÿงžโ€โ™€๏ธ Woman Genie woman female +๐Ÿงžโ€โ™‚๏ธ Man Genie man male +๐Ÿงœโ€โ™€๏ธ Mermaid woman female merwoman ariel +๐Ÿงœโ€โ™‚๏ธ Merman man male triton +๐Ÿงšโ€โ™€๏ธ Woman Fairy woman female +๐Ÿงšโ€โ™‚๏ธ Man Fairy man male +๐Ÿ‘ผ Angel heaven wings halo +๐Ÿคฐ Pregnant Woman baby +๐Ÿคฑ Breastfeeding nursing baby +๐Ÿ‘ธ Princess girl woman female blond crown royal queen +๐Ÿคด Prince boy man male crown royal king +๐Ÿ‘ฐ Bride with Veil couple marriage wedding woman bride +๐Ÿคต Man in Tuxedo couple marriage wedding groom +๐Ÿƒโ€โ™€๏ธ Running Woman woman walking exercise race running female +๐Ÿƒ Running Man man walking exercise race running +๐Ÿšถโ€โ™€๏ธ Walking Woman human feet steps woman female +๐Ÿšถ Walking Man human feet steps +๐Ÿ’ƒ Dancer female girl woman fun +๐Ÿ•บ Man Dancing male boy fun dancer +๐Ÿ‘ฏ Dancing Women female bunny women girls +๐Ÿ‘ฏโ€โ™‚๏ธ Dancing Men male bunny men boys +๐Ÿ‘ซ Couple pair people human love date dating like affection valentines marriage +๐Ÿ‘ฌ Two Men Holding Hands pair couple love like bromance friendship people human +๐Ÿ‘ญ Two Women Holding Hands pair friendship couple love like female people human +๐Ÿ™‡โ€โ™€๏ธ Bowing Woman woman female girl +๐Ÿ™‡ Bowing Man man male boy +๐Ÿคฆโ€โ™‚๏ธ Man Facepalming man male boy disbelief +๐Ÿคฆโ€โ™€๏ธ Woman Facepalming woman female girl disbelief +๐Ÿคท Woman Shrugging woman female girl confused indifferent doubt +๐Ÿคทโ€โ™‚๏ธ Man Shrugging man male boy confused indifferent doubt +๐Ÿ’ Tipping Hand Woman female girl woman human information +๐Ÿ’โ€โ™‚๏ธ Tipping Hand Man male boy man human information +๐Ÿ™… No Good Woman female girl woman nope +๐Ÿ™…โ€โ™‚๏ธ No Good Man male boy man nope +๐Ÿ™† Ok Woman women girl female pink human woman +๐Ÿ™†โ€โ™‚๏ธ Ok Man men boy male blue human man +๐Ÿ™‹ Raising Hand Woman female girl woman +๐Ÿ™‹โ€โ™‚๏ธ Raising Hand Man male boy man +๐Ÿ™Ž Pouting Woman female girl woman +๐Ÿ™Žโ€โ™‚๏ธ Pouting Man male boy man +๐Ÿ™ Frowning Woman female girl woman sad depressed discouraged unhappy +๐Ÿ™โ€โ™‚๏ธ Frowning Man male boy man sad depressed discouraged unhappy +๐Ÿ’‡ Haircut Woman female girl woman +๐Ÿ’‡โ€โ™‚๏ธ Haircut Man male boy man +๐Ÿ’† Massage Woman female girl woman head +๐Ÿ’†โ€โ™‚๏ธ Massage Man male boy man head +๐Ÿง–โ€โ™€๏ธ Woman in Steamy Room female woman spa steamroom sauna +๐Ÿง–โ€โ™‚๏ธ Man in Steamy Room male man spa steamroom sauna +๐Ÿ’‘ Couple with Heart Woman Man pair love like affection human dating valentines marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ Couple with Heart Woman Woman pair love like affection human dating valentines marriage +๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ Couple with Heart Man Man pair love like affection human dating valentines marriage +๐Ÿ’ Couplekiss Man Woman pair valentines love like dating marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ Couplekiss Woman Woman pair valentines love like dating marriage +๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ Couplekiss Man Man pair valentines love like dating marriage +๐Ÿ‘ช Family Man Woman Boy home parents child mom dad father mother people human +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง Family Man Woman Girl home parents people human child +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Man Woman Girl Boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family Man Woman Boy Boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง Family Man Woman Girl Girl home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ Family Woman Woman Boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง Family Woman Woman Girl home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Woman Woman Girl Boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family Woman Woman Boy Boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง Family Woman Woman Girl Girl home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ Family Man Man Boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง Family Man Man Girl home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Man Man Girl Boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family Man Man Boy Boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง Family Man Man Girl Girl home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฆ Family Woman Boy home parent people human child +๐Ÿ‘ฉโ€๐Ÿ‘ง Family Woman Girl home parent people human child +๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Woman Girl Boy home parent people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family Woman Boy Boy home parent people human children +๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง Family Woman Girl Girl home parent people human children +๐Ÿ‘จโ€๐Ÿ‘ฆ Family Man Boy home parent people human child +๐Ÿ‘จโ€๐Ÿ‘ง Family Man Girl home parent people human child +๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Man Girl Boy home parent people human children +๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ Family Man Boy Boy home parent people human children +๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง Family Man Girl Girl home parent people human children +๐Ÿงถ Yarn ball crochet knit +๐Ÿงต Thread needle sewing spool string +๐Ÿงฅ Coat jacket +๐Ÿฅผ Labcoat doctor experiment scientist chemist +๐Ÿ‘š Womans Clothes fashion shopping_bags female +๐Ÿ‘• Tshirt fashion cloth casual shirt tee +๐Ÿ‘– Jeans fashion shopping +๐Ÿ‘” Necktie shirt suitup formal fashion cloth business +๐Ÿ‘— Dress clothes fashion shopping +๐Ÿ‘™ Bikini swimming female woman girl fashion beach summer +๐Ÿ‘˜ Kimono dress fashion women female japanese +๐Ÿ’„ Lipstick female girl fashion woman +๐Ÿ’‹ Kiss face lips love like affection valentines +๐Ÿ‘ฃ Footprints feet tracking walking beach +๐Ÿฅฟ Flat Shoe ballet slip-on slipper +๐Ÿ‘  High Heel fashion shoes female pumps stiletto +๐Ÿ‘ก Sandal shoes fashion flip flops +๐Ÿ‘ข Boot shoes fashion +๐Ÿ‘ž Mans Shoe fashion male +๐Ÿ‘Ÿ Athletic Shoe shoes sports sneakers +๐Ÿฅพ Hiking Boot backpacking camping hiking +๐Ÿงฆ Socks stockings clothes +๐Ÿงค Gloves hands winter clothes +๐Ÿงฃ Scarf neck winter clothes +๐Ÿ‘’ Womans Hat fashion accessories female lady spring +๐ŸŽฉ Tophat magic gentleman classy circus +๐Ÿงข Billed Hat cap baseball +โ›‘ Rescue Worker Helmet construction build +๐ŸŽ“ Mortar Board school college degree university graduation cap hat legal learn education +๐Ÿ‘‘ Crown king kod leader royalty lord +๐ŸŽ’ School Satchel student education bag backpack +๐Ÿงณ Luggage packing travel +๐Ÿ‘ Pouch bag accessories shopping +๐Ÿ‘› Purse fashion accessories money sales shopping +๐Ÿ‘œ Handbag fashion accessory accessories shopping +๐Ÿ’ผ Briefcase business documents work law legal job career +๐Ÿ‘“ Eyeglasses fashion accessories eyesight nerdy dork geek +๐Ÿ•ถ Dark Sunglasses face cool accessories +๐Ÿฅฝ Goggles eyes protection safety +๐Ÿ’ Ring wedding propose marriage valentines diamond fashion jewelry gem engagement +๐ŸŒ‚ Closed Umbrella weather rain drizzle +๐Ÿถ Dog animal friend nature woof puppy pet faithful +๐Ÿฑ Cat animal meow nature pet kitten +๐Ÿญ Mouse animal nature cheese_wedge rodent +๐Ÿน Hamster animal nature +๐Ÿฐ Rabbit animal nature pet spring magic bunny +๐ŸฆŠ Fox Face animal nature face +๐Ÿป Bear animal nature wild +๐Ÿผ Panda Face animal nature panda +๐Ÿจ Koala animal nature +๐Ÿฏ Tiger animal cat danger wild nature roar +๐Ÿฆ Lion animal nature +๐Ÿฎ Cow beef ox animal nature moo milk +๐Ÿท Pig animal oink nature +๐Ÿฝ Pig Nose animal oink +๐Ÿธ Frog animal nature croak toad +๐Ÿฆ‘ Squid animal nature ocean sea +๐Ÿ™ Octopus animal creature ocean sea nature beach +๐Ÿฆ Shrimp animal ocean nature seafood +๐Ÿต Monkey Face animal nature circus +๐Ÿฆ Gorilla animal nature circus +๐Ÿ™ˆ See No Evil monkey animal nature haha +๐Ÿ™‰ Hear No Evil animal monkey nature +๐Ÿ™Š Speak No Evil monkey animal nature omg +๐Ÿ’ Monkey animal nature banana circus +๐Ÿ” Chicken animal cluck nature bird +๐Ÿง Penguin animal nature +๐Ÿฆ Bird animal nature fly tweet spring +๐Ÿค Baby Chick animal chicken bird +๐Ÿฃ Hatching Chick animal chicken egg born baby bird +๐Ÿฅ Hatched Chick animal chicken baby bird +๐Ÿฆ† Duck animal nature bird mallard +๐Ÿฆ… Eagle animal nature bird +๐Ÿฆ‰ Owl animal nature bird hoot +๐Ÿฆ‡ Bat animal nature blind vampire +๐Ÿบ Wolf animal nature wild +๐Ÿ— Boar animal nature +๐Ÿด Horse animal brown nature +๐Ÿฆ„ Unicorn animal nature mystical +๐Ÿ Honeybee animal insect nature bug spring honey +๐Ÿ› Bug animal insect nature worm +๐Ÿฆ‹ Butterfly animal insect nature caterpillar +๐ŸŒ Snail slow animal shell +๐Ÿž Beetle animal insect nature ladybug +๐Ÿœ Ant animal insect nature bug +๐Ÿฆ— Grasshopper animal cricket chirp +๐Ÿ•ท Spider animal arachnid +๐Ÿฆ‚ Scorpion animal arachnid +๐Ÿฆ€ Crab animal crustacean +๐Ÿ Snake animal evil nature hiss python +๐ŸฆŽ Lizard animal nature reptile +๐Ÿฆ– T Rex animal nature dinosaur tyrannosaurus extinct +๐Ÿฆ• Sauropod animal nature dinosaur brachiosaurus brontosaurus diplodocus extinct +๐Ÿข Turtle animal slow nature tortoise +๐Ÿ  Tropical Fish animal swim ocean beach nemo +๐ŸŸ Fish animal food nature +๐Ÿก Blowfish animal nature food sea ocean +๐Ÿฌ Dolphin animal nature fish sea ocean flipper fins beach +๐Ÿฆˆ Shark animal nature fish sea ocean jaws fins beach +๐Ÿณ Whale animal nature sea ocean +๐Ÿ‹ Whale2 animal nature sea ocean +๐ŸŠ Crocodile animal nature reptile lizard alligator +๐Ÿ† Leopard animal nature +๐Ÿฆ“ Zebra animal nature stripes safari +๐Ÿ… Tiger2 animal nature roar +๐Ÿƒ Water Buffalo animal nature ox cow +๐Ÿ‚ Ox animal cow beef +๐Ÿ„ Cow2 beef ox animal nature moo milk +๐ŸฆŒ Deer animal nature horns venison +๐Ÿช Dromedary Camel animal hot desert hump +๐Ÿซ Camel animal nature hot desert hump +๐Ÿฆ’ Giraffe animal nature spots safari +๐Ÿ˜ Elephant animal nature nose th circus +๐Ÿฆ Rhinoceros animal nature horn +๐Ÿ Goat animal nature +๐Ÿ Ram animal sheep nature +๐Ÿ‘ Sheep animal nature wool shipit +๐ŸŽ Racehorse animal gamble luck +๐Ÿ– Pig2 animal nature +๐Ÿ€ Rat animal mouse rodent +๐Ÿ Mouse2 animal nature rodent +๐Ÿ“ Rooster animal nature chicken +๐Ÿฆƒ Turkey animal bird +๐Ÿ•Š Dove animal bird +๐Ÿ• Dog2 animal nature friend doge pet faithful +๐Ÿฉ Poodle dog animal 101 nature pet +๐Ÿˆ Cat2 animal meow pet cats +๐Ÿ‡ Rabbit2 animal nature pet magic spring +๐Ÿฟ Chipmunk animal nature rodent squirrel +๐Ÿฆ” Hedgehog animal nature spiny +๐Ÿฆ Raccoon animal nature +๐Ÿฆ™ Llama animal nature alpaca +๐Ÿฆ› Hippopotamus animal nature +๐Ÿฆ˜ Kangaroo animal nature australia joey hop marsupial +๐Ÿฆก Badger animal nature honey +๐Ÿฆข Swan animal nature bird +๐Ÿฆš Peacock animal nature peahen bird +๐Ÿฆœ Parrot animal nature bird pirate talk +๐Ÿฆž Lobster animal nature bisque claws seafood +๐ŸฆŸ Mosquito animal nature insect malaria +๐Ÿพ Paw Prints animal tracking footprints dog cat pet feet +๐Ÿ‰ Dragon animal myth nature chinese green +๐Ÿฒ Dragon Face animal myth nature chinese green +๐ŸŒต Cactus vegetable plant nature +๐ŸŽ„ Christmas Tree festival vacation december xmas celebration +๐ŸŒฒ Evergreen Tree plant nature +๐ŸŒณ Deciduous Tree plant nature +๐ŸŒด Palm Tree plant vegetable nature summer beach mojito tropical +๐ŸŒฑ Seedling plant nature grass lawn spring +๐ŸŒฟ Herb vegetable plant medicine weed grass lawn +โ˜˜ Shamrock vegetable plant nature irish clover +๐Ÿ€ Four Leaf Clover vegetable plant nature lucky irish +๐ŸŽ Bamboo plant nature vegetable panda pine_decoration +๐ŸŽ‹ Tanabata Tree plant nature branch summer +๐Ÿƒ Leaves nature plant tree vegetable grass lawn spring +๐Ÿ‚ Fallen Leaf nature plant vegetable leaves +๐Ÿ Maple Leaf nature plant vegetable ca fall +๐ŸŒพ Ear of Rice nature plant +๐ŸŒบ Hibiscus plant vegetable flowers beach +๐ŸŒป Sunflower nature plant fall +๐ŸŒน Rose flowers valentines love spring +๐Ÿฅ€ Wilted Flower plant nature flower +๐ŸŒท Tulip flowers plant nature summer spring +๐ŸŒผ Blossom nature flowers yellow +๐ŸŒธ Cherry Blossom nature plant spring flower +๐Ÿ’ Bouquet flowers nature spring +๐Ÿ„ Mushroom plant vegetable +๐ŸŒฐ Chestnut food squirrel +๐ŸŽƒ Jack O Lantern halloween light pumpkin creepy fall +๐Ÿš Shell nature sea beach +๐Ÿ•ธ Spider Web animal insect arachnid silk +๐ŸŒŽ Earth Americas globe world USA international +๐ŸŒ Earth Africa globe world international +๐ŸŒ Earth Asia globe world east international +๐ŸŒ• Full Moon nature yellow twilight planet space night evening sleep +๐ŸŒ– Waning Gibbous Moon nature twilight planet space night evening sleep waxing_gibbous_moon +๐ŸŒ— Last Quarter Moon nature twilight planet space night evening sleep +๐ŸŒ˜ Waning Crescent Moon nature twilight planet space night evening sleep +๐ŸŒ‘ New Moon nature twilight planet space night evening sleep +๐ŸŒ’ Waxing Crescent Moon nature twilight planet space night evening sleep +๐ŸŒ“ First Quarter Moon nature twilight planet space night evening sleep +๐ŸŒ” Waxing Gibbous Moon nature night sky gray twilight planet space evening sleep +๐ŸŒš New Moon with Face nature twilight planet space night evening sleep +๐ŸŒ Full Moon with Face nature twilight planet space night evening sleep +๐ŸŒ› First Quarter Moon with Face nature twilight planet space night evening sleep +๐ŸŒœ Last Quarter Moon with Face nature twilight planet space night evening sleep +๐ŸŒž Sun with Face nature morning sky +๐ŸŒ™ Crescent Moon night sleep sky evening magic +โญ Star night yellow +๐ŸŒŸ Star2 night sparkle awesome good magic +๐Ÿ’ซ Dizzy star sparkle shoot magic +โœจ Sparkles stars shine shiny cool awesome good magic +โ˜„ Comet space +โ˜€๏ธ Sunny weather nature brightness summer beach spring +๐ŸŒค Sun Behind Small Cloud weather +โ›… Partly Sunny weather nature cloudy morning fall spring +๐ŸŒฅ Sun Behind Large Cloud weather +๐ŸŒฆ Sun Behind Rain Cloud weather +โ˜๏ธ Cloud weather sky +๐ŸŒง Cloud with Rain weather +โ›ˆ Cloud with Lightning and Rain weather lightning +๐ŸŒฉ Cloud with Lightning weather thunder +โšก Zap thunder weather lightning bolt fast +๐Ÿ”ฅ Fire hot cook flame +๐Ÿ’ฅ Boom bomb explode explosion collision blown +โ„๏ธ Snowflake winter season cold weather christmas xmas +๐ŸŒจ Cloud with Snow weather +โ›„ Snowman winter season cold weather christmas xmas frozen without_snow +โ˜ƒ Snowman with Snow winter season cold weather christmas xmas frozen +๐ŸŒฌ Wind Face gust air +๐Ÿ’จ Dash wind air fast shoo fart smoke puff +๐ŸŒช Tornado weather cyclone twister +๐ŸŒซ Fog weather +โ˜‚ Open Umbrella weather spring +โ˜” Umbrella rainy weather spring +๐Ÿ’ง Droplet water drip faucet spring +๐Ÿ’ฆ Sweat Drops water drip oops +๐ŸŒŠ Ocean sea water wave nature tsunami disaster +๐Ÿ Green Apple fruit nature +๐ŸŽ Apple fruit mac school +๐Ÿ Pear fruit nature food +๐ŸŠ Tangerine food fruit nature orange +๐Ÿ‹ Lemon fruit nature +๐ŸŒ Banana fruit food monkey +๐Ÿ‰ Watermelon fruit food picnic summer +๐Ÿ‡ Grapes fruit food wine +๐Ÿ“ Strawberry fruit food nature +๐Ÿˆ Melon fruit nature food +๐Ÿ’ Cherries food fruit +๐Ÿ‘ Peach fruit nature food +๐Ÿ Pineapple fruit nature food +๐Ÿฅฅ Coconut fruit nature food palm +๐Ÿฅ Kiwi Fruit fruit food +๐Ÿฅญ Mango fruit food tropical +๐Ÿฅ‘ Avocado fruit food +๐Ÿฅฆ Broccoli fruit food vegetable +๐Ÿ… Tomato fruit vegetable nature food +๐Ÿ† Eggplant vegetable nature food aubergine +๐Ÿฅ’ Cucumber fruit food pickle +๐Ÿฅ• Carrot vegetable food orange +๐ŸŒถ Hot Pepper food spicy chilli chili +๐Ÿฅ” Potato food tuber vegatable starch +๐ŸŒฝ Corn food vegetable plant +๐Ÿฅฌ Leafy Greens food vegetable plant bok choy cabbage kale lettuce +๐Ÿ  Sweet Potato food nature +๐Ÿฅœ Peanuts food nut +๐Ÿฏ Honey Pot bees sweet kitchen +๐Ÿฅ Croissant food bread french +๐Ÿž Bread food wheat breakfast toast +๐Ÿฅ– Baguette Bread food bread french +๐Ÿฅฏ Bagel food bread bakery schmear +๐Ÿฅจ Pretzel food bread twisted +๐Ÿง€ Cheese food chadder +๐Ÿฅš Egg food chicken breakfast +๐Ÿฅ“ Bacon food breakfast pork pig meat +๐Ÿฅฉ Steak food cow meat cut chop lambchop porkchop +๐Ÿฅž Pancakes food breakfast flapjacks hotcakes +๐Ÿ— Poultry Leg food meat drumstick bird chicken turkey +๐Ÿ– Meat on Bone good food drumstick +๐Ÿฆด Bone skeleton +๐Ÿค Fried Shrimp food animal appetizer summer +๐Ÿณ Fried Egg food breakfast kitchen egg +๐Ÿ” Hamburger meat fast food beef cheeseburger mcdonalds burger king +๐ŸŸ Fries chips snack fast food +๐Ÿฅ™ Stuffed Flatbread food flatbread stuffed gyro +๐ŸŒญ Hotdog food frankfurter +๐Ÿ• Pizza food party +๐Ÿฅช Sandwich food lunch bread +๐Ÿฅซ Canned Food food soup +๐Ÿ Spaghetti food italian noodle +๐ŸŒฎ Taco food mexican +๐ŸŒฏ Burrito food mexican +๐Ÿฅ— Green Salad food healthy lettuce +๐Ÿฅ˜ Shallow Pan of Food food cooking casserole paella +๐Ÿœ Ramen food japanese noodle chopsticks +๐Ÿฒ Stew food meat soup +๐Ÿฅ Fish Cake food japan sea beach narutomaki pink swirl kamaboko surimi ramen +๐Ÿฅ  Fortune Cookie food prophecy +๐Ÿฃ Sushi food fish japanese rice +๐Ÿฑ Bento food japanese box +๐Ÿ› Curry food spicy hot indian +๐Ÿ™ Rice Ball food japanese +๐Ÿš Rice food china asian +๐Ÿ˜ Rice Cracker food japanese +๐Ÿข Oden food japanese +๐Ÿก Dango food dessert sweet japanese barbecue meat +๐Ÿง Shaved Ice hot dessert summer +๐Ÿจ Ice Cream food hot dessert +๐Ÿฆ Icecream food hot dessert summer +๐Ÿฅง Pie food dessert pastry +๐Ÿฐ Cake food dessert +๐Ÿง Cupcake food dessert bakery sweet +๐Ÿฅฎ Moon Cake food autumn +๐ŸŽ‚ Birthday food dessert cake +๐Ÿฎ Custard dessert food +๐Ÿฌ Candy snack dessert sweet lolly +๐Ÿญ Lollipop food snack candy sweet +๐Ÿซ Chocolate Bar food snack dessert sweet +๐Ÿฟ Popcorn food movie theater films snack +๐ŸฅŸ Dumpling food empanada pierogi potsticker +๐Ÿฉ Doughnut food dessert snack sweet donut +๐Ÿช Cookie food snack oreo chocolate sweet dessert +๐Ÿฅ› Milk Glass beverage drink cow +๐Ÿบ Beer relax beverage drink drunk party pub summer alcohol booze +๐Ÿป Beers relax beverage drink drunk party pub summer alcohol booze +๐Ÿฅ‚ Clinking Glasses beverage drink party alcohol celebrate cheers wine champagne toast +๐Ÿท Wine Glass drink beverage drunk alcohol booze +๐Ÿฅƒ Tumbler Glass drink beverage drunk alcohol liquor booze bourbon scotch whisky glass shot +๐Ÿธ Cocktail drink drunk alcohol beverage booze mojito +๐Ÿน Tropical Drink beverage cocktail summer beach alcohol booze mojito +๐Ÿพ Champagne drink wine bottle celebration +๐Ÿถ Sake wine drink drunk beverage japanese alcohol booze +๐Ÿต Tea drink bowl breakfast green british +๐Ÿฅค Cup with Straw drink soda +โ˜• Coffee beverage caffeine latte espresso +๐Ÿผ Baby Bottle food container milk +๐Ÿง‚ Salt condiment shaker +๐Ÿฅ„ Spoon cutlery kitchen tableware +๐Ÿด Fork and Knife cutlery kitchen +๐Ÿฝ Plate with Cutlery food eat meal lunch dinner restaurant +๐Ÿฅฃ Bowl with Spoon food breakfast cereal oatmeal porridge +๐Ÿฅก Takeout Box food leftovers +๐Ÿฅข Chopsticks food +โšฝ Soccer sports football +๐Ÿ€ Basketball sports balls NBA +๐Ÿˆ Football sports balls NFL +โšพ Baseball sports balls +๐ŸฅŽ Softball sports balls +๐ŸŽพ Tennis sports balls green +๐Ÿ Volleyball sports balls +๐Ÿ‰ Rugby Football sports team +๐Ÿฅ Flying Disc sports frisbee ultimate +๐ŸŽฑ 8Ball pool hobby game luck magic +โ›ณ Golf sports business flag hole summer +๐ŸŒ๏ธโ€โ™€๏ธ Golfing Woman sports business woman female +๐ŸŒ Golfing Man sports business +๐Ÿ“ Ping Pong sports pingpong +๐Ÿธ Badminton sports +๐Ÿฅ… Goal Net sports +๐Ÿ’ Ice Hockey sports +๐Ÿ‘ Field Hockey sports +๐Ÿฅ Lacrosse sports ball stick +๐Ÿ Cricket sports +๐ŸŽฟ Ski sports winter cold snow +โ›ท Skier sports winter snow +๐Ÿ‚ Snowboarder sports winter +๐Ÿคบ Person Fencing sports fencing sword +๐Ÿคผโ€โ™€๏ธ Women Wrestling sports wrestlers +๐Ÿคผโ€โ™‚๏ธ Men Wrestling sports wrestlers +๐Ÿคธโ€โ™€๏ธ Woman Cartwheeling gymnastics +๐Ÿคธโ€โ™‚๏ธ Man Cartwheeling gymnastics +๐Ÿคพโ€โ™€๏ธ Woman Playing Handball sports +๐Ÿคพโ€โ™‚๏ธ Man Playing Handball sports +โ›ธ Ice Skate sports +๐ŸฅŒ Curling Stone sports +๐Ÿ›น Skateboard board +๐Ÿ›ท Sled sleigh luge toboggan +๐Ÿน Bow and Arrow sports +๐ŸŽฃ Fishing Pole and Fish food hobby summer +๐ŸฅŠ Boxing Glove sports fighting +๐Ÿฅ‹ Martial Arts Uniform judo karate taekwondo +๐Ÿšฃโ€โ™€๏ธ Rowing Woman sports hobby water ship woman female +๐Ÿšฃ Rowing Man sports hobby water ship +๐Ÿง—โ€โ™€๏ธ Climbing Woman sports hobby woman female rock +๐Ÿง—โ€โ™‚๏ธ Climbing Man sports hobby man male rock +๐ŸŠโ€โ™€๏ธ Swimming Woman sports exercise human athlete water summer woman female +๐ŸŠ Swimming Man sports exercise human athlete water summer +๐Ÿคฝโ€โ™€๏ธ Woman Playing Water Polo sports pool +๐Ÿคฝโ€โ™‚๏ธ Man Playing Water Polo sports pool +๐Ÿง˜โ€โ™€๏ธ Woman in Lotus Position woman female meditation yoga serenity zen mindfulness +๐Ÿง˜โ€โ™‚๏ธ Man in Lotus Position man male meditation yoga serenity zen mindfulness +๐Ÿ„โ€โ™€๏ธ Surfing Woman sports ocean sea summer beach woman female +๐Ÿ„ Surfing Man sports ocean sea summer beach +๐Ÿ›€ Bath clean shower bathroom +โ›น๏ธโ€โ™€๏ธ Basketball Woman sports human woman female +โ›น Basketball Man sports human +๐Ÿ‹๏ธโ€โ™€๏ธ Weight Lifting Woman sports training exercise woman female +๐Ÿ‹ Weight Lifting Man sports training exercise +๐Ÿšดโ€โ™€๏ธ Biking Woman sports bike exercise hipster woman female +๐Ÿšด Biking Man sports bike exercise hipster +๐Ÿšตโ€โ™€๏ธ Mountain Biking Woman transportation sports human race bike woman female +๐Ÿšต Mountain Biking Man transportation sports human race bike +๐Ÿ‡ Horse Racing animal betting competition gambling luck +๐Ÿ•ด Business Suit Levitating suit business levitate hover jump +๐Ÿ† Trophy win award contest place ftw ceremony +๐ŸŽฝ Running Shirt with Sash play pageant +๐Ÿ… Medal Sports award winning +๐ŸŽ– Medal Military award winning army +๐Ÿฅ‡ 1St Place Medal award winning first +๐Ÿฅˆ 2Nd Place Medal award second +๐Ÿฅ‰ 3Rd Place Medal award third +๐ŸŽ— Reminder Ribbon sports cause support awareness +๐Ÿต Rosette flower decoration military +๐ŸŽซ Ticket event concert pass +๐ŸŽŸ Tickets sports concert entrance +๐ŸŽญ Performing Arts acting theater drama +๐ŸŽจ Art design paint draw colors +๐ŸŽช Circus Tent festival carnival party +๐Ÿคนโ€โ™€๏ธ Woman Juggling juggle balance skill multitask +๐Ÿคนโ€โ™‚๏ธ Man Juggling juggle balance skill multitask +๐ŸŽค Microphone sound music PA sing talkshow +๐ŸŽง Headphones music score gadgets +๐ŸŽผ Musical Score treble clef compose +๐ŸŽน Musical Keyboard piano instrument compose +๐Ÿฅ Drum music instrument drumsticks snare +๐ŸŽท Saxophone music instrument jazz blues +๐ŸŽบ Trumpet music brass +๐ŸŽธ Guitar music instrument +๐ŸŽป Violin music instrument orchestra symphony +๐ŸŽฌ Clapper movie film record +๐ŸŽฎ Video Game play console PS4 controller +๐Ÿ‘พ Space Invader game arcade play +๐ŸŽฏ Dart game play bar target bullseye +๐ŸŽฒ Game Die dice random tabletop play luck +โ™Ÿ Chess Pawn expendable +๐ŸŽฐ Slot Machine bet gamble vegas fruit machine luck casino +๐Ÿงฉ Jigsaw interlocking puzzle piece +๐ŸŽณ Bowling sports fun play +๐Ÿš— Red Car red transportation vehicle +๐Ÿš• Taxi uber vehicle cars transportation +๐Ÿš™ Blue Car transportation vehicle +๐ŸšŒ Bus car vehicle transportation +๐ŸšŽ Trolleybus bart transportation vehicle +๐ŸŽ Racing Car sports race fast formula f1 +๐Ÿš“ Police Car vehicle cars transportation law legal enforcement +๐Ÿš‘ Ambulance health 911 hospital +๐Ÿš’ Fire Engine transportation cars vehicle +๐Ÿš Minibus vehicle car transportation +๐Ÿšš Truck cars transportation +๐Ÿš› Articulated Lorry vehicle cars transportation express +๐Ÿšœ Tractor vehicle car farming agriculture +๐Ÿ›ด Kick Scooter vehicle kick razor +๐Ÿ Motorcycle race sports fast +๐Ÿšฒ Bike sports bicycle exercise hipster +๐Ÿ›ต Motor Scooter vehicle vespa sasha +๐Ÿšจ Rotating Light police ambulance 911 emergency alert error pinged law legal +๐Ÿš” Oncoming Police Car vehicle law legal enforcement 911 +๐Ÿš Oncoming Bus vehicle transportation +๐Ÿš˜ Oncoming Automobile car vehicle transportation +๐Ÿš– Oncoming Taxi vehicle cars uber +๐Ÿšก Aerial Tramway transportation vehicle ski +๐Ÿš  Mountain Cableway transportation vehicle ski +๐ŸšŸ Suspension Railway vehicle transportation +๐Ÿšƒ Railway Car transportation vehicle +๐Ÿš‹ Train transportation vehicle carriage public travel +๐Ÿš Monorail transportation vehicle +๐Ÿš„ Bullettrain Side transportation vehicle +๐Ÿš… Bullettrain Front transportation vehicle speed fast public travel +๐Ÿšˆ Light Rail transportation vehicle +๐Ÿšž Mountain Railway transportation vehicle +๐Ÿš‚ Steam Locomotive transportation vehicle train +๐Ÿš† Train2 transportation vehicle +๐Ÿš‡ Metro transportation blue-square mrt underground tube +๐ŸšŠ Tram transportation vehicle +๐Ÿš‰ Station transportation vehicle public +๐Ÿ›ธ Flying Saucer transportation vehicle ufo +๐Ÿš Helicopter transportation vehicle fly +๐Ÿ›ฉ Small Airplane flight transportation fly vehicle +โœˆ๏ธ Airplane vehicle transportation flight fly +๐Ÿ›ซ Flight Departure airport flight landing +๐Ÿ›ฌ Flight Arrival airport flight boarding +โ›ต Sailboat ship summer transportation water sailing +๐Ÿ›ฅ Motor Boat ship +๐Ÿšค Speedboat ship transportation vehicle summer +โ›ด Ferry boat ship yacht +๐Ÿ›ณ Passenger Ship yacht cruise ferry +๐Ÿš€ Rocket launch ship staffmode NASA outer space outer_space fly +๐Ÿ›ฐ Artificial Satellite communication gps orbit spaceflight NASA ISS +๐Ÿ’บ Seat sit airplane transport bus flight fly +๐Ÿ›ถ Canoe boat paddle water ship +โš“ Anchor ship ferry sea boat +๐Ÿšง Construction wip progress caution warning +โ›ฝ Fuelpump gas station petroleum +๐Ÿš Busstop transportation wait +๐Ÿšฆ Vertical Traffic Light transportation driving +๐Ÿšฅ Traffic Light transportation signal +๐Ÿ Checkered Flag contest finishline race gokart +๐Ÿšข Ship transportation titanic deploy +๐ŸŽก Ferris Wheel photo carnival londoneye +๐ŸŽข Roller Coaster carnival playground photo fun +๐ŸŽ  Carousel Horse photo carnival +๐Ÿ— Building Construction wip working progress +๐ŸŒ Foggy photo mountain +๐Ÿ—ผ Tokyo Tower photo japanese +๐Ÿญ Factory building industry pollution smoke +โ›ฒ Fountain photo summer water fresh +๐ŸŽ‘ Rice Scene photo japan asia tsukimi +โ›ฐ Mountain photo nature environment +๐Ÿ” Mountain Snow photo nature environment winter cold +๐Ÿ—ป Mount Fuji photo mountain nature japanese +๐ŸŒ‹ Volcano photo nature disaster +๐Ÿ—พ Japan nation country japanese asia +๐Ÿ• Camping photo outdoors tent +โ›บ Tent photo camping outdoors +๐Ÿž National Park photo environment nature +๐Ÿ›ฃ Motorway road cupertino interstate highway +๐Ÿ›ค Railway Track train transportation +๐ŸŒ… Sunrise morning view vacation photo +๐ŸŒ„ Sunrise Over Mountains view vacation photo +๐Ÿœ Desert photo warm saharah +๐Ÿ– Beach Umbrella weather summer sunny sand mojito +๐Ÿ Desert Island photo tropical mojito +๐ŸŒ‡ City Sunrise photo good morning dawn +๐ŸŒ† City Sunset photo evening sky buildings +๐Ÿ™ Cityscape photo night life urban +๐ŸŒƒ Night with Stars evening city downtown +๐ŸŒ‰ Bridge at Night photo sanfrancisco +๐ŸŒŒ Milky Way photo space stars +๐ŸŒ  Stars night photo +๐ŸŽ‡ Sparkler stars night shine +๐ŸŽ† Fireworks photo festival carnival congratulations +๐ŸŒˆ Rainbow nature happy unicorn_face photo sky spring +๐Ÿ˜ Houses buildings photo +๐Ÿฐ European Castle building royalty history +๐Ÿฏ Japanese Castle photo building +๐ŸŸ Stadium photo place sports concert venue +๐Ÿ—ฝ Statue of Liberty american newyork +๐Ÿ  House building home +๐Ÿก House with Garden home plant nature +๐Ÿš Derelict House abandon evict broken building +๐Ÿข Office building bureau work +๐Ÿฌ Department Store building shopping mall +๐Ÿฃ Post Office building envelope communication +๐Ÿค European Post Office building email +๐Ÿฅ Hospital building health surgery doctor +๐Ÿฆ Bank building money sales cash business enterprise +๐Ÿจ Hotel building accomodation checkin +๐Ÿช Convenience Store building shopping groceries +๐Ÿซ School building student education learn teach +๐Ÿฉ Love Hotel like affection dating +๐Ÿ’’ Wedding love like affection couple marriage bride groom +๐Ÿ› Classical Building art culture history +โ›ช Church building religion christ +๐Ÿ•Œ Mosque islam worship minaret +๐Ÿ• Synagogue judaism worship temple jewish +๐Ÿ•‹ Kaaba mecca mosque islam +โ›ฉ Shinto Shrine temple japan kyoto +โŒš Watch time accessories +๐Ÿ“ฑ Iphone technology apple gadgets dial +๐Ÿ“ฒ Calling iphone incoming +๐Ÿ’ป Computer technology laptop screen display monitor +โŒจ Keyboard technology computer type input text +๐Ÿ–ฅ Desktop Computer technology computing screen +๐Ÿ–จ Printer paper ink +๐Ÿ–ฑ Computer Mouse click +๐Ÿ–ฒ Trackball technology trackpad +๐Ÿ•น Joystick game play +๐Ÿ—œ Clamp tool +๐Ÿ’ฝ Minidisc technology record data disk 90s +๐Ÿ’พ Floppy Disk oldschool technology save 90s 80s +๐Ÿ’ฟ Cd technology dvd disk disc 90s +๐Ÿ“€ Dvd cd disk disc +๐Ÿ“ผ Vhs record video oldschool 90s 80s +๐Ÿ“ท Camera gadgets photography +๐Ÿ“ธ Camera Flash photography gadgets +๐Ÿ“น Video Camera film record +๐ŸŽฅ Movie Camera film record +๐Ÿ“ฝ Film Projector video tape record movie +๐ŸŽž Film Strip movie +๐Ÿ“ž Telephone Receiver technology communication dial +โ˜Ž๏ธ Phone technology communication dial telephone +๐Ÿ“Ÿ Pager bbcall oldschool 90s +๐Ÿ“  Fax communication technology +๐Ÿ“บ Tv technology program oldschool show television +๐Ÿ“ป Radio communication music podcast program +๐ŸŽ™ Studio Microphone sing recording artist talkshow +๐ŸŽš Level Slider scale +๐ŸŽ› Control Knobs dial +๐Ÿงญ Compass magnetic navigation orienteering +โฑ Stopwatch time deadline +โฒ Timer Clock alarm +โฐ Alarm Clock time wake +๐Ÿ•ฐ Mantelpiece Clock time +โณ Hourglass Flowing Sand oldschool time countdown +โŒ› Hourglass time clock oldschool limit exam quiz test +๐Ÿ“ก Satellite communication future radio space +๐Ÿ”‹ Battery power energy sustain +๐Ÿ”Œ Electric Plug charger power +๐Ÿ’ก Bulb light electricity idea +๐Ÿ”ฆ Flashlight dark camping sight night +๐Ÿ•ฏ Candle fire wax +๐Ÿงฏ Fire Extinguisher quench +๐Ÿ—‘ Wastebasket bin trash rubbish garbage toss +๐Ÿ›ข Oil Drum barrell +๐Ÿ’ธ Money with Wings dollar bills payment sale +๐Ÿ’ต Dollar money sales bill currency +๐Ÿ’ด Yen money sales japanese dollar currency +๐Ÿ’ถ Euro money sales dollar currency +๐Ÿ’ท Pound british sterling money sales bills uk england currency +๐Ÿ’ฐ Moneybag dollar payment coins sale +๐Ÿ’ณ Credit Card money sales dollar bill payment shopping +๐Ÿ’Ž Gem blue ruby diamond jewelry +โš– Balance Scale law fairness weight +๐Ÿงฐ Toolbox tools diy fix maintainer mechanic +๐Ÿ”ง Wrench tools diy ikea fix maintainer +๐Ÿ”จ Hammer tools build create +โš’ Hammer and Pick tools build create +๐Ÿ›  Hammer and Wrench tools build create +โ› Pick tools dig +๐Ÿ”ฉ Nut and Bolt handy tools fix +โš™ Gear cog +๐Ÿงฑ Brick bricks +โ›“ Chains lock arrest +๐Ÿงฒ Magnet attraction magnetic +๐Ÿ”ซ Gun violence weapon pistol revolver +๐Ÿ’ฃ Bomb boom explode explosion terrorism +๐Ÿงจ Firecracker dynamite boom explode explosion explosive +๐Ÿ”ช Hocho knife blade cutlery kitchen weapon +๐Ÿ—ก Dagger weapon +โš” Crossed Swords weapon +๐Ÿ›ก Shield protection security +๐Ÿšฌ Smoking kills tobacco cigarette joint smoke +โ˜  Skull and Crossbones poison danger deadly scary death pirate evil +โšฐ Coffin vampire dead die death rip graveyard cemetery casket funeral box +โšฑ Funeral Urn dead die death rip ashes +๐Ÿบ Amphora vase jar +๐Ÿ”ฎ Crystal Ball disco party magic circus fortune_teller +๐Ÿ“ฟ Prayer Beads dhikr religious +๐Ÿงฟ Nazar Amulet bead charm +๐Ÿ’ˆ Barber hair salon style +โš— Alembic distilling science experiment chemistry +๐Ÿ”ญ Telescope stars space zoom science astronomy +๐Ÿ”ฌ Microscope laboratory experiment zoomin science study +๐Ÿ•ณ Hole embarrassing +๐Ÿ’Š Pill health medicine doctor pharmacy drug +๐Ÿ’‰ Syringe health hospital drugs blood medicine needle doctor nurse +๐Ÿงฌ Dna biologist genetics life +๐Ÿฆ  Microbe amoeba bacteria germs +๐Ÿงซ Petri Dish bacteria biology culture lab +๐Ÿงช Test Tube chemistry experiment lab science +๐ŸŒก Thermometer weather temperature hot cold +๐Ÿงน Broom cleaning sweeping witch +๐Ÿงบ Basket laundry +๐Ÿงป Toilet Paper roll +๐Ÿท Label sale tag +๐Ÿ”– Bookmark favorite label save +๐Ÿšฝ Toilet restroom wc washroom bathroom potty +๐Ÿšฟ Shower clean water bathroom +๐Ÿ› Bathtub clean shower bathroom +๐Ÿงผ Soap bar bathing cleaning lather +๐Ÿงฝ Sponge absorbing cleaning porous +๐Ÿงด Lotion Bottle moisturizer sunscreen +๐Ÿ”‘ Key lock door password +๐Ÿ— Old Key lock door password +๐Ÿ›‹ Couch and Lamp read chill +๐Ÿ›Œ Sleeping Bed bed rest +๐Ÿ› Bed sleep rest +๐Ÿšช Door house entry exit +๐Ÿ›Ž Bellhop Bell service +๐Ÿงธ Teddy Bear plush stuffed +๐Ÿ–ผ Framed Picture photography +๐Ÿ—บ World Map location direction +โ›ฑ Parasol on Ground weather summer +๐Ÿ—ฟ Moyai rock easter island moai +๐Ÿ› Shopping mall buy purchase +๐Ÿ›’ Shopping Cart trolley +๐ŸŽˆ Balloon party celebration birthday circus +๐ŸŽ Flags fish japanese koinobori carp banner +๐ŸŽ€ Ribbon decoration pink girl bowtie +๐ŸŽ Gift present birthday christmas xmas +๐ŸŽŠ Confetti Ball festival party birthday circus +๐ŸŽ‰ Tada party congratulations birthday magic circus celebration +๐ŸŽŽ Dolls japanese toy kimono +๐ŸŽ Wind Chime nature ding spring bell +๐ŸŽŒ Crossed Flags japanese nation country border +๐Ÿฎ Izakaya Lantern light paper halloween spooky +๐Ÿงง Red Envelope gift +โœ‰๏ธ Email letter postal inbox communication +๐Ÿ“ฉ Envelope with Arrow email communication +๐Ÿ“จ Incoming Envelope email inbox +๐Ÿ“ง E Mail communication inbox +๐Ÿ’Œ Love Letter email like affection envelope valentines +๐Ÿ“ฎ Postbox email letter envelope +๐Ÿ“ช Mailbox Closed email communication inbox +๐Ÿ“ซ Mailbox email inbox communication +๐Ÿ“ฌ Mailbox with Mail email inbox communication +๐Ÿ“ญ Mailbox with No Mail email inbox +๐Ÿ“ฆ Package mail gift cardboard box moving +๐Ÿ“ฏ Postal Horn instrument music +๐Ÿ“ฅ Inbox Tray email documents +๐Ÿ“ค Outbox Tray inbox email +๐Ÿ“œ Scroll documents ancient history paper +๐Ÿ“ƒ Page with Curl documents office paper +๐Ÿ“‘ Bookmark Tabs favorite save order tidy +๐Ÿงพ Receipt accounting expenses +๐Ÿ“Š Bar Chart graph presentation stats +๐Ÿ“ˆ Chart with Upwards Trend graph presentation stats recovery business economics money sales good success +๐Ÿ“‰ Chart with Downwards Trend graph presentation stats recession business economics money sales bad failure +๐Ÿ“„ Page Facing up documents office paper information +๐Ÿ“… Date calendar schedule +๐Ÿ“† Calendar schedule date planning +๐Ÿ—“ Spiral Calendar date schedule planning +๐Ÿ“‡ Card Index business stationery +๐Ÿ—ƒ Card File Box business stationery +๐Ÿ—ณ Ballot Box election vote +๐Ÿ—„ File Cabinet filing organizing +๐Ÿ“‹ Clipboard stationery documents +๐Ÿ—’ Spiral Notepad memo stationery +๐Ÿ“ File Folder documents business office +๐Ÿ“‚ Open File Folder documents load +๐Ÿ—‚ Card Index Dividers organizing business stationery +๐Ÿ—ž Newspaper Roll press headline +๐Ÿ“ฐ Newspaper press headline +๐Ÿ““ Notebook stationery record notes paper study +๐Ÿ“• Closed Book read library knowledge textbook learn +๐Ÿ“— Green Book read library knowledge study +๐Ÿ“˜ Blue Book read library knowledge learn study +๐Ÿ“™ Orange Book read library knowledge textbook study +๐Ÿ“” Notebook with Decorative Cover classroom notes record paper study +๐Ÿ“’ Ledger notes paper +๐Ÿ“š Books literature library study +๐Ÿ“– Open Book book read library knowledge literature learn study +๐Ÿงท Safety Pin diaper +๐Ÿ”— Link rings url +๐Ÿ“Ž Paperclip documents stationery +๐Ÿ–‡ Paperclips documents stationery +โœ‚๏ธ Scissors stationery cut +๐Ÿ“ Triangular Ruler stationery math architect sketch +๐Ÿ“ Straight Ruler stationery calculate length math school drawing architect sketch +๐Ÿงฎ Abacus calculation +๐Ÿ“Œ Pushpin stationery mark here +๐Ÿ“ Round Pushpin stationery location map here +๐Ÿšฉ Triangular Flag on Post mark milestone place +๐Ÿณ White Flag losing loser lost surrender give up fail +๐Ÿด Black Flag pirate +๐Ÿณ๏ธโ€๐ŸŒˆ Rainbow Flag flag rainbow pride gay lgbt glbt queer homosexual lesbian bisexual transgender +๐Ÿ” Closed Lock with Key security privacy +๐Ÿ”’ Lock security password padlock +๐Ÿ”“ Unlock privacy security +๐Ÿ” Lock with Ink Pen security secret +๐Ÿ–Š Pen stationery writing write +๐Ÿ–‹ Fountain Pen stationery writing write +โœ’๏ธ Black Nib pen stationery writing write +๐Ÿ“ Memo write documents stationery pencil paper writing legal exam quiz test study compose +โœ๏ธ Pencil2 stationery write paper writing school study +๐Ÿ– Crayon drawing creativity +๐Ÿ–Œ Paintbrush drawing creativity art +๐Ÿ” Mag search zoom find detective +๐Ÿ”Ž Mag Right search zoom find detective +โค๏ธ Heart love like valentines +๐Ÿงก Orange Heart love like affection valentines +๐Ÿ’› Yellow Heart love like affection valentines +๐Ÿ’š Green Heart love like affection valentines +๐Ÿ’™ Blue Heart love like affection valentines +๐Ÿ’œ Purple Heart love like affection valentines +๐Ÿ–ค Black Heart evil +๐Ÿ’” Broken Heart sad sorry break heart heartbreak +โฃ Heavy Heart Exclamation decoration love +๐Ÿ’• Two Hearts love like affection valentines heart +๐Ÿ’ž Revolving Hearts love like affection valentines +๐Ÿ’“ Heartbeat love like affection valentines pink heart +๐Ÿ’— Heartpulse like love affection valentines pink +๐Ÿ’– Sparkling Heart love like affection valentines +๐Ÿ’˜ Cupid love like heart affection valentines +๐Ÿ’ Gift Heart love valentines +๐Ÿ’Ÿ Heart Decoration purple-square love like +โ˜ฎ Peace Symbol hippie +โœ Latin Cross christianity +โ˜ช Star and Crescent islam +๐Ÿ•‰ Om hinduism buddhism sikhism jainism +โ˜ธ Wheel of Dharma hinduism buddhism sikhism jainism +โœก Star of David judaism +๐Ÿ”ฏ Six Pointed Star purple-square religion jewish hexagram +๐Ÿ•Ž Menorah hanukkah candles jewish +โ˜ฏ Yin Yang balance +โ˜ฆ Orthodox Cross suppedaneum religion +๐Ÿ› Place of Worship religion church temple prayer +โ›Ž Ophiuchus sign purple-square constellation astrology +โ™ˆ Aries sign purple-square zodiac astrology +โ™‰ Taurus purple-square sign zodiac astrology +โ™Š Gemini sign zodiac purple-square astrology +โ™‹ Cancer sign zodiac purple-square astrology +โ™Œ Leo sign purple-square zodiac astrology +โ™ Virgo sign zodiac purple-square astrology +โ™Ž Libra sign purple-square zodiac astrology +โ™ Scorpius sign zodiac purple-square astrology scorpio +โ™ Sagittarius sign zodiac purple-square astrology +โ™‘ Capricorn sign zodiac purple-square astrology +โ™’ Aquarius sign purple-square zodiac astrology +โ™“ Pisces purple-square sign zodiac astrology +๐Ÿ†” Id purple-square words +โš› Atom Symbol science physics chemistry +๐Ÿˆณ U7a7a kanji japanese chinese empty sky blue-square +๐Ÿˆน U5272 cut divide chinese kanji pink-square +โ˜ข Radioactive nuclear danger +โ˜ฃ Biohazard danger +๐Ÿ“ด Mobile Phone Off mute orange-square silence quiet +๐Ÿ“ณ Vibration Mode orange-square phone +๐Ÿˆถ U6709 orange-square chinese have kanji +๐Ÿˆš U7121 nothing chinese kanji japanese orange-square +๐Ÿˆธ U7533 chinese japanese kanji orange-square +๐Ÿˆบ U55b6 japanese opening hours orange-square +๐Ÿˆท๏ธ U6708 chinese month moon japanese orange-square kanji +โœด๏ธ Eight Pointed Black Star orange-square shape polygon +๐Ÿ†š Vs words orange-square +๐Ÿ‰‘ Accept ok good chinese kanji agree yes orange-circle +๐Ÿ’ฎ White Flower japanese spring +๐Ÿ‰ Ideograph Advantage chinese kanji obtain get circle +ใŠ™๏ธ Secret privacy chinese sshh kanji red-circle +ใŠ—๏ธ Congratulations chinese kanji japanese red-circle +๐Ÿˆด U5408 japanese chinese join kanji red-square +๐Ÿˆต U6e80 full chinese japanese red-square kanji +๐Ÿˆฒ U7981 kanji japanese chinese forbidden limit restricted red-square +๐Ÿ…ฐ๏ธ A red-square alphabet letter +๐Ÿ…ฑ๏ธ B red-square alphabet letter +๐Ÿ†Ž Ab red-square alphabet +๐Ÿ†‘ Cl alphabet words red-square +๐Ÿ…พ๏ธ O2 alphabet red-square letter +๐Ÿ†˜ Sos help red-square words emergency 911 +โ›” No Entry limit security privacy bad denied stop circle +๐Ÿ“› Name Badge fire forbid +๐Ÿšซ No Entry Sign forbid stop limit denied disallow circle +โŒ X no delete remove cancel red +โญ• O circle round +๐Ÿ›‘ Stop Sign stop +๐Ÿ’ข Anger angry mad +โ™จ๏ธ Hotsprings bath warm relax +๐Ÿšท No Pedestrians rules crossing walking circle +๐Ÿšฏ Do Not Litter trash bin garbage circle +๐Ÿšณ No Bicycles cyclist prohibited circle +๐Ÿšฑ Non Potable Water drink faucet tap circle +๐Ÿ”ž Underage 18 drink pub night minor circle +๐Ÿ“ต No Mobile Phones iphone mute circle +โ— Exclamation heavy_exclamation_mark danger surprise punctuation wow warning +โ• Grey Exclamation surprise punctuation gray wow warning +โ“ Question doubt confused +โ” Grey Question doubts gray huh confused +โ€ผ๏ธ Bangbang exclamation surprise +โ‰๏ธ Interrobang wat punctuation surprise +๐Ÿ”… Low Brightness sun afternoon warm summer +๐Ÿ”† High Brightness sun light +๐Ÿ”ฑ Trident weapon spear +โšœ Fleur De Lis decorative scout +ใ€ฝ๏ธ Part Alternation Mark graph presentation stats business economics bad +โš ๏ธ Warning exclamation wip alert error problem issue +๐Ÿšธ Children Crossing school warning danger sign driving yellow-diamond +๐Ÿ”ฐ Beginner badge shield +โ™ป๏ธ Recycle arrow environment garbage trash +๐Ÿˆฏ U6307 chinese point green-square kanji +๐Ÿ’น Chart green-square graph presentation stats +โ‡๏ธ Sparkle stars green-square awesome good fireworks +โœณ๏ธ Eight Spoked Asterisk star sparkle green-square +โŽ Negative Squared Cross Mark x green-square no deny +โœ… White Check Mark green-square ok agree vote election answer tick +๐Ÿ’  Diamond Shape with a Dot Inside jewel blue gem crystal fancy +๐ŸŒ€ Cyclone weather swirl blue cloud vortex spiral whirlpool spin tornado hurricane typhoon +โžฟ Loop tape cassette +๐ŸŒ Globe with Meridians earth international world internet interweb i18n +โ“‚๏ธ M alphabet blue-circle letter +๐Ÿง Atm money sales cash blue-square payment bank +๐Ÿˆ‚๏ธ Sa japanese blue-square katakana +๐Ÿ›‚ Passport Control custom blue-square +๐Ÿ›ƒ Customs passport border blue-square +๐Ÿ›„ Baggage Claim blue-square airport transport +๐Ÿ›… Left Luggage blue-square travel +โ™ฟ Wheelchair blue-square disabled a11y accessibility +๐Ÿšญ No Smoking cigarette blue-square smell smoke +๐Ÿšพ Wc toilet restroom blue-square +๐Ÿ…ฟ๏ธ Parking cars blue-square alphabet letter +๐Ÿšฐ Potable Water blue-square liquid restroom cleaning faucet +๐Ÿšน Mens toilet restroom wc blue-square gender male +๐Ÿšบ Womens purple-square woman female toilet loo restroom gender +๐Ÿšผ Baby Symbol orange-square child +๐Ÿšป Restroom blue-square toilet refresh wc gender +๐Ÿšฎ Put Litter in Its Place blue-square sign human info +๐ŸŽฆ Cinema blue-square record film movie curtain stage theater +๐Ÿ“ถ Signal Strength blue-square reception phone internet connection wifi bluetooth bars +๐Ÿˆ Koko blue-square here katakana japanese destination +๐Ÿ†– Ng blue-square words shape icon +๐Ÿ†— Ok good agree yes blue-square +๐Ÿ†™ Up blue-square above high +๐Ÿ†’ Cool words blue-square +๐Ÿ†• New blue-square words start +๐Ÿ†“ Free blue-square words +๏ธโƒฃ Zero 0 numbers blue-square null 0 +๏ธโƒฃ One blue-square numbers 1 1 +๏ธโƒฃ Two numbers 2 prime blue-square 2 +๏ธโƒฃ Three 3 numbers prime blue-square 3 +๏ธโƒฃ Four 4 numbers blue-square 4 +๏ธโƒฃ Five 5 numbers blue-square prime 5 +๏ธโƒฃ Six 6 numbers blue-square 6 +๏ธโƒฃ Seven 7 numbers blue-square prime 7 +๏ธโƒฃ Eight 8 blue-square numbers 8 +๏ธโƒฃ Nine blue-square numbers 9 9 +๐Ÿ”Ÿ Keycap Ten numbers 10 blue-square +*โƒฃ Asterisk star keycap +โ๏ธ Eject Button blue-square +โ–ถ๏ธ Arrow Forward blue-square right direction play +โธ Pause Button pause blue-square +โญ Next Track Button forward next blue-square +โน Stop Button blue-square +โบ Record Button blue-square +โฏ Play or Pause Button blue-square play pause +โฎ Previous Track Button backward +โฉ Fast Forward blue-square play speed continue +โช Rewind play blue-square +๐Ÿ”€ Twisted Rightwards Arrows blue-square shuffle music random +๐Ÿ” Repeat loop record +๐Ÿ”‚ Repeat One blue-square loop +โ—€๏ธ Arrow Backward blue-square left direction +๐Ÿ”ผ Arrow up Small blue-square triangle direction point forward top +๐Ÿ”ฝ Arrow Down Small blue-square direction bottom +โซ Arrow Double up blue-square direction top +โฌ Arrow Double Down blue-square direction bottom +โžก๏ธ Arrow Right blue-square next +โฌ…๏ธ Arrow Left blue-square previous back +โฌ†๏ธ Arrow up blue-square continue top direction +โฌ‡๏ธ Arrow Down blue-square direction bottom +โ†—๏ธ Arrow Upper Right blue-square point direction diagonal northeast +โ†˜๏ธ Arrow Lower Right blue-square direction diagonal southeast +โ†™๏ธ Arrow Lower Left blue-square direction diagonal southwest +โ†–๏ธ Arrow Upper Left blue-square point direction diagonal northwest +โ†•๏ธ Arrow up Down blue-square direction way vertical +โ†”๏ธ Left Right Arrow shape direction horizontal sideways +๐Ÿ”„ Arrows Counterclockwise blue-square sync cycle +โ†ช๏ธ Arrow Right Hook blue-square return rotate direction +โ†ฉ๏ธ Leftwards Arrow with Hook back return blue-square undo enter +โคด๏ธ Arrow Heading up blue-square direction top +โคต๏ธ Arrow Heading Down blue-square direction bottom +#๏ธโƒฃ Hash symbol blue-square twitter +โ„น๏ธ Information Source blue-square alphabet letter +๐Ÿ”ค Abc blue-square alphabet +๐Ÿ”ก Abcd blue-square alphabet +๐Ÿ”  Capital Abcd alphabet words blue-square +๐Ÿ”ฃ Symbols blue-square music note ampersand percent glyphs characters +๐ŸŽต Musical Note score tone sound +๐ŸŽถ Notes music score +ใ€ฐ๏ธ Wavy Dash draw line moustache mustache squiggle scribble +โžฐ Curly Loop scribble draw shape squiggle +โœ”๏ธ Heavy Check Mark ok nike answer yes tick +๐Ÿ”ƒ Arrows Clockwise sync cycle round repeat +โž• Heavy Plus Sign math calculation addition more increase +โž– Heavy Minus Sign math calculation subtract less +โž— Heavy Division Sign divide math calculation +โœ–๏ธ Heavy Multiplication X math calculation +โ™พ Infinity forever +๐Ÿ’ฒ Heavy Dollar Sign money sales payment currency buck +๐Ÿ’ฑ Currency Exchange money sales dollar travel +ยฉ๏ธ Copyright ip license circle law legal +ยฎ๏ธ Registered alphabet circle +โ„ข๏ธ Tm trademark brand law legal +๐Ÿ”š End words arrow +๐Ÿ”™ Back arrow words return +๐Ÿ”› On arrow words +๐Ÿ” Top words blue-square +๐Ÿ”œ Soon arrow words +โ˜‘๏ธ Ballot Box with Check ok agree confirm black-square vote election yes tick +๐Ÿ”˜ Radio Button input old music circle +โšช White Circle shape round +โšซ Black Circle shape button round +๐Ÿ”ด Red Circle shape error danger +๐Ÿ”ต Large Blue Circle shape icon button +๐Ÿ”ธ Small Orange Diamond shape jewel gem +๐Ÿ”น Small Blue Diamond shape jewel gem +๐Ÿ”ถ Large Orange Diamond shape jewel gem +๐Ÿ”ท Large Blue Diamond shape jewel gem +๐Ÿ”บ Small Red Triangle shape direction up top +โ–ช๏ธ Black Small Square shape icon +โ–ซ๏ธ White Small Square shape icon +โฌ› Black Large Square shape icon button +โฌœ White Large Square shape icon stone button +๐Ÿ”ป Small Red Triangle Down shape direction bottom +โ—ผ๏ธ Black Medium Square shape button icon +โ—ป๏ธ White Medium Square shape stone icon +โ—พ Black Medium Small Square icon shape button +โ—ฝ White Medium Small Square shape stone icon button +๐Ÿ”ฒ Black Square Button shape input frame +๐Ÿ”ณ White Square Button shape input +๐Ÿ”ˆ Speaker sound volume silence broadcast +๐Ÿ”‰ Sound volume speaker broadcast +๐Ÿ”Š Loud Sound volume noise noisy speaker broadcast +๐Ÿ”‡ Mute sound volume silence quiet +๐Ÿ“ฃ Mega sound speaker volume +๐Ÿ“ข Loudspeaker volume sound +๐Ÿ”” Bell sound notification christmas xmas chime +๐Ÿ”• No Bell sound volume mute quiet silent +๐Ÿƒ Black Joker poker cards game play magic +๐Ÿ€„ Mahjong game play chinese kanji +โ™ ๏ธ Spades poker cards suits magic +โ™ฃ๏ธ Clubs poker cards magic suits +โ™ฅ๏ธ Hearts poker cards magic suits +โ™ฆ๏ธ Diamonds poker cards magic suits +๐ŸŽด Flower Playing Cards game sunset red +๐Ÿ’ญ Thought Balloon bubble cloud speech thinking dream +๐Ÿ—ฏ Right Anger Bubble caption speech thinking mad +๐Ÿ’ฌ Speech Balloon bubble words message talk chatting +๐Ÿ—จ Left Speech Bubble words message talk chatting +๐Ÿ• Clock1 time late early schedule +๐Ÿ•‘ Clock2 time late early schedule +๐Ÿ•’ Clock3 time late early schedule +๐Ÿ•“ Clock4 time late early schedule +๐Ÿ•” Clock5 time late early schedule +๐Ÿ•• Clock6 time late early schedule dawn dusk +๐Ÿ•– Clock7 time late early schedule +๐Ÿ•— Clock8 time late early schedule +๐Ÿ•˜ Clock9 time late early schedule +๐Ÿ•™ Clock10 time late early schedule +๐Ÿ•š Clock11 time late early schedule +๐Ÿ•› Clock12 time noon midnight midday late early schedule +๐Ÿ•œ Clock130 time late early schedule +๐Ÿ• Clock230 time late early schedule +๐Ÿ•ž Clock330 time late early schedule +๐Ÿ•Ÿ Clock430 time late early schedule +๐Ÿ•  Clock530 time late early schedule +๐Ÿ•ก Clock630 time late early schedule +๐Ÿ•ข Clock730 time late early schedule +๐Ÿ•ฃ Clock830 time late early schedule +๐Ÿ•ค Clock930 time late early schedule +๐Ÿ•ฅ Clock1030 time late early schedule +๐Ÿ•ฆ Clock1130 time late early schedule +๐Ÿ•ง Clock1230 time late early schedule +๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan af flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฝ Aland Islands ร…land islands flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฑ Albania al flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria dz flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ธ American Samoa american ws flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra ad flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ด Angola ao flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฎ Anguilla ai flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ถ Antarctica aq flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua Barbuda antigua barbuda flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ท Argentina ar flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฒ Armenia am flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ผ Aruba aw flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡บ Australia au flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡น Austria at flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan az flag nation country banner +๐Ÿ‡ง๐Ÿ‡ธ Bahamas bs flag nation country banner +๐Ÿ‡ง๐Ÿ‡ญ Bahrain bh flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh bd flag nation country banner +๐Ÿ‡ง๐Ÿ‡ง Barbados bb flag nation country banner +๐Ÿ‡ง๐Ÿ‡พ Belarus by flag nation country banner +๐Ÿ‡ง๐Ÿ‡ช Belgium be flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฟ Belize bz flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฏ Benin bj flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฒ Bermuda bm flag nation country banner +๐Ÿ‡ง๐Ÿ‡น Bhutan bt flag nation country banner +๐Ÿ‡ง๐Ÿ‡ด Bolivia bo flag nation country banner +๐Ÿ‡ง๐Ÿ‡ถ Caribbean Netherlands bonaire flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฆ Bosnia Herzegovina bosnia herzegovina flag nation country banner +๐Ÿ‡ง๐Ÿ‡ผ Botswana bw flag nation country banner +๐Ÿ‡ง๐Ÿ‡ท Brazil br flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ด British Indian Ocean Territory british indian ocean territory flag nation country banner +๐Ÿ‡ป๐Ÿ‡ฌ British Virgin Islands british virgin islands bvi flag nation country banner +๐Ÿ‡ง๐Ÿ‡ณ Brunei bn darussalam flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria bg flag nation country banner +๐Ÿ‡ง๐Ÿ‡ซ Burkina Faso burkina faso flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฎ Burundi bi flag nation country banner +๐Ÿ‡จ๐Ÿ‡ป Cape Verde cabo verde flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ญ Cambodia kh flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฒ Cameroon cm flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฆ Canada ca flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡จ Canary Islands canary islands flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡พ Cayman Islands cayman islands flag nation country banner +๐Ÿ‡จ๐Ÿ‡ซ Central African Republic central african republic flag nation country banner +๐Ÿ‡น๐Ÿ‡ฉ Chad td flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฑ Chile flag nation country banner +๐Ÿ‡จ๐Ÿ‡ณ Cn china chinese prc flag country nation banner +๐Ÿ‡จ๐Ÿ‡ฝ Christmas Island christmas island flag nation country banner +๐Ÿ‡จ๐Ÿ‡จ Cocos Islands cocos keeling islands flag nation country banner +๐Ÿ‡จ๐Ÿ‡ด Colombia co flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros km flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฌ Congo Brazzaville congo flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฉ Congo Kinshasa congo democratic republic flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands cook islands flag nation country banner +๐Ÿ‡จ๐Ÿ‡ท Costa Rica costa rica flag nation country banner +๐Ÿ‡ญ๐Ÿ‡ท Croatia hr flag nation country banner +๐Ÿ‡จ๐Ÿ‡บ Cuba cu flag nation country banner +๐Ÿ‡จ๐Ÿ‡ผ Curacao curaรงao flag nation country banner +๐Ÿ‡จ๐Ÿ‡พ Cyprus cy flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic cz flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark dk flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti dj flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica dm flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic dominican republic flag nation country banner +๐Ÿ‡ช๐Ÿ‡จ Ecuador ec flag nation country banner +๐Ÿ‡ช๐Ÿ‡ฌ Egypt eg flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ป El Salvador el salvador flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea equatorial gn flag nation country banner +๐Ÿ‡ช๐Ÿ‡ท Eritrea er flag nation country banner +๐Ÿ‡ช๐Ÿ‡ช Estonia ee flag nation country banner +๐Ÿ‡ช๐Ÿ‡น Ethiopia et flag nation country banner +๐Ÿ‡ช๐Ÿ‡บ Eu european union flag banner +๐Ÿ‡ซ๐Ÿ‡ฐ Falkland Islands falkland islands malvinas flag nation country banner +๐Ÿ‡ซ๐Ÿ‡ด Faroe Islands faroe islands flag nation country banner +๐Ÿ‡ซ๐Ÿ‡ฏ Fiji fj flag nation country banner +๐Ÿ‡ซ๐Ÿ‡ฎ Finland fi flag nation country banner +๐Ÿ‡ซ๐Ÿ‡ท Fr banner flag nation france french country +๐Ÿ‡ฌ๐Ÿ‡ซ French Guiana french guiana flag nation country banner +๐Ÿ‡ต๐Ÿ‡ซ French Polynesia french polynesia flag nation country banner +๐Ÿ‡น๐Ÿ‡ซ French Southern Territories french southern territories flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฆ Gabon ga flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฒ Gambia gm flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ช Georgia ge flag nation country banner +๐Ÿ‡ฉ๐Ÿ‡ช De german nation flag country banner +๐Ÿ‡ฌ๐Ÿ‡ญ Ghana gh flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฎ Gibraltar gi flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ท Greece gr flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฑ Greenland gl flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada gd flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe gp flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡บ Guam gu flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡น Guatemala gt flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ฌ Guernsey gg flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ณ Guinea gn flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ผ Guinea Bissau gw bissau flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡พ Guyana gy flag nation country banner +๐Ÿ‡ญ๐Ÿ‡น Haiti ht flag nation country banner +๐Ÿ‡ญ๐Ÿ‡ณ Honduras hn flag nation country banner +๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong hong kong flag nation country banner +๐Ÿ‡ญ๐Ÿ‡บ Hungary hu flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ธ Iceland is flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ณ India in flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ท Iran iran, islamic republic flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ถ Iraq iq flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ช Ireland ie flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ฒ Isle of Man isle man flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡ฑ Israel il flag nation country banner +๐Ÿ‡ฎ๐Ÿ‡น It italy flag nation country banner +๐Ÿ‡จ๐Ÿ‡ฎ Cote Divoire ivory coast flag nation country banner +๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica jm flag nation country banner +๐Ÿ‡ฏ๐Ÿ‡ต Jp japanese nation flag country banner +๐Ÿ‡ฏ๐Ÿ‡ช Jersey je flag nation country banner +๐Ÿ‡ฏ๐Ÿ‡ด Jordan jo flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan kz flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ช Kenya ke flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati ki flag nation country banner +๐Ÿ‡ฝ๐Ÿ‡ฐ Kosovo xk flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait kw flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan kg flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ฆ Laos lao democratic republic flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ป Latvia lv flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ง Lebanon lb flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho ls flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ท Liberia lr flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡พ Libya ly flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein li flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡น Lithuania lt flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg lu flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ด Macau macao flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฐ Macedonia macedonia, flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฌ Madagascar mg flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ผ Malawi mw flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡พ Malaysia my flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ป Maldives mv flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฑ Mali ml flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡น Malta mt flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands marshall islands flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ถ Martinique mq flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ท Mauritania mr flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡บ Mauritius mu flag nation country banner +๐Ÿ‡พ๐Ÿ‡น Mayotte yt flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico mx flag nation country banner +๐Ÿ‡ซ๐Ÿ‡ฒ Micronesia micronesia, federated states flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฉ Moldova moldova, republic flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡จ Monaco mc flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ณ Mongolia mn flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ช Montenegro me flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ธ Montserrat ms flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco ma flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique mz flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar mm flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ฆ Namibia na flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ท Nauru nr flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ต Nepal np flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands nl flag nation country banner +๐Ÿ‡ณ๐Ÿ‡จ New Caledonia new caledonia flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand new zealand flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua ni flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ช Niger ne flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria flag nation country banner +๐Ÿ‡ณ๐Ÿ‡บ Niue nu flag nation country banner +๐Ÿ‡ณ๐Ÿ‡ซ Norfolk Island norfolk island flag nation country banner +๐Ÿ‡ฒ๐Ÿ‡ต Northern Mariana Islands northern mariana islands flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ต North Korea north korea nation flag country banner +๐Ÿ‡ณ๐Ÿ‡ด Norway no flag nation country banner +๐Ÿ‡ด๐Ÿ‡ฒ Oman om_symbol flag nation country banner +๐Ÿ‡ต๐Ÿ‡ฐ Pakistan pk flag nation country banner +๐Ÿ‡ต๐Ÿ‡ผ Palau pw flag nation country banner +๐Ÿ‡ต๐Ÿ‡ธ Palestinian Territories palestine palestinian territories flag nation country banner +๐Ÿ‡ต๐Ÿ‡ฆ Panama pa flag nation country banner +๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea papua new guinea flag nation country banner +๐Ÿ‡ต๐Ÿ‡พ Paraguay py flag nation country banner +๐Ÿ‡ต๐Ÿ‡ช Peru pe flag nation country banner +๐Ÿ‡ต๐Ÿ‡ญ Philippines ph flag nation country banner +๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands pitcairn flag nation country banner +๐Ÿ‡ต๐Ÿ‡ฑ Poland pl flag nation country banner +๐Ÿ‡ต๐Ÿ‡น Portugal pt flag nation country banner +๐Ÿ‡ต๐Ÿ‡ท Puerto Rico puerto rico flag nation country banner +๐Ÿ‡ถ๐Ÿ‡ฆ Qatar qa flag nation country banner +๐Ÿ‡ท๐Ÿ‡ช Reunion rรฉunion flag nation country banner +๐Ÿ‡ท๐Ÿ‡ด Romania ro flag nation country banner +๐Ÿ‡ท๐Ÿ‡บ Ru russian federation flag nation country banner +๐Ÿ‡ท๐Ÿ‡ผ Rwanda rw flag nation country banner +๐Ÿ‡ง๐Ÿ‡ฑ St Barthelemy saint barthรฉlemy flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ญ St Helena saint helena ascension tristan cunha flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ณ St Kitts Nevis saint kitts nevis flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡จ St Lucia saint lucia flag nation country banner +๐Ÿ‡ต๐Ÿ‡ฒ St Pierre Miquelon saint pierre miquelon flag nation country banner +๐Ÿ‡ป๐Ÿ‡จ St Vincent Grenadines saint vincent grenadines flag nation country banner +๐Ÿ‡ผ๐Ÿ‡ธ Samoa ws flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฒ San Marino san marino flag nation country banner +๐Ÿ‡ธ๐Ÿ‡น Sao Tome Principe sao tome principe flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ณ Senegal sn flag nation country banner +๐Ÿ‡ท๐Ÿ‡ธ Serbia rs flag nation country banner +๐Ÿ‡ธ๐Ÿ‡จ Seychelles sc flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฑ Sierra Leone sierra leone flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฌ Singapore sg flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฝ Sint Maarten sint maarten dutch flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia sk flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia si flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands solomon islands flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ด Somalia so flag nation country banner +๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa south africa flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ธ South Georgia South Sandwich Islands south georgia sandwich islands flag nation country banner +๐Ÿ‡ฐ๐Ÿ‡ท Kr south korea nation flag country banner +๐Ÿ‡ธ๐Ÿ‡ธ South Sudan south sd flag nation country banner +๐Ÿ‡ช๐Ÿ‡ธ Es spain flag nation country banner +๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka sri lanka flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฉ Sudan sd flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ท Suriname sr flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ฟ Swaziland sz flag nation country banner +๐Ÿ‡ธ๐Ÿ‡ช Sweden se flag nation country banner +๐Ÿ‡จ๐Ÿ‡ญ Switzerland ch flag nation country banner +๐Ÿ‡ธ๐Ÿ‡พ Syria syrian arab republic flag nation country banner +๐Ÿ‡น๐Ÿ‡ผ Taiwan tw flag nation country banner +๐Ÿ‡น๐Ÿ‡ฏ Tajikistan tj flag nation country banner +๐Ÿ‡น๐Ÿ‡ฟ Tanzania tanzania, united republic flag nation country banner +๐Ÿ‡น๐Ÿ‡ญ Thailand th flag nation country banner +๐Ÿ‡น๐Ÿ‡ฑ Timor Leste timor leste flag nation country banner +๐Ÿ‡น๐Ÿ‡ฌ Togo tg flag nation country banner +๐Ÿ‡น๐Ÿ‡ฐ Tokelau tk flag nation country banner +๐Ÿ‡น๐Ÿ‡ด Tonga to flag nation country banner +๐Ÿ‡น๐Ÿ‡น Trinidad Tobago trinidad tobago flag nation country banner +๐Ÿ‡น๐Ÿ‡ณ Tunisia tn flag nation country banner +๐Ÿ‡น๐Ÿ‡ท Tr turkey flag nation country banner +๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan flag nation country banner +๐Ÿ‡น๐Ÿ‡จ Turks Caicos Islands turks caicos islands flag nation country banner +๐Ÿ‡น๐Ÿ‡ป Tuvalu flag nation country banner +๐Ÿ‡บ๐Ÿ‡ฌ Uganda ug flag nation country banner +๐Ÿ‡บ๐Ÿ‡ฆ Ukraine ua flag nation country banner +๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates united arab emirates flag nation country banner +๐Ÿ‡ฌ๐Ÿ‡ง Uk united kingdom great britain northern ireland flag nation country banner british UK english england union jack +๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ England flag english +๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ Scotland flag scottish +๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ Wales flag welsh +๐Ÿ‡บ๐Ÿ‡ธ Us united states america flag nation country banner +๐Ÿ‡ป๐Ÿ‡ฎ Us Virgin Islands virgin islands us flag nation country banner +๐Ÿ‡บ๐Ÿ‡พ Uruguay uy flag nation country banner +๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan uz flag nation country banner +๐Ÿ‡ป๐Ÿ‡บ Vanuatu vu flag nation country banner +๐Ÿ‡ป๐Ÿ‡ฆ Vatican City vatican city flag nation country banner +๐Ÿ‡ป๐Ÿ‡ช Venezuela ve bolivarian republic flag nation country banner +๐Ÿ‡ป๐Ÿ‡ณ Vietnam viet nam flag nation country banner +๐Ÿ‡ผ๐Ÿ‡ซ Wallis Futuna wallis futuna flag nation country banner +๐Ÿ‡ช๐Ÿ‡ญ Western Sahara western sahara flag nation country banner +๐Ÿ‡พ๐Ÿ‡ช Yemen ye flag nation country banner +๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia zm flag nation country banner +๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe zw flag nation country banner +๐Ÿ‡บ๐Ÿ‡ณ United Nations un flag banner +๐Ÿดโ€โ˜ ๏ธ Pirate Flag skull crossbones flag banner diff --git a/home-manager/data/gtk2-base16.nix b/home-manager/data/gtk2-base16.nix new file mode 100644 index 0000000..8d53371 --- /dev/null +++ b/home-manager/data/gtk2-base16.nix @@ -0,0 +1,23 @@ +name: base16: + +'' + gtk-color-scheme = "bg_color:#${base16."base00"}\nfg_color:#${ + base16."base05" + }\nbase_color:#${base16."base00"}\ntext_color:#${ + base16."base05" + }\nselected_bg_color:#${base16."base02"}\nselected_fg_color:#${ + base16."base05" + }\ntooltip_bg_color:#${base16."base00"}\ntooltip_fg_color:#${ + base16."base04" + }\ntitlebar_bg_color:#${base16."base00"}\ntitlebar_fg_color:#${ + base16."base0D" + }\nmenubar_bg_color:#${base16."base00"}\nmenubar_fg_color:#${ + base16."base0D" + }\ntoolbar_bg_color:#${base16."base00"}\ntoolbar_fg_color:#${ + base16."base0A" + }\nmenu_bg_color:#${base16."base00"}\nmenu_fg_color:#${ + base16."base05" + }\npanel_bg_color:#${base16."base00"}\npanel_fg_color:#${ + base16."base0B" + }\nlink_color:#${base16."base09"}" +'' diff --git a/home-manager/data/kitty-base16.nix b/home-manager/data/kitty-base16.nix new file mode 100644 index 0000000..0980ba7 --- /dev/null +++ b/home-manager/data/kitty-base16.nix @@ -0,0 +1,38 @@ +name: base16: + +'' + # Base16 ${name} - kitty color config + # Scheme generated by ezpcusr in Nix + background #${base16."base00"} + foreground #${base16."base05"} + selection_background #${base16."base05"} + selection_foreground #${base16."base00"} + url_color #${base16."base04"} + cursor #${base16."base05"} + active_border_color #${base16."base03"} + inactive_border_color #${base16."base01"} + active_tab_background #${base16."base00"} + active_tab_foreground #${base16."base05"} + inactive_tab_background #${base16."base01"} + inactive_tab_foreground #${base16."base04"} + + # normal + color0 #${base16."base00"} + color1 #${base16."base08"} + color2 #${base16."base0B"} + color3 #${base16."base0A"} + color4 #${base16."base0D"} + color5 #${base16."base0E"} + color6 #${base16."base0C"} + color7 #${base16."base05"} + + # bright + color8 #${base16."base03"} + color9 #${base16."base09"} + color10 #${base16."base01"} + color11 #${base16."base02"} + color12 #${base16."base04"} + color13 #${base16."base06"} + color14 #${base16."base0F"} + color15 #${base16."base05"} +'' diff --git a/home-manager/data/nixos_circlejerk.png b/home-manager/data/nixos_circlejerk.png new file mode 100644 index 0000000000000000000000000000000000000000..c6389f11081cd6599daf2bc7aa4a919b0ea0d17f GIT binary patch literal 7111 zcmV;&8#v^NP)D?8&pX| zK~#9!?Ol0r8|QWZeTy3e!TY``>auRxk}TPhC{d?nUG~Ir?Md1+P1BjyjqO-~6wk}JgZppGGOY))nph$|Rc!(E>`~3RHVu4*?0qg=KNU?n* zh``?a{r0`@{oeP!w}etkF$skb5^>#Ryk+HN22l(!LP*s0{}1E@0x=pu{B@HFPzL{p zg#$2}8NP2G;AHlZcBdEL|L;q%*gXKK{~!BTt7cI9%{j=+(j{zCe{;SMKFR{+qws&I zU>T)=4;0g~wb=4N2INBN@lpKGfsS4qrw?Es zAz*Ux`j1*h@Ysy> z$!A*c-m|0rOm`$32LL#8`5tcEF(q`K_0!U1X_wbWajaWOw^;ym=(*HlKId z&}(*2E+8odb{=Yj!{v=`uDm|HUEd6^H-2kho}s}5dGgG2$FK`mdhC+7KiOi2)#ZzE zFBFFwO_K}AOSgw`;rf82ZEv=Y;Pl1bgwD67$_TYWo_#*iJOZc37jwH_iyNPHTBAI* zoQ0ui9&q4h6!Uvu0qLU@?;Y!aSF-7%c)PwOruIhjLNoPBEG;w0+Slap;&iJere!(Y zXc9NWJOKG}q;Xiry(a)9r4(cNApqu7rOCReL6Z~jA8$+Oyh}?{kfBq^I`7#w3kGeT zh{wF%XG8O#QxbsOx>U6S#Q%_ugQg}0$P}#-Pt}yjx*@yMi(L&Z37vO# zz80nFYFYc-=(FR_kTY!gg-$E(Sv``pkduW)dgQ07CKvr!K0gOjOH$>Tx-0i^wRt%1 zb1DeInyE%GGM*qG1&%hE1^t@I;l;H&;19i;pt{O9`FJG55d8J#N?GABkC)=@ z`ewK#c$1N&Bu$OE1@h=fm&t{T-9fW{yvYoQ+ban`?#IeXBMfTA9wWM zYvn}-|9GgyAD@j+QZ)>gm&-HjBX%!N-!bFREmOE2M$kg8LDx)8gG!OyK>V1~kI+wc zx*A)S7s|TG{$U69o=l96EGpI`OE2L8;`M{)+AZiZxg-I|{hXewLuHl*$!^zi8OGYU zv_Li;*?X!TeS`5wNz@90nyS>;Ao9TRQQo2$00MwYK~OW*i18Q{8y6t;S_Ph2R|ZDL z9lJd~y!qj6BoZT;o~=bymL_IYrfz)+>eiP;?FYqvE-f=i)B4E*BmgX#orMP~OZD1>D9iI-2yJVHo@fYiPG!Opc0mtgbr z_1r@4h=K2*l>LpM`J@1p48gzu!!j%{PsOqdWBgi3gO;UcTAHlr(YW`K3WXx@0RXSp zi{I{RiUY*NWXlVO;@;Qe_2GAWu3-Te?UB(B1{U&`&nwiUL}omfFD|zaN6+_)w(qF( zNdCb+9#7!Y(QC!A3w`7E6z+e0V_f?+whrLrXC3~oK&WilG_bXAifTc3L$ce>bzF$_c+<#-8b z4ks;LR-E|!p5TzX4!6VR&y$sV?6}C->5KQ!++|4&wFr&0?WN-YfIY9)upqv+CIIHX zpRB{apRNZ0?0bDf!Viwa<-u=1xB`>S1*4XUsfD1dS6sKL9RJ?XhT%8^`CcEz&O>cs z!*jiZ4(vPKHTqtwm})zmUi|TB$C#Qu4$Qr;)%dyN5o~?&2)4XtSKv9i(#5(7X0sM}P|dYfK~^rk$NOTKg6`-4|^|TT9z6GX=-8r7Xo12rgGFCXhrRTR)7LGdhBQyNehWZ zH{NMzi@4tI^kUcH_JHFfRfyZ|j<|jtZ7?AuZOmG_t3iv_fKB;;&e)hdJINWT(wQgHX00mCdoJ`Cu)W^Kt0h0?a z{rpnEp@}Ai*;@Q!$D+{#k`E>)QV%{_5_*AS84Me?d-1EYeQ@y|5gNrqqkvJXz_%aG zgEmSap8|N}&rLXev0w7FeDI&kCAYOCqB2&%HTOI4Nz;fwI>B{GH0b?Pz~^J9!NI?7 zT7e!l4~*R`r*xeHOUn#6#ZA(Qmb>bg5r-FNTFh8IE%LD3tu`~xUKx;eE#H6RqV(Xx zc!k$oUW%hPhS2Aqu|z3Ad7$|?aD4~>tyB<|}W*z`$;Az%~$;~)BZ zxXOrp#bfp?hH7?=)|9ncFN+L8a0Dw z)|JZRk;%^XqLkv~Z4+#PU_0@vVV7kOM^l%&L|EbCq7DX z{MIl$-r#Zeoa#dVusp80X;}gCGBp!Bi|($;h09$w@m?VUphX!P%rDj_-EtHfRhSc? z6*NY8k@eQ@4m)wFi%lcx8*<{nnI2i^%*)i`@ka_qH$*oUG~&oD6Uz%pBpx9IlOY5( zGtwm!?$MU&DkC&15>X2w;Hv%*T$|Y+Pi=?WrkGl!FY*5!{Ct$V^l2^C@TeK7pCC)oe^BPKER7n#0GO_xe-feXT^1$ zNdwa9p*Sg+d&pDC2->MuDo{NwIr9sn$)eH}WThx$0_gKmWa^ceSER?T!)^XyJ~om> zqs`<3ORb(+R{}+xnRrP9@@%V_9rg(WEi#~s%MHlXkAHD4m4Y?zfwYh?09g~QX~5>eg?6iWoQ;YsAV8W{J!=P z00`vi?tZ0OFeDagZl9cg?3|Ul^uEDH)9ma#>M*HNY zsxYr8g$E!4-xrn|;C8t2t?koU5MMeD&=4>=HRhSy;yfK{7Ud>rip3Cp7uAOegM6L7pXq6F{J8iHyJOL%ss~D`BVZ_gO-SmTa zOh8Mvy>tQ~K`^)PI2qs@c83=~e(R?H_DP@(xP)hpONTx8gy5l>8Cd;bPOy)p6ll0@ zMu*8A_uPljb+rfEgdRbN)NLw9-Q(qcFoOq}Tc}4-ni>;TQq&BpryH^F%fY~C&B_^R z$TI4&^}9!Tw?cUqC3Ci9+xJG4%=z*7DA!Q!!XxnTm-n50)B`XH89&SnGoTVFg9SkICnDbpW3_84#)rmw=$9T1q5J4&h0A!^o@lbIJ?iZPo zqs5kmnaI&IyoN^*)R-E^YGF`2X+-S|OJfOP1v?LQKzY8?&I5&rhm*pzlebMo?c{ip za2-EGyY^rkKq&|TR#v9UuDmgxLI|+9!hm1zZVcigRl^7sHXH>g2*BT;1Cx*_+RaL1 zyBW%`5;kKDXzjr^0hpX-e&6A^?`n%Tb(nGDv+hv>g!;`b`<;k94D9}VbIb0pUq z*GKWYFHOPfhp{Be_*$T>34q#$cHuf6xV81|SUc4Kh1G^1zVQ)znS@};ydr$>8xM{9 zRPJc9Q#ZU`TvG%)4a>u&UC4W9Qn@-em$|81_l@bIjlG zyMZ|`J{q+;$an~)z`G62usi*^xPH?ZYBKq=#0VkyyC-L0^+Wk%dTq)?UH--a7w!zZ z#e?lU4EbhtN|pv0DvI}y-UbK(Axt1*P6$C~j|B~%c3{)8k_iRmjXT3Qd$}jXabf!~ z0xHTMrxd4R#r)hcr&b9K__@3kr?~K*1iDh&&;b?0pt>Rj9~^JS(1?QtkuV?(;ni{_ zc>icKh9?jmaeI7tr@o1$8xkWl1i;rfRmGjYku)H`=yssr=8ZsC!~tDcq=m&~$C0z` zAcO&77(al7rFTv6h9p0^Pgxl>4np7Tug!d4fxX_8_yXJ8R(Q5Z#SN-jXBm7}Jkpeoc z5`VG2B6)%QxH^3Rr`v3B#Hu03Gq;>0bgg+1U)<;mnqk7Z)g;U%ce#Do)zF-j_hv+s z-6!r~z~qn>q1m#c3^^Ivi4A1ehzHmDWTe3pHftLImM>04*!0A?gU@UrshEf#f=&^BGaZ<07iANicwOAoXNf-iDm+N7-v!?jq8{2sR z5>WsNSW`;@>}qI+)9o7gmBURjdq*=m&f zIjYTO!%ug9838~JLSY|!x6g`$XF8J(;>BD2IDe&^tuqj)f)zamI%`TMmdwdX`nAg9 zkq!?_H{^&$NwBg^k6Pg>hHS!Aw=STqzDtFOMVJP2*L7& z1*m?oVBCOIN(GVgKBaoAMMfoN=BT3{(`vP0*3>Lqxit_nEt2O53G|d;>kEgl*I&ZS z?WKq?5g{R2I==`@=NCoi$6{f;7>z>!S;KR3ri4nK#ACDBu;-=)H~U?ZE?`ZiK4Jsg zY&PiidJqD9bg^UFr>k(!>Z#`YP8(F2m-Csmj0ac9U4XN)oQn@OHO~m6Cbl1ylEUV(cJ&V9}s4; z8o9Vgi&f>iK>Gj?U?AITv=YZCF&MM^>uxz6UWkMS(fF>X^zjYCsYKtSr|F-jP_I zroyzW_-Ebvd=zJ|^z%SO#K3x>JoamA(012?GgtbtdIHa>l-i~%N_9{&V^9pjYPCjG z>GB*S{-vfUKsQ!bB=$<7i%lkcd2>*7fH`zzWZQRx)s^?WT7#`CDo~KBL`9C~z6G)( zU4_a_l_ZBVF8aX-lRFsqyMNe%H!qE#DpQ4Qef$o`u*r;n{?!$K=`a$-3k;5oaCOgF zFjwQinQqi9DZpFj`jM;wueuH5$zgIMVC*oTE{u1_>K6q-N{P~2EEX6H2El_8-2`i_RV^;!WD!w&Mi;cH0cxxYLh$#d>_%X-k?W@l!zg$=PybZk`6& zIwsJD27@82ony7HWDkKmV5o#TJ+igY;>HKZJLCf>pnvTD?;Y>Lx3^c|W}gF2ZgLHY z9bcooMcnK#!PI#v+UW=J2T`<93<{l+;0cj>3z6D8VIap!{(Pbnc84blfZ|%n0m!ds zbFpz4w>vEO+M-O@MJjv;Q#DA$2Cn1&@+KOEo77TK5F5LPqkl{@Tw4TuOP#+lh?{ptz)!RiW~vi}4=_WNj)d;N_jET**7#m`#F@D7ua)k& za1Kv)`uJ5O85ba}4z@gWpjbuNR0G0`%*D>M3*Fyh_2B(e-Em(Z2WH)4Ws=`Y$AKA^ zc|Tc!q!c)CrUwHl5%=?hy$S4#9UtLoKjf%a@@_ZduEtE$q zdIuah_-SHuM|uWF@S~%hsI708ROA8xKJ9YA>ZX$q$YWphqrJx#13=-Ff%((ZF}FhK z(m%c|7e<*yY7d_6#h^KU4M|ZEJY1sX1p{J>%}sH((=oY#9J08v|Kn~^M+Tt~`W+dK zT7j=r7laLfWTvX{*wS2C=XW~2c<*FSLiaE)PmSypc_TcRdRnvrv>LZ~XJz)j{0qw8ni8Dh0u#r8-%I*FMV9kx4^8EOxIfLZ6%R_6F1lyPA^J)&n7O$5kOh=|5ygV#4n=*N>Q3!vAlMEgN8D)Hp1 z0_fDyFYTe}M$DQbFC=!m!-BKdhU2Fr1gI|8%1XyrQL05UULuqfAoDWRShFZ6$Q7dy z`l?a`md%nj>+0#60(liPD6spZ-k^nuL$dV>%*m5BwXY&wiOTfkj1(r#Yu&gc7ulJb zsDxgrBzS67f#mmK6=!R)a)G>85Dg4F(QrO7IDs002ovPDHLkV1jKkqs#yR literal 0 HcmV?d00001 diff --git a/home-manager/data/rofi-base16.nix b/home-manager/data/rofi-base16.nix new file mode 100644 index 0000000..3c1674d --- /dev/null +++ b/home-manager/data/rofi-base16.nix @@ -0,0 +1,150 @@ +name: base16: + +'' + /** + * Base16 {{scheme-name}} ROFI Color theme + * + * Authors + * Scheme: {{scheme-author}} + * Template: Jordi Pakey-Rodriguez (https://github.com/0xdec), Andrea Scarpino (https://github.com/ilpianista) + */ + + * { + red: #${base16."base08"}; + blue: #${base16."base0D"}; + lightfg: #${base16."base06"}; + lightbg: #${base16."base01"}; + foreground: #${base16."base05"}; + background: #${base16."base00"}; + background-color: #${base16."base00"}; + separatorcolor: @foreground; + border-color: @foreground; + selected-normal-foreground: @lightbg; + selected-normal-background: @lightfg; + selected-active-foreground: @background; + selected-active-background: @blue; + selected-urgent-foreground: @background; + selected-urgent-background: @red; + normal-foreground: @foreground; + normal-background: @background; + active-foreground: @blue; + active-background: @background; + urgent-foreground: @red; + urgent-background: @background; + alternate-normal-foreground: @foreground; + alternate-normal-background: @lightbg; + alternate-active-foreground: @blue; + alternate-active-background: @lightbg; + alternate-urgent-foreground: @red; + alternate-urgent-background: @lightbg; + spacing: 2; + } + window { + background-color: @background; + border: 1; + padding: 5; + } + mainbox { + border: 0; + padding: 0; + } + 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: @separatorcolor; + spacing: 2px ; + scrollbar: true; + padding: 2px 0px 0px ; + } + element { + border: 0; + padding: 1px ; + } + element normal.normal { + background-color: @normal-background; + text-color: @normal-foreground; + } + element normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; + } + element normal.active { + background-color: @active-background; + text-color: @active-foreground; + } + element selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; + } + element selected.urgent { + background-color: @selected-urgent-background; + text-color: @selected-urgent-foreground; + } + element selected.active { + background-color: @selected-active-background; + text-color: @selected-active-foreground; + } + element alternate.normal { + background-color: @alternate-normal-background; + text-color: @alternate-normal-foreground; + } + element alternate.urgent { + background-color: @alternate-urgent-background; + text-color: @alternate-urgent-foreground; + } + element alternate.active { + background-color: @alternate-active-background; + text-color: @alternate-active-foreground; + } + scrollbar { + width: 4px ; + border: 0; + handle-color: @normal-foreground; + handle-width: 8px ; + padding: 0; + } + sidebar { + border: 2px dash 0px 0px ; + border-color: @separatorcolor; + } + button { + spacing: 0; + text-color: @normal-foreground; + } + button selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; + } + inputbar { + spacing: 0px; + text-color: @normal-foreground; + padding: 1px ; + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; + } + case-indicator { + spacing: 0; + text-color: @normal-foreground; + } + entry { + spacing: 0; + text-color: @normal-foreground; + } + prompt { + spacing: 0; + text-color: @normal-foreground; + } + textbox-prompt-colon { + expand: false; + str: ":"; + margin: 0px 0.3000em 0.0000em 0.0000em ; + text-color: inherit; + } +'' diff --git a/home-manager/data/vim-base16.nix b/home-manager/data/vim-base16.nix new file mode 100644 index 0000000..5224d01 --- /dev/null +++ b/home-manager/data/vim-base16.nix @@ -0,0 +1,401 @@ +name: base16: + +'' + " GUI color definitions + let s:gui00 = "${base16.base00}" + let g:base16_gui00 = "${base16.base00}" + let s:gui01 = "${base16.base01}" + let g:base16_gui01 = "${base16.base01}" + let s:gui02 = "${base16.base02}" + let g:base16_gui02 = "${base16.base02}" + let s:gui03 = "${base16.base03}" + let g:base16_gui03 = "${base16.base03}" + let s:gui04 = "${base16.base04}" + let g:base16_gui04 = "${base16.base04}" + let s:gui05 = "${base16.base05}" + let g:base16_gui05 = "${base16.base05}" + let s:gui06 = "${base16.base06}" + let g:base16_gui06 = "${base16.base06}" + let s:gui07 = "${base16.base07}" + let g:base16_gui07 = "${base16.base07}" + let s:gui08 = "${base16.base08}" + let g:base16_gui08 = "${base16.base08}" + let s:gui09 = "${base16.base09}" + let g:base16_gui09 = "${base16.base09}" + let s:gui0A = "${base16.base0A}" + let g:base16_gui0A = "${base16.base0A}" + let s:gui0B = "${base16.base0B}" + let g:base16_gui0B = "${base16.base0B}" + let s:gui0C = "${base16.base0C}" + let g:base16_gui0C = "${base16.base0C}" + let s:gui0D = "${base16.base0D}" + let g:base16_gui0D = "${base16.base0D}" + let s:gui0E = "${base16.base0E}" + let g:base16_gui0E = "${base16.base0E}" + let s:gui0F = "${base16.base0F}" + let g:base16_gui0F = "${base16.base0F}" + + " Terminal color definitions + let s:cterm00 = "00" + let g:base16_cterm00 = "00" + let s:cterm03 = "08" + let g:base16_cterm03 = "08" + let s:cterm05 = "07" + let g:base16_cterm05 = "07" + let s:cterm07 = "15" + let g:base16_cterm07 = "15" + let s:cterm08 = "01" + let g:base16_cterm08 = "01" + let s:cterm0A = "03" + let g:base16_cterm0A = "03" + let s:cterm0B = "02" + let g:base16_cterm0B = "02" + let s:cterm0C = "06" + let g:base16_cterm0C = "06" + let s:cterm0D = "04" + let g:base16_cterm0D = "04" + let s:cterm0E = "05" + let g:base16_cterm0E = "05" + if exists("base16colorspace") && base16colorspace == "256" + let s:cterm01 = "18" + let g:base16_cterm01 = "18" + let s:cterm02 = "19" + let g:base16_cterm02 = "19" + let s:cterm04 = "20" + let g:base16_cterm04 = "20" + let s:cterm06 = "21" + let g:base16_cterm06 = "21" + let s:cterm09 = "16" + let g:base16_cterm09 = "16" + let s:cterm0F = "17" + let g:base16_cterm0F = "17" + else + let s:cterm01 = "10" + let g:base16_cterm01 = "10" + let s:cterm02 = "11" + let g:base16_cterm02 = "11" + let s:cterm04 = "12" + let g:base16_cterm04 = "12" + let s:cterm06 = "13" + let g:base16_cterm06 = "13" + let s:cterm09 = "09" + let g:base16_cterm09 = "09" + let s:cterm0F = "14" + let g:base16_cterm0F = "14" + endif + + " Neovim terminal colours + if has("nvim") + let g:terminal_color_0 = "#${base16.base00}" + let g:terminal_color_1 = "#${base16.base08}" + let g:terminal_color_2 = "#${base16.base0B}" + let g:terminal_color_3 = "#${base16.base0A}" + let g:terminal_color_4 = "#${base16.base0D}" + let g:terminal_color_5 = "#${base16.base0E}" + let g:terminal_color_6 = "#${base16.base0C}" + let g:terminal_color_7 = "#${base16.base05}" + let g:terminal_color_8 = "#${base16.base03}" + let g:terminal_color_9 = "#${base16.base08}" + let g:terminal_color_10 = "#${base16.base0B}" + let g:terminal_color_11 = "#${base16.base0A}" + let g:terminal_color_12 = "#${base16.base0D}" + let g:terminal_color_13 = "#${base16.base0E}" + let g:terminal_color_14 = "#${base16.base0C}" + let g:terminal_color_15 = "#${base16.base07}" + let g:terminal_color_background = g:terminal_color_0 + let g:terminal_color_foreground = g:terminal_color_5 + if &background == "light" + let g:terminal_color_background = g:terminal_color_7 + let g:terminal_color_foreground = g:terminal_color_2 + endif + elseif has("terminal") + let g:terminal_ansi_colors = [ + \ "#${base16.base00}", + \ "#${base16.base08}", + \ "#${base16.base0B}", + \ "#${base16.base0A}", + \ "#${base16.base0D}", + \ "#${base16.base0E}", + \ "#${base16.base0C}", + \ "#${base16.base05}", + \ "#${base16.base03}", + \ "#${base16.base08}", + \ "#${base16.base0B}", + \ "#${base16.base0A}", + \ "#${base16.base0D}", + \ "#${base16.base0E}", + \ "#${base16.base0C}", + \ "#${base16.base07}", + \ ] + endif + + " Theme setup + hi clear + syntax reset + let g:colors_name = "base16" + + " Highlighting function + " Optional variables are attributes and guisp + function! g:Base16hi(group, guifg, guibg, ctermfg, ctermbg, ...) + let l:attr = get(a:, 1, "") + let l:guisp = get(a:, 2, "") + + if a:guifg != "" + exec "hi " . a:group . " guifg=#" . a:guifg + endif + if a:guibg != "" + exec "hi " . a:group . " guibg=#" . a:guibg + endif + if a:ctermfg != "" + exec "hi " . a:group . " ctermfg=" . a:ctermfg + endif + if a:ctermbg != "" + exec "hi " . a:group . " ctermbg=" . a:ctermbg + endif + if l:attr != "" + exec "hi " . a:group . " gui=" . l:attr . " cterm=" . l:attr + endif + if l:guisp != "" + exec "hi " . a:group . " guisp=#" . l:guisp + endif + endfunction + + + fun hi(group, guifg, guibg, ctermfg, ctermbg, attr, guisp) + call g:Base16hi(a:group, a:guifg, a:guibg, a:ctermfg, a:ctermbg, a:attr, a:guisp) + endfun + + " Vim editor colors + call hi("Normal", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") + call hi("Bold", "", "", "", "", "bold", "") + call hi("Debug", s:gui08, "", s:cterm08, "", "", "") + call hi("Directory", s:gui0D, "", s:cterm0D, "", "", "") + call hi("Error", s:gui00, s:gui08, s:cterm00, s:cterm08, "", "") + call hi("ErrorMsg", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") + call hi("Exception", s:gui08, "", s:cterm08, "", "", "") + call hi("FoldColumn", s:gui0C, s:gui01, s:cterm0C, s:cterm01, "", "") + call hi("Folded", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") + call hi("IncSearch", s:gui01, s:gui09, s:cterm01, s:cterm09, "none", "") + call hi("Italic", "", "", "", "", "none", "") + call hi("Macro", s:gui08, "", s:cterm08, "", "", "") + call hi("MatchParen", "", s:gui03, "", s:cterm03, "", "") + call hi("ModeMsg", s:gui0B, "", s:cterm0B, "", "", "") + call hi("MoreMsg", s:gui0B, "", s:cterm0B, "", "", "") + call hi("Question", s:gui0D, "", s:cterm0D, "", "", "") + call hi("Search", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "", "") + call hi("Substitute", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "none", "") + call hi("SpecialKey", s:gui03, "", s:cterm03, "", "", "") + call hi("TooLong", s:gui08, "", s:cterm08, "", "", "") + call hi("Underlined", s:gui08, "", s:cterm08, "", "", "") + call hi("Visual", "", s:gui02, "", s:cterm02, "", "") + call hi("VisualNOS", s:gui08, "", s:cterm08, "", "", "") + call hi("WarningMsg", s:gui08, "", s:cterm08, "", "", "") + call hi("WildMenu", s:gui08, s:gui0A, s:cterm08, "", "", "") + call hi("Title", s:gui0D, "", s:cterm0D, "", "none", "") + call hi("Conceal", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") + call hi("Cursor", s:gui00, s:gui05, s:cterm00, s:cterm05, "", "") + call hi("NonText", s:gui03, "", s:cterm03, "", "", "") + call hi("LineNr", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") + call hi("SignColumn", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") + call hi("StatusLine", s:gui04, s:gui02, s:cterm04, s:cterm02, "none", "") + call hi("StatusLineNC", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") + call hi("VertSplit", s:gui02, s:gui02, s:cterm02, s:cterm02, "none", "") + call hi("ColorColumn", "", s:gui01, "", s:cterm01, "none", "") + call hi("CursorColumn", "", s:gui01, "", s:cterm01, "none", "") + call hi("CursorLine", "", s:gui01, "", s:cterm01, "none", "") + call hi("CursorLineNr", s:gui04, s:gui01, s:cterm04, s:cterm01, "", "") + call hi("QuickFixLine", "", s:gui01, "", s:cterm01, "none", "") + call hi("PMenu", s:gui05, s:gui01, s:cterm05, s:cterm01, "none", "") + call hi("PMenuSel", s:gui01, s:gui05, s:cterm01, s:cterm05, "", "") + call hi("TabLine", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") + call hi("TabLineFill", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") + call hi("TabLineSel", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "none", "") + + " Standard syntax highlighting + call hi("Boolean", s:gui09, "", s:cterm09, "", "", "") + call hi("Character", s:gui08, "", s:cterm08, "", "", "") + call hi("Comment", s:gui03, "", s:cterm03, "", "", "") + call hi("Conditional", s:gui0E, "", s:cterm0E, "", "", "") + call hi("Constant", s:gui09, "", s:cterm09, "", "", "") + call hi("Define", s:gui0E, "", s:cterm0E, "", "none", "") + call hi("Delimiter", s:gui0F, "", s:cterm0F, "", "", "") + call hi("Float", s:gui09, "", s:cterm09, "", "", "") + call hi("Function", s:gui0D, "", s:cterm0D, "", "", "") + call hi("Identifier", s:gui08, "", s:cterm08, "", "none", "") + call hi("Include", s:gui0D, "", s:cterm0D, "", "", "") + call hi("Keyword", s:gui0E, "", s:cterm0E, "", "", "") + call hi("Label", s:gui0A, "", s:cterm0A, "", "", "") + call hi("Number", s:gui09, "", s:cterm09, "", "", "") + call hi("Operator", s:gui05, "", s:cterm05, "", "none", "") + call hi("PreProc", s:gui0A, "", s:cterm0A, "", "", "") + call hi("Repeat", s:gui0A, "", s:cterm0A, "", "", "") + call hi("Special", s:gui0C, "", s:cterm0C, "", "", "") + call hi("SpecialChar", s:gui0F, "", s:cterm0F, "", "", "") + call hi("Statement", s:gui08, "", s:cterm08, "", "", "") + call hi("StorageClass", s:gui0A, "", s:cterm0A, "", "", "") + call hi("String", s:gui0B, "", s:cterm0B, "", "", "") + call hi("Structure", s:gui0E, "", s:cterm0E, "", "", "") + call hi("Tag", s:gui0A, "", s:cterm0A, "", "", "") + call hi("Todo", s:gui0A, s:gui01, s:cterm0A, s:cterm01, "", "") + call hi("Type", s:gui0A, "", s:cterm0A, "", "none", "") + call hi("Typedef", s:gui0A, "", s:cterm0A, "", "", "") + + " C highlighting + call hi("cOperator", s:gui0C, "", s:cterm0C, "", "", "") + call hi("cPreCondit", s:gui0E, "", s:cterm0E, "", "", "") + + " C# highlighting + call hi("csClass", s:gui0A, "", s:cterm0A, "", "", "") + call hi("csAttribute", s:gui0A, "", s:cterm0A, "", "", "") + call hi("csModifier", s:gui0E, "", s:cterm0E, "", "", "") + call hi("csType", s:gui08, "", s:cterm08, "", "", "") + call hi("csUnspecifiedStatement", s:gui0D, "", s:cterm0D, "", "", "") + call hi("csContextualStatement", s:gui0E, "", s:cterm0E, "", "", "") + call hi("csNewDecleration", s:gui08, "", s:cterm08, "", "", "") + + " CSS highlighting + call hi("cssBraces", s:gui05, "", s:cterm05, "", "", "") + call hi("cssClassName", s:gui0E, "", s:cterm0E, "", "", "") + call hi("cssColor", s:gui0C, "", s:cterm0C, "", "", "") + + " Diff highlighting + call hi("DiffAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") + call hi("DiffChange", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") + call hi("DiffDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") + call hi("DiffText", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") + call hi("DiffAdded", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") + call hi("DiffFile", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") + call hi("DiffNewFile", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") + call hi("DiffLine", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") + call hi("DiffRemoved", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") + + " Git highlighting + call hi("gitcommitOverflow", s:gui08, "", s:cterm08, "", "", "") + call hi("gitcommitSummary", s:gui0B, "", s:cterm0B, "", "", "") + call hi("gitcommitComment", s:gui03, "", s:cterm03, "", "", "") + call hi("gitcommitUntracked", s:gui03, "", s:cterm03, "", "", "") + call hi("gitcommitDiscarded", s:gui03, "", s:cterm03, "", "", "") + call hi("gitcommitSelected", s:gui03, "", s:cterm03, "", "", "") + call hi("gitcommitHeader", s:gui0E, "", s:cterm0E, "", "", "") + call hi("gitcommitSelectedType", s:gui0D, "", s:cterm0D, "", "", "") + call hi("gitcommitUnmergedType", s:gui0D, "", s:cterm0D, "", "", "") + call hi("gitcommitDiscardedType", s:gui0D, "", s:cterm0D, "", "", "") + call hi("gitcommitBranch", s:gui09, "", s:cterm09, "", "bold", "") + call hi("gitcommitUntrackedFile", s:gui0A, "", s:cterm0A, "", "", "") + call hi("gitcommitUnmergedFile", s:gui08, "", s:cterm08, "", "bold", "") + call hi("gitcommitDiscardedFile", s:gui08, "", s:cterm08, "", "bold", "") + call hi("gitcommitSelectedFile", s:gui0B, "", s:cterm0B, "", "bold", "") + + " GitGutter highlighting + call hi("GitGutterAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") + call hi("GitGutterChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") + call hi("GitGutterDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") + call hi("GitGutterChangeDelete", s:gui0E, s:gui01, s:cterm0E, s:cterm01, "", "") + + " HTML highlighting + call hi("htmlBold", s:gui0A, "", s:cterm0A, "", "", "") + call hi("htmlItalic", s:gui0E, "", s:cterm0E, "", "", "") + call hi("htmlEndTag", s:gui05, "", s:cterm05, "", "", "") + call hi("htmlTag", s:gui05, "", s:cterm05, "", "", "") + + " JavaScript highlighting + call hi("javaScript", s:gui05, "", s:cterm05, "", "", "") + call hi("javaScriptBraces", s:gui05, "", s:cterm05, "", "", "") + call hi("javaScriptNumber", s:gui09, "", s:cterm09, "", "", "") + " pangloss/vim-javascript highlighting + call hi("jsOperator", s:gui0D, "", s:cterm0D, "", "", "") + call hi("jsStatement", s:gui0E, "", s:cterm0E, "", "", "") + call hi("jsReturn", s:gui0E, "", s:cterm0E, "", "", "") + call hi("jsThis", s:gui08, "", s:cterm08, "", "", "") + call hi("jsClassDefinition", s:gui0A, "", s:cterm0A, "", "", "") + call hi("jsFunction", s:gui0E, "", s:cterm0E, "", "", "") + call hi("jsFuncName", s:gui0D, "", s:cterm0D, "", "", "") + call hi("jsFuncCall", s:gui0D, "", s:cterm0D, "", "", "") + call hi("jsClassFuncName", s:gui0D, "", s:cterm0D, "", "", "") + call hi("jsClassMethodType", s:gui0E, "", s:cterm0E, "", "", "") + call hi("jsRegexpString", s:gui0C, "", s:cterm0C, "", "", "") + call hi("jsGlobalObjects", s:gui0A, "", s:cterm0A, "", "", "") + call hi("jsGlobalNodeObjects", s:gui0A, "", s:cterm0A, "", "", "") + call hi("jsExceptions", s:gui0A, "", s:cterm0A, "", "", "") + call hi("jsBuiltins", s:gui0A, "", s:cterm0A, "", "", "") + + " Mail highlighting + call hi("mailQuoted1", s:gui0A, "", s:cterm0A, "", "", "") + call hi("mailQuoted2", s:gui0B, "", s:cterm0B, "", "", "") + call hi("mailQuoted3", s:gui0E, "", s:cterm0E, "", "", "") + call hi("mailQuoted4", s:gui0C, "", s:cterm0C, "", "", "") + call hi("mailQuoted5", s:gui0D, "", s:cterm0D, "", "", "") + call hi("mailQuoted6", s:gui0A, "", s:cterm0A, "", "", "") + call hi("mailURL", s:gui0D, "", s:cterm0D, "", "", "") + call hi("mailEmail", s:gui0D, "", s:cterm0D, "", "", "") + + " Markdown highlighting + call hi("markdownCode", s:gui0B, "", s:cterm0B, "", "", "") + call hi("markdownError", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") + call hi("markdownCodeBlock", s:gui0B, "", s:cterm0B, "", "", "") + call hi("markdownHeadingDelimiter", s:gui0D, "", s:cterm0D, "", "", "") + + " NERDTree highlighting + call hi("NERDTreeDirSlash", s:gui0D, "", s:cterm0D, "", "", "") + call hi("NERDTreeExecFile", s:gui05, "", s:cterm05, "", "", "") + + " PHP highlighting + call hi("phpMemberSelector", s:gui05, "", s:cterm05, "", "", "") + call hi("phpComparison", s:gui05, "", s:cterm05, "", "", "") + call hi("phpParent", s:gui05, "", s:cterm05, "", "", "") + call hi("phpMethodsVar", s:gui0C, "", s:cterm0C, "", "", "") + + " Python highlighting + call hi("pythonOperator", s:gui0E, "", s:cterm0E, "", "", "") + call hi("pythonRepeat", s:gui0E, "", s:cterm0E, "", "", "") + call hi("pythonInclude", s:gui0E, "", s:cterm0E, "", "", "") + call hi("pythonStatement", s:gui0E, "", s:cterm0E, "", "", "") + + " Ruby highlighting + call hi("rubyAttribute", s:gui0D, "", s:cterm0D, "", "", "") + call hi("rubyConstant", s:gui0A, "", s:cterm0A, "", "", "") + call hi("rubyInterpolationDelimiter", s:gui0F, "", s:cterm0F, "", "", "") + call hi("rubyRegexp", s:gui0C, "", s:cterm0C, "", "", "") + call hi("rubySymbol", s:gui0B, "", s:cterm0B, "", "", "") + call hi("rubyStringDelimiter", s:gui0B, "", s:cterm0B, "", "", "") + + " SASS highlighting + call hi("sassidChar", s:gui08, "", s:cterm08, "", "", "") + call hi("sassClassChar", s:gui09, "", s:cterm09, "", "", "") + call hi("sassInclude", s:gui0E, "", s:cterm0E, "", "", "") + call hi("sassMixing", s:gui0E, "", s:cterm0E, "", "", "") + call hi("sassMixinName", s:gui0D, "", s:cterm0D, "", "", "") + + " Signify highlighting + call hi("SignifySignAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") + call hi("SignifySignChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") + call hi("SignifySignDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") + + " Spelling highlighting + call hi("SpellBad", "", "", "", "", "undercurl", s:gui08) + call hi("SpellLocal", "", "", "", "", "undercurl", s:gui0C) + call hi("SpellCap", "", "", "", "", "undercurl", s:gui0D) + call hi("SpellRare", "", "", "", "", "undercurl", s:gui0E) + + " Startify highlighting + call hi("StartifyBracket", s:gui03, "", s:cterm03, "", "", "") + call hi("StartifyFile", s:gui07, "", s:cterm07, "", "", "") + call hi("StartifyFooter", s:gui03, "", s:cterm03, "", "", "") + call hi("StartifyHeader", s:gui0B, "", s:cterm0B, "", "", "") + call hi("StartifyNumber", s:gui09, "", s:cterm09, "", "", "") + call hi("StartifyPath", s:gui03, "", s:cterm03, "", "", "") + call hi("StartifySection", s:gui0E, "", s:cterm0E, "", "", "") + call hi("StartifySelect", s:gui0C, "", s:cterm0C, "", "", "") + call hi("StartifySlash", s:gui03, "", s:cterm03, "", "", "") + call hi("StartifySpecial", s:gui03, "", s:cterm03, "", "", "") + + " Java highlighting + call hi("javaOperator", s:gui0D, "", s:cterm0D, "", "", "") + + " Remove functions + delf hi + + " Remove color variables + unlet s:gui00 s:gui01 s:gui02 s:gui03 s:gui04 s:gui05 s:gui06 s:gui07 s:gui08 s:gui09 s:gui0A s:gui0B s:gui0C s:gui0D s:gui0E s:gui0F + unlet s:cterm00 s:cterm01 s:cterm02 s:cterm03 s:cterm04 s:cterm05 s:cterm06 s:cterm07 s:cterm08 s:cterm09 s:cterm0A s:cterm0B s:cterm0C s:cterm0D s:cterm0E s:cterm0F +'' diff --git a/home-manager/data/waybar-base16.nix b/home-manager/data/waybar-base16.nix new file mode 100644 index 0000000..55c0dbb --- /dev/null +++ b/home-manager/data/waybar-base16.nix @@ -0,0 +1,117 @@ +name: base16: + +'' + window#waybar { + background-color: #${base16."base00"}; + border-bottom: 3px solid #${base16."base01"}; + color: #${base16."base0B"}; + } + + #workspaces button { + background-color: #${base16."base00"}; + color: #${base16."base0B"}; + border-bottom: 3px solid #${base16."base01"}; + } + + #workspaces button:hover { + background: #${base16."base00"}; + border-bottom: 3px solid #${base16."base01"}; + } + + #workspaces button.focused { + background-color: #${base16."base02"}; + border-bottom: 3px solid #${base16."base01"}; + } + + #clock { + background-color: #${base16."base01"}; + color: #${base16."base0B"}; + } + + @keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } + } + + #battery { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #battery.charging { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + } + + #cpu { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #memory { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #backlight { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #network { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #network.disconnected { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #pulseaudio { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #pulseaudio.muted { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #temperature { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #temperature.critical { + background-color: #${base16."base0D"}; + color: #${base16."base00"}; + } + + #mpd { + background-color: #${base16."base0E"}; + color: #${base16."base00"}; + } + + #mpd.disconnected { + background-color: #${base16."base08"}; + color: #${base16."base00"}; + } + + #mpd.stopped { + background-color: #${base16."base00"}; + color: #${base16."base0B"}; + } + + #mpd.paused { + background-color: #${base16."base09"}; + color: #${base16."base00"}; + } +'' diff --git a/home-manager/data/waybar.nix b/home-manager/data/waybar.nix new file mode 100644 index 0000000..ef36543 --- /dev/null +++ b/home-manager/data/waybar.nix @@ -0,0 +1,111 @@ +{ + layer = "top"; + height = 30; + modules-left = [ "sway/workspaces" "sway/mode" "custom/media" ]; + modules-center = [ "sway/window" ]; + modules-right = [ + "mpd" + "idle_inhibitor" + "pulseaudio" + "network" + "cpu" + "memory" + "temperature" + "backlight" + "battery" + "battery#bat2" + "clock" + "tray" + ]; + "sway/mode" = { format = ''{}''; }; + mpd = { + format = + "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ๏€"; + format-disconnected = "Disconnected ๏€"; + format-stopped = + "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ๏€"; + unknown-tag = "N/A"; + interval = 2; + consume-icons = { on = "๏ƒ„ "; }; + random-icons = { + off = ''๏ด ''; + on = "๏ด "; + }; + repeat-icons = { on = "๏€ž "; }; + single-icons = { on = "๏€ž1 "; }; + state-icons = { + paused = "๏Œ"; + playing = "๏‹"; + }; + tooltip-format = "MPD (connected)"; + tooltip-format-disconnected = "MPD (disconnected)"; + }; + tray = { spacing = 10; }; + clock = { + tooltip-format = "{:%Y-%m-%d | %H:%M}"; + format-alt = "{:%Y-%m-%d}"; + }; + cpu = { + format = "{usage}% ๏‹›"; + tooltip = false; + }; + memory = { format = "{}% ๏ƒ‰"; }; + temperature = { + critical-threshold = 80; + + format = "{temperatureC}ยฐC {icon}"; + format-icons = [ "๏ซ" "๏‹‰" "๏ฉ" ]; + }; + backlight = { + format = "{percent}% {icon}"; + format-icons = [ "๏†…" "๏„‘" ]; + }; + battery = { + states = { + warning = 30; + critical = 15; + }; + format = "{capacity}% {icon}"; + format-charging = "{capacity}% ๏—ง"; + format-plugged = "{capacity}% ๏‡ฆ"; + format-alt = "{time} {icon}"; + format-icons = [ "๏‰„" "๏‰ƒ" "๏‰‚" "๏‰" "๏‰€" ]; + }; + "battery#bat2" = { bat = "BAT2"; }; + network = { + format-wifi = "{essid} ({signalStrength}%) ๏‡ซ"; + format-ethernet = "{ifname}: {ipaddr}/{cidr} ๏ž–"; + format-linked = "{ifname} (No IP) ๏ž–"; + format-disconnected = "Disconnected โš "; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + pulseaudio = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon}๏Š” {format_source}"; + format-bluetooth-muted = "๏šฉ {icon}๏Š” {format_source}"; + format-muted = "๏šฉ {format_source}"; + format-source = "{volume}% ๏„ฐ"; + format-source-muted = "๏„ฑ"; + format-icons = { + headphones = "๏€ฅ"; + handsfree = "๏–"; + headset = "๏–"; + phone = "๏‚•"; + portable = "๏‚•"; + car = "๏†น"; + default = [ "๏€ฆ" "๏€ง" "๏€จ" ]; + }; + on-click = "pavucontrol"; + }; + "custom/media" = { + format = "{icon} {}"; + return-type = "json"; + max-length = 40; + format-icons = { + spotify = "๏†ผ"; + default = "๐ŸŽœ"; + }; + escape = true; + exec = "$HOME/.config/waybar/mediaplayer.py 2> /dev/null"; + }; +} diff --git a/home-manager/modules/colors.nix b/home-manager/modules/colors.nix new file mode 100644 index 0000000..9c26139 --- /dev/null +++ b/home-manager/modules/colors.nix @@ -0,0 +1,370 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.colors; + + pow = n: i: if i == 1 then n else if i == 0 then 1 else n * pow n (i - 1); + + alf = [ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" ]; + fil = c: lib.imap0 (n: x: if (lib.toLower x) == c then n else null) alf; + fin = c: builtins.elemAt (builtins.filter (x: x != null) (fil c)) 0; + add = l: lib.foldr ({ n, x }: c: (x * (pow 16 n)) + c) 0 (lib.imap0 (n: x: { inherit n x; }) l); + calc = s: add (builtins.map fin (builtins.filter (x: builtins.isString x && builtins.stringLength x == 1) (builtins.split "" s))); + + hexToRgb = c: + let + s' = builtins.match "(..)(..)(..)|(.)(.)(.)" c; + ss = builtins.elemAt s'; + o = if ss 0 == null then 3 else 0; + in + builtins.mapAttrs (_: calc) { + r = ss (0 + o); + g = ss (1 + o); + b = ss (2 + o); + }; +in +{ + options.colors = { + enable = mkEnableOption "Enable automatic colors"; + + i3BarColors = mkOption { + description = "Exported color attrset for i3bar/swaybar"; + default = { }; + }; + + waybarCss = mkOption { + description = "Exported CSS for waybar"; + default = ""; + }; + + base16Rgb = mkOption { + readOnly = true; + type = types.attrsOf (types.attrsOf types.int); + }; + + base16 = mkOption { + readOnly = true; + type = types.attrsOf types.str; + }; + + favColors = mkOption { + description = "Your favourite color scheme"; + default = { }; + type = types.submodule { + options = { + name = mkOption { + type = types.str; + default = "Monokai"; + description = "Name of your color scheme"; + }; + base16 = mkOption { + type = types.attrsOf types.str; + default = { + base00 = "272822"; + base01 = "383830"; + base02 = "49483e"; + base03 = "75715e"; + base04 = "a59f85"; + base05 = "f8f8f2"; + base06 = "f5f4f1"; + base07 = "f9f8f5"; + base08 = "f92672"; + base09 = "fd971f"; + base0A = "f4bf75"; + base0B = "a6e22e"; + base0C = "a1efe4"; + base0D = "66d9ef"; + base0E = "ae81ff"; + base0F = "cc6633"; + }; + description = "BASE16 color scheme"; + }; + }; + }; + }; + }; + + config = + let + i3config = { + config = { + colors = { + background = "#${cfg.favColors.base16.base07}"; + focused = { + border = "#${cfg.favColors.base16.base05}"; + background = "#${cfg.favColors.base16.base0D}"; + text = "#${cfg.favColors.base16.base00}"; + indicator = "#${cfg.favColors.base16.base0D}"; + childBorder = "#${cfg.favColors.base16.base0D}"; + }; + focusedInactive = { + border = "#${cfg.favColors.base16.base01}"; + background = "#${cfg.favColors.base16.base01}"; + text = "#${cfg.favColors.base16.base05}"; + indicator = "#${cfg.favColors.base16.base03}"; + childBorder = "#${cfg.favColors.base16.base01}"; + }; + unfocused = { + border = "#${cfg.favColors.base16.base01}"; + background = "#${cfg.favColors.base16.base00}"; + text = "#${cfg.favColors.base16.base05}"; + indicator = "#${cfg.favColors.base16.base01}"; + childBorder = "#${cfg.favColors.base16.base01}"; + }; + urgent = { + border = "#${cfg.favColors.base16.base08}"; + background = "#${cfg.favColors.base16.base08}"; + text = "#${cfg.favColors.base16.base00}"; + indicator = "#${cfg.favColors.base16.base08}"; + childBorder = "#${cfg.favColors.base16.base08}"; + }; + placeholder = { + border = "#${cfg.favColors.base16.base00}"; + background = "#${cfg.favColors.base16.base00}"; + text = "#${cfg.favColors.base16.base05}"; + indicator = "#${cfg.favColors.base16.base00}"; + childBorder = "#${cfg.favColors.base16.base00}"; + }; + }; + }; + }; + + elementTheme = { + name = "Nix colors 11"; + is_dark = true; + colors = { + "accent-color" = "#${cfg.favColors.base16.base02}"; + "primary-color" = "#${cfg.favColors.base16.base08}"; + "warning-color" = "#${cfg.favColors.base16.base0F}"; + + "sidebar-color" = "#${cfg.favColors.base16.base01}"; + "roomlist-background-color" = "#${cfg.favColors.base16.base00}"; + "roomlist-text-color" = "#${cfg.favColors.base16.base05}"; + "roomlist-text-secondary-color" = "${cfg.favColors.base16.base06}"; + "roomlist-highlights-color" = "#${cfg.favColors.base16.base02}"; + "roomlist-separator-color" = "#${cfg.favColors.base16.base05}"; + + "timeline-background-color" = "#${cfg.favColors.base16.base00}"; + "timeline-text-color" = "#${cfg.favColors.base16.base07}"; + "timeline-text-secondary-color" = "#${cfg.favColors.base16.base05}"; + "timeline-highlights-color" = "#${cfg.favColors.base16.base02}"; + "reaction-row-button-selected-bg-color" = "#${cfg.favColors.base16.base0B}"; + }; + }; + + elementConfig = { + settingDefaults.custom_themes = [ elementTheme ]; + + settingDefaults.theme = "custom-${elementTheme.name}"; + default_theme = "custom-${elementTheme.name}"; + + showLabsSettings = true; + }; + in + mkIf cfg.enable { + # Read only utility attributes + colors.base16 = cfg.favColors.base16; + colors.base16Rgb = builtins.map hexToRgb cfg.favColors.base16; + + # Element + xdg.configFile."Riot/config.json".text = builtins.toJSON elementConfig; + xdg.configFile."Element/config.json".text = builtins.toJSON elementConfig; + xdg.configFile."element_theme.json".text = builtins.toJSON elementTheme; + + # Mako + programs.mako = { + backgroundColor = "#${cfg.favColors.base16.base00}"; + textColor = "#${cfg.favColors.base16.base07}"; + borderColor = "#${cfg.favColors.base16.base08}"; + progressColor = "over #${cfg.favColors.base16.base0D}"; + }; + + # I3/sway + wayland.windowManager.sway = i3config; + xsession.windowManager.i3 = i3config; + colors.i3BarColors = { + background = "#${cfg.favColors.base16.base00}"; + separator = "#${cfg.favColors.base16.base01}"; + statusline = "#${cfg.favColors.base16.base04}"; + + focusedWorkspace = { + border = "#${cfg.favColors.base16.base05}"; + background = "#${cfg.favColors.base16.base0D}"; + text = "#${cfg.favColors.base16.base00}"; + }; + activeWorkspace = { + border = "#${cfg.favColors.base16.base05}"; + background = "#${cfg.favColors.base16.base03}"; + text = "#${cfg.favColors.base16.base00}"; + }; + inactiveWorkspace = { + border = "#${cfg.favColors.base16.base03}"; + background = "#${cfg.favColors.base16.base01}"; + text = "#${cfg.favColors.base16.base05}"; + }; + urgentWorkspace = { + border = "#${cfg.favColors.base16.base08}"; + background = "#${cfg.favColors.base16.base08}"; + text = "#${cfg.favColors.base16.base00}"; + }; + bindingMode = { + border = "#${cfg.favColors.base16.base00}"; + background = "#${cfg.favColors.base16.base0A}"; + text = "#${cfg.favColors.base16.base00}"; + }; + }; + + # Waybar + colors.waybarCss = + "\n" + ( + (import ../data/waybar-base16.nix) + cfg.favColors.name + cfg.base16 + ); + + # Dunst + services.dunst = { + settings = { + global = { + frame_color = "#${cfg.favColors.base16.base09}"; + separator_color = "#${cfg.favColors.base16.base05}"; + }; + + urgency_low = { + background = "#${cfg.favColors.base16.base01}"; + foreground = "#${cfg.favColors.base16.base03}"; + }; + + urgency_normal = { + background = "#${cfg.favColors.base16.base02}"; + foreground = "#${cfg.favColors.base16.base05}"; + }; + + urgency_critical = { + background = "#${cfg.favColors.base16.base08}"; + foreground = "#${cfg.favColors.base16.base06}"; + }; + }; + }; + + # Rofi + programs.rofi = { + theme = ( + pkgs.writeText "rofi-base16-config" + ( + (import ../data/rofi-base16.nix) + cfg.favColors.name + cfg.favColors.base16 + ) + ).outPath; + }; + + # Kitty + programs.kitty.extraConfig = + let + kittyColors = + pkgs.writeText + "favcolors-kitty-${cfg.favColors.name}.conf" + ( + (import ../data/kitty-base16.nix) + cfg.favColors.name + cfg.favColors.base16 + ); + in + '' + include ${kittyColors} + ''; + + # neovim + xdg.configFile."nvim/colors/base16.vim".text = import ../data/vim-base16.nix cfg.favColors.name cfg.favColors.base16; + programs.neovim.extraConfig = '' + colorscheme base16 + set termguicolors + ''; + + # GTK + gtk = { + enable = true; + theme = + let + materia_colors = pkgs.writeText "gtk-generated-colors" '' + BG=${cfg.favColors.base16.base00} + FG=${cfg.favColors.base16.base07} + BTN_BG=${cfg.favColors.base16.base00} + BTN_FG=${cfg.favColors.base16.base07} + MENU_BG=${cfg.favColors.base16.base00} + MENU_FG=${cfg.favColors.base16.base07} + ACCENT_BG=${cfg.favColors.base16.base02} + SEL_BG=${cfg.favColors.base16.base0D} + SEL_FG=${cfg.favColors.base16.base00} + TXT_BG=${cfg.favColors.base16.base00} + TXT_FG=${cfg.favColors.base16.base07} + HDR_BTN_BG=${cfg.favColors.base16.base00} + HDR_BTN_FG=${cfg.favColors.base16.base07} + WM_BORDER_FOCUS=${cfg.favColors.base16.base02} + WM_BORDER_UNFOCUS=${cfg.favColors.base16.base01} + MATERIA_STYLE_COMPACT=True + MATERIA_COLOR_VARIANT=dark + UNITY_DEFAULT_LAUNCHER_STYLE=False + NAME=generated + ''; + + generated-gtk-theme = pkgs.stdenv.mkDerivation { + name = "generated-gtk-theme"; + src = pkgs.materia-theme.src; + buildInputs = with pkgs; [ sassc bc which inkscape optipng ]; + installPhase = '' + HOME=/build + chmod 777 -R . + patchShebangs . + mkdir -p $out/share/themes + substituteInPlace change_color.sh --replace "\$HOME/.themes" "$out/share/themes" + echo "Changing colours:" + ./change_color.sh -o Generated ${materia_colors} + chmod 555 -R . + ''; + }; + in + { + name = "Generated"; + package = generated-gtk-theme; + }; + gtk2.extraConfig = ( + (import ../data/gtk2-base16.nix) + cfg.favColors.name + cfg.favColors.base16 + ); + }; + + # Codium/VSCODE + programs.vscode.userSettings = { + "workbench.colorTheme" = "nix colors"; + }; + + home.file = lib.mkMerge + [ + (mkIf config.programs.vscode.enable { + ".vscode-oss/extensions/base16-1.0.0/themes/nix-colors.json".text = (import ../data/codium-base16.nix) cfg.favColors.name cfg.favColors.base16; + ".vscode-oss/extensions/base16-1.0.0/package.json".text = builtins.toJSON { + name = "nix colors"; + displayName = "Automatic Nix-generated base16 colors"; + version = "1.0.0"; + publisher = "colors"; + author = { + name = "ezpc usr"; + email = "usr@ezpc"; + }; + engines.vscode = "^1.11.1"; + categories = "Themes"; + contributes.themes = [ + { + label = "nix colors"; + uiTheme = "vs-dark"; + path = "./themes/nix-colors.json"; + } + ]; + }; + }) + ]; + }; +} diff --git a/home-manager/modules/default.nix b/home-manager/modules/default.nix new file mode 100644 index 0000000..3699d7b --- /dev/null +++ b/home-manager/modules/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + (lib.mkAliasOptionModule [ "ezpcusr" "favColors" ] [ "colors" "favColors" ]) + (lib.mkAliasOptionModule [ "ezpcusr" "favFont" ] [ "fonts" "favFont" ]) + (lib.mkAliasOptionModule [ "ezpcusr" "waybarCss" ] [ "programs" "waybar" "style" ]) + + ./ezpcusr.nix + ./ezchromium.nix + ./ezcodium.nix + ./colors.nix + ./fonts.nix + ]; +} diff --git a/home-manager/modules/ezchromium.nix b/home-manager/modules/ezchromium.nix new file mode 100644 index 0000000..4c925de --- /dev/null +++ b/home-manager/modules/ezchromium.nix @@ -0,0 +1,128 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.ez.chromium; +in +{ + options.ez.chromium = { + enable = mkEnableOption "Enable simple Chromium config"; + + extensions = mkOption { + description = "List of extensions to be automatically installed"; + type = types.listOf (types.submodule { + options = { + id = mkOption { + description = "ID of the extension on the store"; + type = types.str; + }; + hash = mkOption { + description = "Hash of the extension file"; + type = types.nullOr types.str; + default = null; + }; + name = mkOption { + description = "Name of the extension (in path form)"; + type = types.str; + }; + url = mkOption { + description = "URL of the extension if not on the chrome store"; + type = types.nullOr types.str; + default = null; + }; + }; + } + ); + }; + }; + + config = mkIf cfg.enable { + programs.chromium = { + enable = true; + package = pkgs.ungoogled-chromium.override { + commandLineArgs = "--enable-features=VaapiVideoDecoder"; + }; + }; + + home.file = + let + splitVersion = builtins.splitVersion pkgs.ungoogled-chromium.version; + basicVersion = "${elemAt splitVersion 0}.${elemAt splitVersion 1}"; + + extensionJson = ext: { + name = "${config.xdg.configHome}/chromium/External Extensions/${ext.id}.json"; + value.text = builtins.toJSON (({ + external_version = "0.420.69"; + }) // (if ext.hash == null then { + external_update_url = "https://clients2.google.com/service/update2/crx"; + } else { + external_crx = builtins.fetchurl { + name = "${ext.name}"; + url = if ext.url != null then ext.url else "https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&prodversion=${basicVersion}&x=id%3D${ext.id}%26installsource%3Dondemand%26uc"; + sha256 = ext.hash; + }; + })); + }; + in + listToAttrs (map extensionJson cfg.extensions); + + ez.chromium.extensions = [ + { + id = "plfoiobmoplmhebmdiofljgnbekcdjan"; + hash = "1ml5f3nc6g07idvj85yk2bgkqpgbgd1a78g2zb0vqrmv211vqnzb"; + name = "ruffle"; + url = "https://github.com/ruffle-rs/ruffle/releases/download/nightly-2021-02-21/ruffle_nightly_2021_02_21_extension.zip"; + } + { + id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; + # hash = "0klh5js0bpf21fqasx56kqipsv6dj29fz1jxjl49pwzk16bz8p1v"; + name = "ublock-origin"; + } + { + id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; + # hash = "085ysd0xxp1dpw6q4cngplnj51m1l1k3xkbf433hxrpaxlm0vafr"; + name = "dark-reader"; + } + { + id = "nngceckbapebfimnlniiiahkandclblb"; + # hash = "0gi23wy5a1l22hbln4mfvwa6f6c0cbzbaj9nvv8fkv97d1m5nlca"; + name = "bitwarden"; + } + { + url = "https://github.com/NeverDecaf/chromium-web-store/releases/download/v1.2.3/Chromium.Web.Store.crx"; + id = "ocaahdebbfolfmndjeplogmgcagdmblk"; + hash = "1v1c8q43y2gmsygacvri0cshfjgybxsasaf0c7cxwgnsx2kf98xh"; + name = "chromium-web-store"; + } + { + id = "lanfdkkpgfjfdikkncbnojekcppdebfp"; + # hash = "02dhazdxl1jm6nx8dkxk9dc0l0kqyfypj3sl1vmic1sqgib0nb5v"; + name = "canvas-fingerprint-defend"; + } + { + id = "fhkphphbadjkepgfljndicmgdlndmoke"; + # hash = "05yf2677s2scr3w8f6x93gv83cssy62h4v18gc2yigpgr2y3df7g"; + name = "font-fingerprint-defend"; + } + { + id = "olnbjpaejebpnokblkepbphhembdicik"; + # hash = "088gc2is92nkn5yrjc65657w0vvkkhks371c92ndz6w5mrc39xmw"; + name = "webgl-fingerprint-defend"; + } + { + id = "pcbjiidheaempljdefbdplebgdgpjcbe"; + # hash = "06rirbbp037yd6d3xsrc383k0n2y5rh7j69zax6mpzjx3zyvzkmn"; + name = "audio-fingerprint-defend"; + } + # { + # id = "npeicpdbkakmehahjeeohfdhnlpdklia"; + # hash = "1sfwfa28lrkq3df3r1645vy1qih9qc8x764bc5x2i2hrmg2vb8wp"; + # name = "webrtc-network-limiter"; + # } + { + id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; + # hash = "06acbcwwp3l9c6d178rq6my2pspl9gvqgp8l81al8pbbmwkfyjqv"; + name = "tampermonkey"; + } + ]; + }; +} diff --git a/home-manager/modules/ezcodium.nix b/home-manager/modules/ezcodium.nix new file mode 100644 index 0000000..7fb0670 --- /dev/null +++ b/home-manager/modules/ezcodium.nix @@ -0,0 +1,73 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.ez.codium; +in +{ + options.ez.codium = { + enable = mkEnableOption "Enable simple codium config"; + }; + + config = mkIf cfg.enable { + programs.vscode.package = lib.mkDefault pkgs.vscodium; + programs.vscode.extensions = with pkgs.vscode-extensions; [ vscodevim.vim bbenoist.Nix llvm-org.lldb-vscode ms-python.python ms-vscode-remote.remote-ssh redhat.vscode-yaml skyapps.fish-vscode ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + # programs.vscode.extensions = with pkgs.vscode-extensions; [ vscodevim.vim bbenoist.Nix llvm-org.lldb-vscode matklad.rust-analyzer ms-python.python ms-vscode-remote.remote-ssh redhat.vscode-yaml skyapps.fish-vscode ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "bracket-pair-colorizer"; + publisher = "CoenraadS"; + version = "1.0.61"; + sha256 = "0r3bfp8kvhf9zpbiil7acx7zain26grk133f0r0syxqgml12i652"; + } + { + name = "vscode-direnv"; + publisher = "Rubymaniac"; + version = "0.0.2"; + sha256 = "1gml41bc77qlydnvk1rkaiv95rwprzqgj895kxllqy4ps8ly6nsd"; + } + { + name = "nixpkgs-fmt"; + publisher = "B4dM4n"; + version = "0.0.1"; + sha256 = "1gvjqy54myss4w1x55lnyj2l887xcnxc141df85ikmw1gr9s8gdz"; + } + { + name = "elm-ls-vscode"; + publisher = "Elmtooling"; + version = "1.3.0"; + sha256 = "0h0pibjq1rk7ji4f342vqky2zbq3f4fg1y260rig7y6x3z4007h3"; + } + ]; + + programs.vscode.userSettings = { + "editor.selectionClipboard" = "native"; + "editor.emptySelectionClipboard" = true; + "editor.dragAndDrop" = false; + "editor.renderWhitespace" = "all"; + "editor.tabSize" = 2; + "editor.wordWrap" = "on"; + + "telemetry.enableTelemetry" = false; + "telemetry.enableCrashReporter" = false; + + "window.titleBarStyle" = "native"; + "window.menuBarVisibility" = "toggle"; + + "explorer.confirmDragAndDrop" = false; + + "git.enableSmartCommit" = true; + "git.autofetch" = true; + + "workbench.startupEditor" = "newUntitledFile"; + + "vim.easymotion" = true; + "vim.camelCaseMotion.enable" = true; + "vim.useSystemClipboard" = true; + + "editor.formatOnSave" = true; + + "elmLS.elmPath" = "${pkgs.elmPackages.elm}/bin/elm"; + "elmLS.elmFormatPath" = "${pkgs.elmPackages.elm-format}/bin/elm-format"; + "elmLS.elmAnalyseTrigger" = "change"; + }; + }; +} diff --git a/home-manager/modules/ezpcusr.nix b/home-manager/modules/ezpcusr.nix new file mode 100644 index 0000000..72f0a26 --- /dev/null +++ b/home-manager/modules/ezpcusr.nix @@ -0,0 +1,1006 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.ezpcusr; + + elm-format-working = pkgs.elmPackages.elm-format.overrideAttrs (_: { doCheck = false; }); + + flameshot = pkgs.flameshot.overrideAttrs (super: { + src = builtins.fetchGit { + url = "https://github.com/flameshot-org/flameshot.git"; + rev = "f24bae0a18ae59b5937ceee6d466b928d5f4c65f"; + }; + }); + + swaypkg = pkgs.sway.override { + sway-unwrapped = + pkgs.sway-unwrapped.override { wlroots = pkgs.wlroots; }; + extraSessionCommands = + config.wayland.windowManager.sway.extraSessionCommands; + extraOptions = config.wayland.windowManager.sway.extraOptions; + withBaseWrapper = config.wayland.windowManager.sway.wrapperFeatures.base; + withGtkWrapper = config.wayland.windowManager.sway.wrapperFeatures.gtk; + }; + + selshot = pkgs.writeScript "selshot.sh" ( + if cfg.wayland then '' + #!${pkgs.zsh}/bin/zsh + ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" $1 + '' else '' + #!${pkgs.zsh}/bin/zsh + ${flameshot}/bin/flameshot gui -r > $1 + '' + ); + + selvid = pkgs.writeScript "selvid.sh" '' + #!${pkgs.zsh}/bin/zsh + ${pkgs.wf-recorder}/bin/wf-recorder -g "$(${pkgs.slurp}/bin/slurp)" -f $1 + ''; + + getscrloc = pkgs.writeScript "getscrloc.sh" '' + #!${pkgs.zsh}/bin/zsh + mkdir -p "$HOME/Pictures/Screenshots" + echo "$HOME/Pictures/Screenshots/$(date +%F_%T).''${1:-png}" + ''; + + copyBin = + if cfg.wayland then + "${pkgs.wl-clipboard}/bin/wl-copy" + else + "${pkgs.xclip}/bin/xclip -selection clipboard"; + pasteBin = + if cfg.wayland then + "${pkgs.wl-clipboard}/bin/wl-paste" + else + "${pkgs.xclip}/bin/xclip -selection clipboard -o"; + + # rofiBin = if cfg.wayland then "${pkgs..wofi}/bin/wofi" else "${pkgs.rofi}/bin/rofi"; + rofiBin = "${pkgs.rofi}/bin/rofi"; + + scrsaveclip = pkgs.writeScript "scr-save-clip.sh" '' + #!${pkgs.zsh}/bin/zsh + LOC=$(${getscrloc}) + ${selshot} $LOC + ${copyBin} -t image/png < $LOC + ''; + + scrsaveup = + if cfg.uploadScript != null then + pkgs.writeScript "scr-save-up.sh" '' + #!${pkgs.zsh}/bin/zsh + LOC=$(${getscrloc}) + ${selshot} $LOC + ${cfg.uploadScript} $LOC | xargs echo -n | ${copyBin} + notify-send "Screenshot Uploaded!" + '' + else + null; + + scrvidsaveclip = pkgs.writeScript "scr-vid-save-clip.sh" '' + #!${pkgs.zsh}/bin/zsh + LOC=$(${getscrloc} mp4) + ${selvid} $LOC + ${copyBin} -t video/mp4 < $LOC + ''; + + scrvidsaveup = + if cfg.uploadScript != null then + pkgs.writeScript "scr-vid-save-up.sh" '' + #!${pkgs.zsh}/bin/zsh + LOC=$(${getscrloc} mp4) + ${selvid} $LOC + ${cfg.uploadScript} $LOC | ${pkgs.findutils}/bin/xargs echo -n | ${copyBin} + notify-send "Screen Recording Uploaded!" + '' + else + null; + + scrvidstop = pkgs.writeScript "scr-vid-stop.sh" '' + #!${pkgs.zsh}/bin/zsh + ${pkgs.procps}/bin/pkill -2 wf-recorder + ''; + + um = pkgs.writeScript "update-music.sh" '' + #!${pkgs.bash}/bin/bash + ${pkgs.mpc_cli}/bin/mpc update --wait && ${pkgs.mpc_cli}/bin/mpc clear && ${pkgs.mpc_cli}/bin/mpc ls | ${pkgs.mpc_cli}/bin/mpc add + ''; + + ezDrv = + pkgs.runCommand "ez" + { } + ( + '' + mkdir -p $out/bin + ln -s ${selshot} $out/bin/selshot + ln -s ${selvid} $out/bin/selvid + ln -s ${getscrloc} $out/bin/getscrloc + ln -s ${scrsaveclip} $out/bin/scrsaveclip + ln -s ${scrvidsaveclip} $out/bin/scrvidsaveclip + ln -s ${scrvidstop} $out/bin/scrvidstop + + ln -s ${um} $out/bin/um + '' + ( + if cfg.uploadScript != null then '' + ln -s ${cfg.uploadScript} $out/bin/upload_file + + ln -s ${scrsaveup} $out/bin/scrsaveup + ln -s ${scrvidsaveup} $out/bin/scrvidsaveup + '' else + "" + ) + ); + + # TODO: why wont this work in an overlay + pnpm2nix = + pkgs.callPackage + ( + builtins.fetchGit { + url = "https://github.com/notgne2/pnpm2nix.git"; + rev = "d2863404330c6646800a49e73240e29e3265b594"; + } + ) + { }; + + # mudl = pnpm2nix.mkPnpmPackage { + # src = builtins.fetchGit { + # url = "https://git.wizbos.club/notgne2/mudl.git"; + # rev = "a34af57de345dd6788e2b3cc67c41fe5de62ade6"; + # }; + # }; + + mudl = + let + src = builtins.fetchGit { + url = "https://git.wizbos.club/notgne2/mudl.git"; + rev = "2c1b6545d2f98f0649e5df03c7d86a8d28bb15e5"; + }; + in + pkgs.runCommandNoCC "mudl" { } '' + mkdir -p $out/bin + cp ${src}/index.js $out/bin/mudl + chmod +x $out/bin/mudl + ''; + + rofiMenu = + if cfg.wayland then + "${rofiBin} -show drun -show-icons -run-command 'swaymsg exec -- {cmd}'" + else + "${rofiBin} -show drun -show-icons"; + + swayConfig = { + enable = true; + + config = { + terminal = "kitty"; + + modifier = "Mod4"; + + keybindings = + let + musicRofi = pkgs.writeScript "music-rofi" '' + #!${pkgs.fish}/bin/fish + ${pkgs.mpc_cli}/bin/mpc -f "%position% - %artist% - %album% - %title%" playlist | ${rofiBin} -dmenu -i | ${pkgs.coreutils}/bin/cut -d " " -f 1 | ${pkgs.findutils}/bin/xargs ${pkgs.mpc_cli}/bin/mpc play + ''; + + # ugly stupid way of doing things but im lazy + bwRofi = pkgs.writeScript "bw-rofi" '' + #!${pkgs.bash}/bin/bash + export BW_SESSION="${cfg.bitwardenSession}" + + LIST=$(${pkgs.bitwarden-cli}/bin/bw list items) + USERLIST=$(echo "$LIST" | ${pkgs.jq}/bin/jq -r '.[] | "\(.name) - \(.login.username)"') + + CHOSEN=$(echo "$USERLIST" | ${rofiBin} -dmenu -i) + NUMBER=$(echo "$USERLIST" | grep -n "^$CHOSEN$" | cut -d':' -f1) + NTH=$(expr $NUMBER - 1) + + echo "$LIST" | ${pkgs.jq}/bin/jq -j -r ".[$NTH].login.password" | ${copyBin} + ''; + + # very ugly stupid way of doing things but im still lazy + bwRofiOtp = pkgs.writeScript "bw-rofi-otp" '' + #!${pkgs.bash}/bin/bash + export BW_SESSION="${cfg.bitwardenSession}" + + LIST=$(${pkgs.bitwarden-cli}/bin/bw list items) + USERLIST=$(echo "$LIST" | ${pkgs.jq}/bin/jq -r '.[] | "\(.name) - \(.login.username)"') + + CHOSEN=$(echo "$USERLIST" | ${rofiBin} -dmenu -i) + NUMBER=$(echo "$USERLIST" | grep -n "^$CHOSEN$" | cut -d':' -f1) + NTH=$(expr $NUMBER - 1) + + ID=$(echo "$LIST" | ${pkgs.jq}/bin/jq -j -r ".[$NTH].id") + + ${pkgs.bitwarden-cli}/bin/bw get totp $ID | ${copyBin} + ''; + + # reeeeeeeeeeee ugly + emojiRofi = + let + # emojiTxt = builtins.toFile "emojis.txt" (builtins.readFile ../data/emojis.txt); + emojiTxt = toString ../data/emojis.txt; + in + pkgs.writeScript "rofi-emoji" '' + line=$(${pkgs.coreutils}/bin/cat ${emojiTxt} | ${rofiBin} -dmenu -i) + + ${pkgs.coreutils}/bin/echo ''${line::1} | ${copyBin} + ${pkgs.coreutils}/bin/sleep 0.3 + ${pkgs.xdotool}/bin/xdotool type "''${line::1}" + ''; + + magicMudl = pkgs.writeScript "magic-mudl" '' + #!${pkgs.bash}/bin/bash + SOURCE=$(${pasteBin}) + notify-send "Downloading $SOURCE" + ${mudl}/bin/mudl "$SOURCE" + notify-send "Download complete" + ''; + + configPlace = + if cfg.wayland then + config.wayland.windowManager.sway + else + config.xsession.windowManager.i3; + + alphabet = [ + "${if cfg.wayland then "Ctrl" else "Control"}" + "${if cfg.wayland then "Alt" else "Mod1"}" + "${if cfg.wayland then "Ctrl" else "Control"}+${if cfg.wayland then "Alt" else "Mod1"}" + ]; + char = n: builtins.elemAt alphabet ((n - 1) / 10); + in + lib.mkOptionDefault ( + cfg.keybindings // lib.listToAttrs ( + map + ( + n: { + name = "${configPlace.config.modifier}+${char (n - 10)}+${ + toString (lib.mod n 10) + }"; + value = "workspace ${toString n}"; + } + ) + (lib.lists.range 11 (10 * (builtins.length alphabet) + 10)) + ) + // lib.listToAttrs ( + map + ( + n: { + name = "${configPlace.config.modifier}+Shift+${char (n - 10)}+${ + toString (lib.mod n 10) + }"; + value = "move container to workspace ${toString n}"; + } + ) + (lib.lists.range 11 (10 * (builtins.length alphabet) + 10)) + ) // ( + let + volumeUp = ( + if cfg.haddr != null then + "exec ${pkgs.qt5.qttools.bin}/bin/qdbus --system org.bluez ${cfg.haddr} org.bluez.MediaControl1.VolumeUp || " + else + "exec " + ) + + "${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%"; + volumeDown = ( + if cfg.haddr != null then + "exec ${pkgs.qt5.qttools.bin}/bin/qdbus --system org.bluez ${cfg.haddr} org.bluez.MediaControl1.VolumeDown || " + else + "exec " + ) + + "${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%"; + in + { + "Print" = "exec ${scrsaveclip}"; + "Shift+Print" = + if cfg.uploadScript != null then "exec ${scrsaveup}" else "nop"; + + "${if cfg.wayland then "Ctrl" else "Control"}+Print" = + "exec ${scrvidsaveclip}"; + "${if cfg.wayland then "Ctrl" else "Control"}+${if cfg.wayland then "Alt" else "Mod1" + }+Print" = "exec ${scrvidstop}"; + + "${configPlace.config.modifier}+minus" = volumeDown; + "${configPlace.config.modifier}+equal" = volumeUp; + + "XF86AudioRaiseVolume" = volumeUp; + "XF86AudioLowerVolume" = volumeDown; + "XF86AudioMute" = + "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; + "XF86AudioMicMute" = + "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle"; + + "XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10"; + "XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10"; + "${configPlace.config.modifier}+semicolon" = + "exec ${pkgs.light}/bin/light -U 10"; + "${configPlace.config.modifier}+apostrophe" = + "exec ${pkgs.light}/bin/light -A 10"; + + # Previous/next but change the shuffle/random state before action (and change back afterwards) + "${configPlace.config.modifier}+Shift+bracketright" = + "exec ${pkgs.mpc_cli}/bin/mpc random && ${pkgs.mpc_cli}/bin/mpc next && ${pkgs.mpc_cli}/bin/mpc random"; + "${configPlace.config.modifier}+Shift+bracketleft" = + "exec ${pkgs.mpc_cli}/bin/mpc random && ${pkgs.mpc_cli}/bin/mpc prev && ${pkgs.mpc_cli}/bin/mpc random"; + "Shift+XF86AudioNext" = + "exec ${pkgs.mpc_cli}/bin/mpc random && ${pkgs.mpc_cli}/bin/mpc next && ${pkgs.mpc_cli}/bin/mpc random"; + + # Previous/next + "${configPlace.config.modifier}+bracketright" = + "exec ${pkgs.mpc_cli}/bin/mpc next"; + "${configPlace.config.modifier}+bracketleft" = + "exec ${pkgs.mpc_cli}/bin/mpc prev"; + "XF86AudioNext" = "exec ${pkgs.mpc_cli}/bin/mpc next"; + "XF86AudioPrev" = "exec ${pkgs.mpc_cli}/bin/mpc prev"; + + # Toggle play/pause + "XF86AudioPlay" = "exec ${pkgs.mpc_cli}/bin/mpc toggle"; + "XF86AudioPause" = "exec ${pkgs.mpc_cli}/bin/mpc toggle"; + "${configPlace.config.modifier}+backslash" = + "exec ${pkgs.mpc_cli}/bin/mpc toggle"; + + "${configPlace.config.modifier}+m" = "exec ${musicRofi}"; + # "${configPlace.config.modifier}+Shift+m" = "exec ${magicMudl}"; + + "${configPlace.config.modifier}+p" = "exec ${bwRofi}"; + "${configPlace.config.modifier}+t" = "exec ${bwRofiOtp}"; + + "${configPlace.config.modifier}+o" = "exec ${emojiRofi}"; + + "${configPlace.config.modifier}+0" = "workspace 10"; + "${configPlace.config.modifier}+Shift+0" = + "move container to workspace 10"; + + "${if cfg.wayland then "Ctrl" else "Control"}+${if cfg.wayland then "Alt" else "Mod1" + }+l" = + let + lockBin = + if cfg.wayland then + "${pkgs.swaylock}/bin/swaylock" + else + "${pkgs.i3lock}/bin/i3lock"; + in + "exec ${lockBin} ${cfg.swaylockArgs}"; + } + ) + ); + + menu = rofiMenu; + + bars = + if (cfg.babybar || cfg.wayland != true) then [ + { + position = "top"; + colors = config.colors.i3BarColors; + } + ] else + [ ]; + + gaps = { + smartGaps = true; + smartBorders = "on"; + inner = 5; + outer = 5; + }; + }; + }; + + mainConfig = { + systemd.user.services.flameshot = { + Unit = { + Description = "Flameshot screenshot tool"; + After = [ + "graphical-session-pre.target" + "polybar.service" + "stalonetray.service" + "taffybar.service" + ]; + PartOf = [ "graphical-session.target" ]; + }; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + + Service = { + Environment = "PATH=${config.home.profileDirectory}/bin"; + ExecStart = "${flameshot}/bin/flameshot"; + Restart = "on-abort"; + }; + }; + + xdg.configFile."flameshot/flameshot.ini".text = '' + [General] + buttons=@Variant(\0\0\0\x7f\0\0\0\vQList\0\0\0\0\n\0\0\0\0\0\0\0\x2\0\0\0\x3\0\0\0\x5\0\0\0\x6\0\0\0\x12\0\0\0\xf\0\0\0\x13\0\0\0\b\0\0\0\n) + contrastOpacity=142 + contrastUiColor=#0ee900 + disabledTrayIcon=false + drawColor=#ff0000 + drawThickness=9 + savePath=/dev/null + uiColor=#6a00a3 + ''; + + services.keynav.enable = true; + services.clipmenu.enable = true; + + colors.enable = true; + fonts.enable = true; + + ez.codium.enable = true; + ez.chromium.enable = true; + + services.lorri.enable = true; + + services.blueman-applet = { + enable = cfg.bluetooth; + }; + + systemd.user.services.mpris-proxy = mkIf cfg.bluetooth { + Unit.Description = "Mpris proxy"; + Unit.After = [ "network.target" "sound.target" ]; + Service.ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; + Install.WantedBy = [ "default.target" ]; + }; + + systemd.user.services.ydotoold = { + Unit = { + Description = "Generic command-line automation tool (no X!) "; + PartOf = "graphical-session.target"; + }; + + Service.ExecStart = "${pkgs.ydotool}/bin/ydotoold"; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + }; + + # systemd.user.services.pulseaudio-dlna = { + # Unit = { + # Description = + # "A lightweight streaming server which brings DLNA / UPNP and Chromecast support to PulseAudio and Linux"; + # After = [ "network.target" "sound.target" ]; + # }; + + # Service = { + # ExecStart = "${pkgs.pulseaudio-dlna}/bin/pulseaudio-dlna --port 10291"; + # Environment = + # let + # toolPaths = makeBinPath [ pkgs.pulseaudio pkgs.dbus ]; + # in + # [ "PATH=${toolPaths}" ]; + # type = "idle"; + # }; + + # Install = { WantedBy = [ "default.target" ]; }; + # }; + + xdg.configFile."fish/functions/humanize_duration.fish".source = + pkgs.fetchurl { + url = + "https://raw.githubusercontent.com/fishpkg/fish-humanize-duration/master/humanize_duration.fish"; + sha256 = "0abjc9dab8sx2lr28dp36vy9c4rd95badiypbkfjyvdxd9nig6zr"; + }; + + home.sessionVariables = { BW_SESSION = cfg.bitwardenSession; }; + + services.mpd = { + enable = true; + musicDirectory = "${config.home.homeDirectory}/Music"; + }; + + gtk = { + enable = true; + iconTheme = { + package = cfg.favIcons.package; + name = cfg.favIcons.name; + }; + }; + + qt = { + enable = true; + platformTheme = "gtk"; + }; + + programs.kitty = { + enable = true; + settings = { + background_opacity = "0.70"; + dynamic_background_opacity = true; + }; + }; + + xdg.configFile."neofetch/config.conf".text = + let + image = builtins.path { + name = "nixos_circlejerk.png"; + path = ../data/nixos_circlejerk.png; + }; + in + '' + image_source="${image}" + image_backend="kitty" + ''; + + programs.mpv.config = { + enable = true; + profile = "gpu-hq"; + ytdl-format = "bestvideo+bestaudio"; + cache-default = 4000000; + }; + + fonts.fontconfig.enable = true; + + home.packages = with pkgs; + [ + flameshot + + # needed for fish done stuff + jq + + direnv + + ezDrv + mudl + + bitwarden-cli + kitty + pavucontrol + mpv + youtube-dl + xorg.xkill + maim + slop + + ark + gwenview + notify-osd + libnotify + ffmpeg + id3v2 + imagemagick + + gimp + mumble + libreoffice + mpc_cli + nix-index + ] + ++ ( + if cfg.developer then [ + openvpn + gitAndTools.hub + morph + nmap + nixpkgs-fmt + ] else + [ ] + ); + + programs.rofi = { + enable = true; + terminal = "kitty"; + borderWidth = 0; + lines = 30; + }; + }; + waylandConfig = { + home.sessionVariables = { + QT_QPA_PLATFORM = "wayland-egl;xcb"; + MOZ_ENABLE_WAYLAND = "1"; + QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; + ECORE_EVAS_ENGINE = "wayland_egl"; + ELM_ENGINE = "wayland_egl"; + _JAVA_AWT_WM_NONREPARENTING = "1"; + XDG_CURRENT_DESKTOP = "Unity"; + }; + + programs.waybar = { + enable = cfg.babybar != true; + systemd.enable = true; + + settings = [ + ({ + modules-left = [ "sway/workspaces" "sway/mode" ]; + modules-center = [ "clock" "mpd" ]; + modules-right = (if cfg.battery then [ "battery" ] else [ ]) + ++ [ "pulseaudio" "network" "memory" "cpu" "temperature" "tray" ]; + position = "left"; + width = 50; + height = null; + + modules.network.format-wifi = "{signalStrength}% ๏‡ซ"; + modules.network.format-alt = "{ipaddr}"; + modules.pulseaudio.format = "{volume}% ๏€ฅ"; + modules.memory.format = "{}% ๏‘ฑ"; + modules.mpd.rotate = 90; + modules.temperature = { + format = "{temperatureC}ยฐC {icon}"; + format-icons = [ "๏ซ" "๏‹‰" "๏ฉ" ]; + }; + } // cfg.waybarConfig) + ]; + + style = + ( + builtins.readFile "${pkgs.waybar}/etc/xdg/waybar/style.css" + "\n" + config.colors.waybarCss + "\n" + '' + #clock, #battery, #cpu, #memory, #network, #pulseaudio, #tray, #mode, #temperature, #clock, #mpd { + margin: 3px 0; + padding: 5px 2px; + } + + * { + font-family: "${config.fonts.favFont.name}"; + font-size: ${toString config.fonts.favFont.size}px; + } + '' + ); + }; + + xdg.configFile."gebaar/gebaard.toml".text = '' + [commands.swipe.three] + left_up = "" + right_up = "" + up = "" + left_down = "" + right_down = "" + down = "${rofiMenu}" + left = "${pkgs.ydotool}/bin/ydotool key Alt+Left" + right = "${pkgs.ydotool}/bin/ydotool key Alt+Right" + + [commands.swipe.four] + left_up = "" + right_up = "" + up = "" + left_down = "" + right_down = "" + down = "" + left = "" + right = "" + ''; + + systemd.user.services.gebaard = { + Unit = { + Description = + " A Super Simple WM Independent Touchpad Gesture Daemon for libinput "; + PartOf = "graphical-session.target"; + }; + + Service.ExecStart = "${pkgs.gebaar-libinput}/bin/gebaard"; + + Install = { WantedBy = [ "sway-session.target" ]; }; + }; + + programs.mako.enable = true; + + systemd.user.services.swayidle = mkIf cfg.screensaver.enable { + Unit = { + Description = "Idle manager for Wayland"; + PartOf = "sway-session.target"; + }; + + Service.ExecStart = '' + ${pkgs.swayidle}/bin/swayidle -w \ + timeout ${ + toString cfg.screensaver.lockTime + } 'swaylock -f ${cfg.swaylockArgs}' \ + timeout ${ + toString cfg.screensaver.offTime + } 'swaymsg "output * dpms off"' \ + resume 'swaymsg "output * dpms on"' \ + before-sleep 'swaylock -f ${cfg.swaylockArgs}' + ''; + + Install = { WantedBy = [ "sway-session.target" ]; }; + }; + + wayland.windowManager.sway = mkMerge [ + swayConfig + + { + config = { output = cfg.outputOptions; }; + + package = lib.mkDefault swaypkg; + + extraConfig = + let + oguri-swaybg = pkgs.writeScript "oguri-swaybg" '' + #!/bin/sh + set -e + set -o pipefail + + outputs="" + images="" + + while getopts o:i:m:c: OPTION; do + case $OPTION in + o) + outputs="''${outputs}[output $OPTARG]\n" + ;; + i) + outputs="''${outputs}image=$OPTARG\n" + ;; + m) + outputs="''${outputs}scaling-mode=$OPTARG\n" + ;; + c) ;; # No color support. + esac + done + + printf "''${outputs}\n" | ${pkgs.oguri}/bin/oguri -c /dev/stdin + ''; + in + '' + swaybg_command ${oguri-swaybg} + ''; + + systemdIntegration = true; + wrapperFeatures.gtk = true; + } + ]; + + home.packages = with pkgs; [ + waybar + wl-clipboard # important actually, for vim and other things + swaylock + pkgs.swayidle + xwayland + rxvt_unicode + dmenu + libappindicator-gtk3 + pipewire + xdg-desktop-portal + xdg-desktop-portal-wlr + ]; + }; + xConfig = + let + allOutputs = + builtins.attrValues + cfg.outputOptions; + mainOutput = + if + builtins.length + allOutputs >= 1 then + builtins.elemAt + (allOutputs) + 0 else null; + mainWallpaper = + if mainOutput != null && + builtins.hasAttr + "bg" + mainOutput then mainOutput.bg else null; + mainWallpaperSplit = + if mainWallpaper != null then + lib.splitString + " " + mainWallpaper else null; + mainWallpaperImgRaw = + if mainWallpaperSplit != null then + builtins.elemAt + mainWallpaperSplit + 0 else null; + mainWallpaperImg = + if mainWallpaperImgRaw != null then + lib.replaceStrings + [ "$HOME" ] + [ "%h" ] + mainWallpaperImgRaw else null; + mainWallpaperDisplayMaybe = + if mainWallpaperSplit != null then + builtins.elemAt + mainWallpaperSplit + 1 else null; + mainWallpaperDisplay = if mainWallpaperDisplayMaybe != null then mainWallpaperDisplayMaybe else "fill"; + in + { + systemd.user.services = + if mainWallpaperImg != null then { + background = { + Unit = { + Description = "Set the wallpaper"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + + Service = { + Type = "oneshot"; + ExecStart = "${pkgs.feh}/bin/feh --bg-${mainWallpaperDisplay} ${mainWallpaperImg}"; + IOSchedulingClass = "idle"; + }; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + }; + } else { }; + + services.picom = { + enable = true; + vSync = true; + #refreshRate = 144; + blur = true; + package = pkgs.picom.overrideAttrs ( + _: { + src = builtins.fetchGit { + url = "https://github.com/ibhagwan/picom"; + ref = "next-rebase"; + rev = "6d87428f78a46bea295e0a21d23c4b56133aadc3"; + }; + } + ); + experimentalBackends = true; + blurExclude = [ + "window_type = 'dock'" + "window_type = 'desktop'" + "_GTK_FRAME_EXTENTS@:c" + "class_g = 'slop'" + ]; + extraOptions = '' + blur: + { + method = "kawase"; + strength = 4; + kern = "3x3box"; + deviation = 5.0; + }; + ''; + }; + + xsession = { + enable = true; + windowManager.i3 = swayConfig; + }; + + services.dunst = { + enable = true; + settings = { + global = { + geometry = "300x5-30+50"; + padding = 8; + horizontal_padding = 8; + transparency = 10; + }; + }; + }; + }; +in +{ + options.ezpcusr = { + enable = mkEnableOption "Enable simple PC user config"; + + wayland = mkOption { + default = true; + description = "Enable wayland config (disabling this is experimental)"; + }; + + babybar = mkOption { + default = false; + description = ''Switch to using the "baby" swaybar rather than waybar''; + }; + + keybindings = mkOption { + description = "Keyboard shortcuts"; + default = { }; + type = types.attrsOf (types.nullOr types.str); + }; + + uploadScript = mkOption { + type = types.nullOr types.package; + default = null; + description = + "A path to a script that takes a path to a file and returns a URL"; + }; + + bitwardenSession = mkOption { + description = "Session key for bitwarden"; + default = ""; + type = types.str; + }; + + outputOptions = mkOption { + description = "Additional output options"; + default = { }; + type = types.attrsOf (types.attrsOf types.str); + }; + + waybarConfig = mkOption { + description = "Waybar config"; + default = { }; + }; + + makoArgs = mkOption { + description = "Args for mako notification displayer"; + default = ""; + type = types.str; + }; + + swaylockArgs = mkOption { + description = "Args for swaylock lock screen"; + default = ""; + type = types.str; + }; + + screensaver = mkOption { + description = "ezpcusr screensaver"; + default = { }; + type = types.submodule { + options = { + enable = mkOption { + type = types.bool; + default = true; + description = "Enable ezpcusr's screensaver"; + }; + lockTime = mkOption { + type = types.int; + default = 300; + description = "Time until your screen locks"; + }; + offTime = mkOption { + type = types.int; + default = 600; + description = "Time until your screen turns off"; + }; + }; + }; + }; + + favIcons = mkOption { + description = "Your favourite icons pack"; + default = { }; + type = types.submodule { + options = { + name = mkOption { + type = types.str; + default = "Papirus-Dark"; + description = "Name of your icon pack"; + }; + package = mkOption { + type = types.package; + default = pkgs.papirus-icon-theme; + description = "Package for your icon pack"; + }; + }; + }; + }; + + developer = mkOption { + type = types.bool; + default = true; + description = "Enable developer tools"; + }; + + gaming = mkOption { + type = types.bool; + default = false; + description = "If this PC is used for gaming"; + }; + + bluetooth = mkOption { + type = types.bool; + default = false; + description = "If this PC has bluetooth support"; + }; + + haddr = mkOption { + type = types.nullOr types.str; + default = null; + description = "address for ur bluetooth headphones"; + }; + + battery = mkOption { + type = types.bool; + default = false; + description = "If this PC has a battery"; + }; + + tiling = mkOption { + type = types.bool; + default = true; + description = "If you are based and redpilled, and want a tiling WM (deprecated)"; + }; + }; + + config = mkIf cfg.enable ( + mkMerge [ + mainConfig + (mkIf cfg.wayland waylandConfig) + (mkIf (cfg.wayland != true) xConfig) + ] + ); +} diff --git a/home-manager/modules/fonts.nix b/home-manager/modules/fonts.nix new file mode 100644 index 0000000..f73ff3f --- /dev/null +++ b/home-manager/modules/fonts.nix @@ -0,0 +1,64 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.fonts; +in +{ + options.fonts = { + enable = mkEnableOption "Enable automatic fonts"; + + favFont = mkOption { + description = "Your favourite font"; + default = { }; + type = types.submodule { + options = { + name = mkOption { + type = types.str; + default = "Monoid Nerd Font Mono"; + description = "Name of your font"; + }; + package = mkOption { + type = types.package; + default = pkgs.nerdfonts.override { fonts = [ "Hack" "Monoid" "Hermit" ]; }; + description = "Package for your font"; + }; + size = mkOption { + type = types.int; + default = 10; + description = "Size for your font"; + }; + }; + }; + }; + }; + + config = + mkIf cfg.enable { + home.packages = [ cfg.favFont.package ]; + + programs.vscode.userSettings = { + "editor.fontFamily" = "\"${cfg.favFont.name}\""; + }; + + gtk.font = { + package = cfg.favFont.package; + name = "${cfg.favFont.name} ${toString cfg.favFont.size}"; + }; + + programs.kitty.settings = { + font_family = cfg.favFont.name; + font_size = cfg.favFont.size; + }; + + programs.rofi.font = "${cfg.favFont.name} ${toString cfg.favFont.size}"; + + programs.mako.font = "${cfg.favFont.name} ${toString cfg.favFont.size}"; + + wayland.windowManager.sway.config.fonts = [ cfg.favFont.name ]; + xsession.windowManager.i3.config.fonts = [ cfg.favFont.name ]; + + programs.neovim.extraConfig = '' + set guifont=${lib.replaceChars [ " " ] [ "\\ " ] cfg.favFont.name}:h${toString (cfg.favFont.size + 0.5)} + ''; + }; +} diff --git a/home-manager/users/chekkie.nix b/home-manager/users/chekkie.nix new file mode 100644 index 0000000..84201cd --- /dev/null +++ b/home-manager/users/chekkie.nix @@ -0,0 +1,39 @@ +{ config, pkgs, lib, ... }: { + programs.home-manager.enable = true; + + home.packages = with pkgs; [ zsh-powerlevel9k ]; + + programs.htop = { + enable = true; + meters.left = [ + "LeftCPUs" + "Blank" + "Memory" + { + kind = "Uptime"; + mode = 4; + } + ]; + meters.right = [ "RightCPUs" "Blank" "CPU" ]; + fields = [ + "USER" + "PRIORITY" + "NICE" + "M_RESIDENT" + "PERCENT_MEM" + "PERCENT_CPU" + "TIME" + "COMM" + ]; + showProgramPath = false; + showThreadNames = true; + delay = 10; + cpuCountFromZero = true; + }; + + programs.fish.shellAliases = { + node = "node --experimental-repl-await"; + ls = "lsd"; + bp = "npm version patch && npm publish && git push"; + }; +} diff --git a/home-manager/users/glooder.nix b/home-manager/users/glooder.nix new file mode 100644 index 0000000..e9e77f4 --- /dev/null +++ b/home-manager/users/glooder.nix @@ -0,0 +1,80 @@ +{ config, pkgs, lib, ... }: + +{ + programs.home-manager.enable = true; + + home.packages = with pkgs; [ zsh-powerlevel9k ]; + + programs.htop = { + enable = true; + meters.left = [ + "LeftCPUs" + "Blank" + "Memory" + { + kind = "Uptime"; + mode = 4; + } + ]; + meters.right = [ "RightCPUs" "Blank" "CPU" ]; + fields = [ + "USER" + "PRIORITY" + "NICE" + "M_RESIDENT" + "PERCENT_MEM" + "PERCENT_CPU" + "TIME" + "COMM" + ]; + showProgramPath = false; + showThreadNames = true; + delay = 10; + cpuCountFromZero = true; + }; + + programs.zsh = { + enable = true; + oh-my-zsh.enable = true; + oh-my-zsh.plugins = [ "powerlevel9k" ]; + + localVariables = { + LC_ALL = "en_US.UTF-8"; + TERM = "xterm-256color"; + DEFAULT_USER = "glooder"; + + POWERLEVEL9K_MODE = "awesome-fontconfig"; + POWERLEVEL9K_DIR_PATH_SEPARATOR = " ๎‚ฑ "; + POWERLEVEL9K_SHORTEN_DIR_LENGTH = "4"; + POWERLEVEL9K_SHORTEN_STRATEGY = "truncate_middle"; + POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD = "0.3"; + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS = + [ "status" "command_execution_time" ]; + POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER = "true"; + }; + + initExtra = '' + export PATH=~/.bin:$PATH + + eval $(thefuck --alias) + + source ${pkgs.zsh-powerlevel9k}/share/zsh-powerlevel9k/powerlevel9k.zsh-theme + function edt() { + if [ "$TERM_PROGRAM" = "vscode" ]; then + codium $@ + else + vi $@ + fi + } + ''; + + shellAliases = { + code = "codium"; + node = "node --experimental-repl-await"; + ls = "lsd"; + bp = "npm version patch && npm publish && git push"; + nano = "edt"; + vi = "edt"; + }; + }; +} diff --git a/home-manager/users/notgne2.nix b/home-manager/users/notgne2.nix new file mode 100644 index 0000000..7b5cc08 --- /dev/null +++ b/home-manager/users/notgne2.nix @@ -0,0 +1,50 @@ +{ config, pkgs, lib, ... }: + +{ + programs.home-manager.enable = true; + + home.packages = with pkgs; [ + zsh-powerlevel9k + ncurses.dev + lsd + fzf # also needed for fzf.vim + ]; + + programs.fish.shellAliases = { + node = "node --experimental-repl-await"; + ls = "lsd"; + }; + + programs.htop = { + enable = true; + meters.left = [ + "LeftCPUs" + "Blank" + "Memory" + { + kind = "Uptime"; + mode = 4; + } + ]; + meters.right = [ "RightCPUs" "Blank" "CPU" ]; + fields = [ + "USER" + "PRIORITY" + "NICE" + "M_RESIDENT" + "PERCENT_MEM" + "PERCENT_CPU" + "TIME" + "COMM" + ]; + delay = 10; + cpuCountFromZero = true; + }; + + programs.git = { + enable = true; + lfs.enable = true; + userName = "notgne2"; + userEmail = "gen2@gen2.space"; + }; +} diff --git a/home-manager/users/notgne2_pc.nix b/home-manager/users/notgne2_pc.nix new file mode 100644 index 0000000..788d598 --- /dev/null +++ b/home-manager/users/notgne2_pc.nix @@ -0,0 +1,438 @@ +{ config, pkgs, lib, ... }: +let + # TODO: find a better source + mimeTypes = pkgs.fetchurl { + url = + "https://raw.githubusercontent.com/eprints/eprints3.4/master/lib/mime.types"; + sha256 = "0cdhq71wk5h3zcfrz8dyqc3vrjyikwjqsla855v036r54lch0kn2"; + }; + + edt = pkgs.writeScriptBin "edt" '' + #!${pkgs.bash}/bin/bash + if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + nvim $@ + else + # nvim-qt $@ + nohup kitty nvim "$@" > /dev/null & disown + fi + ''; + + sc = pkgs.writeScript "sc.sh" '' + #!${pkgs.zsh}/bin/zsh + git commit -am "$*" + ''; + + allgm8 = pkgs.writeScript "sc.sh" '' + #!${pkgs.zsh}/bin/zsh + for loc in au-02 us-03 us-04 eu-01; do echo "--- $loc: "; ssh "$loc.gm8.app" "$1"; echo "done"; done + ''; + + prefetch-git = pkgs.writeScript "prefetch-git.sh" '' + #!${pkgs.bash}/bin/bash + nix-prefetch-git $1 --rev $(git ls-remote -h $1 |cut -f1) + ''; +in +{ + imports = [ ./notgne2.nix ]; + + programs.fish.interactiveShellInit = '' + export GPG_TTY=(tty) + ${pkgs.gnupg}/bin/gpgconf --launch gpg-agent + ''; + + home.file.".gnupg/gpg-agent.conf".text = '' + enable-ssh-support + pinentry-program ${pkgs.pinentry.curses}/bin/pinentry-curses + default-cache-ttl 60 + max-cache-ttl 120 + ''; + + programs.git.signing.key = "BB661E172B42A7F8"; + programs.git.signing.signByDefault = true; + + xdg.configFile."nvim/coc-settings.json".source = pkgs.writeText "coc-settings.json" (builtins.toJSON { + languageserver = { + nix = { + command = "${pkgs.rnix-lsp}/bin/rnix-lsp"; + filetypes = [ "nix" ]; + }; + elmLS = { + command = "${pkgs.elmPackages.elm-language-server}/bin/elm-language-server"; + filetypes = [ "elm" ]; + rootPatterns = [ "elm.json" ]; + }; + }; + codeLens.enable = true; + coc.preferences.formatOnSaveFiletypes = [ "rust" "elm" "javascript" "typescript" "json" ]; + }); + + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + withNodeJs = true; + plugins = with pkgs.vimPlugins; [ + vim-nix + camelcasemotion + vim-indent-object + vim-commentary + vim-surround + { + plugin = vim-airline; + config = '' + if exists('g:started_by_firenvim') + let g:airline#extensions#tabline#enabled = 0 + let g:airline_powerline_fonts = 0 + else + let g:airline#extensions#tabline#enabled = 1 + let g:airline_powerline_fonts = 1 + endif + + " remove c, which contains filename, without firevim it's in the buffer, with firevim I don't want to see it, so this can always be applied + let g:airline#extensions#default#layout = [ + \ [ 'a', 'b' ], + \ [ 'x', 'y', 'z', 'error', 'warning' ] + \ ] + ''; + } + coc-nvim + coc-rust-analyzer + coc-tsserver + vim-visual-multi + { + plugin = fzf-vim; + config = '' + map ; :Files + ''; + } + ( + pkgs.vimUtils.buildVimPlugin { + name = "firenvim"; + src = builtins.fetchGit { + url = "git+ssh://git@github.com/glacambre/firenvim.git"; + rev = "3b6558c47f6a3721fadce5b4ac70335be9863632"; + }; + }) + vim-gitgutter + ]; + extraConfig = '' + set encoding=utf-8 + set hidden + set nobackup + set nowritebackup + set cmdheight=2 + set updatetime=200 + set shortmess+=c + " maybe should be number? + set signcolumn=yes + + set clipboard+=unnamedplus + set mouse=a + + map :bnext + map :bprev + + " Use tab for trigger completion with characters ahead and navigate. + " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by + " other plugin before putting this into your config. + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + " Use to trigger completion. + if has('nvim') + inoremap coc#refresh() + else + inoremap coc#refresh() + endif + + " Make auto-select the first completion item and notify coc.nvim to + " format on enter, could be remapped by other vim plugin + inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" + + " Use `[g` and `]g` to navigate diagnostics + " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. + nmap [g (coc-diagnostic-prev) + nmap ]g (coc-diagnostic-next) + + " GoTo code navigation. + nmap gd (coc-definition) + nmap gy (coc-type-definition) + nmap gi (coc-implementation) + nmap gr (coc-references) + + " Use K to show documentation in preview window. + nnoremap K :call show_documentation() + + function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif + endfunction + + " Highlight the symbol and its references when holding the cursor. + autocmd CursorHold * silent call CocActionAsync('highlight') + + " Symbol renaming. + nmap rn (coc-rename) + + " Formatting selected code. + xmap f (coc-format-selected) + nmap f (coc-format-selected) + + " Applying codeAction to the selected region. + " Example: `aap` for current paragraph + xmap a (coc-codeaction-selected) + nmap a (coc-codeaction-selected) + + " Remap keys for applying codeAction to the current buffer. + nmap ac (coc-codeaction) + " Apply AutoFix to problem on the current line. + nmap qf (coc-fix-current) + + " Map function and class text objects + " NOTE: Requires 'textDocument.documentSymbol' support from the language server. + xmap if (coc-funcobj-i) + omap if (coc-funcobj-i) + xmap af (coc-funcobj-a) + omap af (coc-funcobj-a) + xmap ic (coc-classobj-i) + omap ic (coc-classobj-i) + xmap ac (coc-classobj-a) + omap ac (coc-classobj-a) + + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + + " Use CTRL-S for selections ranges. + " Requires 'textDocument/selectionRange' support of language server. + nmap (coc-range-select) + xmap (coc-range-select) + + " Add `:Format` command to format current buffer. + command! -nargs=0 Format :call CocAction('format') + + " Add `:Fold` command to fold current buffer. + command! -nargs=? Fold :call CocAction('fold', ) + + " Add `:OR` command for organize imports of the current buffer. + command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + + " Mappings for CoCList + " Show all diagnostics. + nnoremap a :CocList diagnostics + " Manage extensions. + nnoremap e :CocList extensions + " Show commands. + nnoremap c :CocList commands + " Find symbol of current document. + nnoremap o :CocList outline + " Search workspace symbols. + nnoremap s :CocList -I symbols + " Do default action for next item. + nnoremap j :CocNext + " Do default action for previous item. + nnoremap k :CocPrev + " Resume latest coc list. + nnoremap p :CocListResume + ''; + }; + + home.sessionVariables = { + FZF_DEFAULT_COMMAND = "${pkgs.fd}/bin/fd --type f"; + }; + + home.packages = with pkgs; [ + xclip # needed for nvim + direnv + nixpkgs-fmt + neovim-qt + edt + ]; + + ezpcusr.uploadScript = pkgs.writeScript "upload_file.sh" '' + #!${pkgs.zsh}/bin/zsh + fileid=$(${pkgs.pwgen}/bin/pwgen 16 1) + + filename=$(basename $1) + extension=$(echo "''${filename##*.}" | awk '{gsub(/^ +| +$/,"")} {print $0}') + if [[ "$extension" = "$filename" ]] then + extension=$(grep "$(file -b --mime-type $1)" ${mimeTypes} | awk '{print $2}') + fi + + rsync -a --chmod=664 "$1" "wizbos.club:~/public/uploads/$fileid.$extension" + echo "https://p.gen2.space/uploads/$fileid.$extension" + ''; + + ezpcusr = { + favFont.name = "Hack Nerd Font Mono"; + favFont.size = 10; + # favColors = { + # name = "Tube"; + # base16 = { + # base00 = "231f20"; + # base01 = "1c3f95"; + # base02 = "5a5758"; + # base03 = "737171"; + # base04 = "959ca1"; + # base05 = "d9d8d8"; + # base06 = "e7e7e8"; + # base07 = "ffffff"; + # base08 = "ee2e24"; + # base09 = "f386a1"; + # base0A = "ffd204"; + # base0B = "00853e"; + # base0C = "85cebc"; + # base0D = "009ddc"; + # base0E = "98005d"; + # base0F = "b06110"; + # }; + # }; + # DO NOT USE + # favColors = { + # name = "Minecraft"; + # base16 = { + # base00 = "080a10"; + # base08 = "373b41"; + # base01 = "b60000"; + # base09 = "a74c4d"; + # base02 = "568549"; + # base0A = "afb12f"; + # base03 = "966c4a"; + # base0B = "ffbc5e"; + # base04 = "243e75"; + # base0C = "78a7ff"; + # base05 = "ca00e9"; + # base0D = "db74f3"; + # base06 = "00897b"; + # base0E = "1de9b6"; + # base07 = "afb8c8"; + # base0F = "b1b1b1"; + # }; + # }; + # favColors = { + # name = "Summerfruit-Dark"; + # base16 = { + # base00 = "151515"; + # base01 = "202020"; + # base02 = "303030"; + # base03 = "505050"; + # base04 = "B0B0B0"; + # base05 = "D0D0D0"; + # base06 = "E0E0E0"; + # base07 = "FFFFFF"; + # base08 = "FF0086"; + # base09 = "FD8900"; + # base0A = "ABA800"; + # base0B = "00C918"; + # base0C = "1FAAAA"; + # base0D = "3777E6"; + # base0E = "AD00A1"; + # base0F = "CC6633"; + # }; + # }; + # favColors = { + # name = "Materia"; + # base16 = { + # base00 = "263238"; + # base01 = "2C393F"; + # base02 = "37474F"; + # base03 = "707880"; + # base04 = "C9CCD3"; + # base05 = "CDD3DE"; + # base06 = "D5DBE5"; + # base07 = "FFFFFF"; + # base08 = "EC5F67"; + # base09 = "EA9560"; + # base0A = "FFCC00"; + # base0B = "8BD649"; + # base0C = "80CBC4"; + # base0D = "89DDFF"; + # base0E = "82AAFF"; + # base0F = "EC5F67"; + # }; + # }; + # favColors = { + # name = "spacemacs"; + # base16 = { + # base00 = "1F2022"; + # base01 = "282828"; + # base02 = "444155"; + # base03 = "585858"; + # base04 = "B8B8B8"; + # base05 = "A3A3A3"; + # base06 = "E8E8E8"; + # base07 = "F8F8F8"; + # base08 = "F2241F"; + # base09 = "FFA500"; + # base0A = "B1951D"; + # base0B = "67B11D"; + # base0C = "2D9574"; + # base0D = "4F97D7"; + # base0E = "A31DB1"; + # base0F = "B03060"; + # }; + # }; + favColors = { + name = "Material Vivid"; + base16 = { + base00 = "202124"; + base01 = "27292c"; + base02 = "323639"; + base03 = "44464d"; + base04 = "676c71"; + base05 = "80868b"; + base06 = "9e9e9e"; + base07 = "ffffff"; + base08 = "f44336"; + base09 = "ff9800"; + base0A = "ffeb3b"; + base0B = "00e676"; + base0C = "00bcd4"; + base0D = "2196f3"; + base0E = "673ab7"; + base0F = "8d6e63"; + }; + }; + }; + + programs.fish.shellAliases = { + bp = "npm version patch && npm publish && git push"; + nano = "edt"; + vi = "edt"; + sc = "${sc}"; + allgm8 = "${allgm8}"; + prefetch-git = "${prefetch-git}"; + }; + + programs.git = { + enable = true; + lfs.enable = true; + userName = "notgne2"; + userEmail = "gen2@gen2.space"; + }; + + xdg.configFile."nvim-qt/nvim-qt.conf".text = '' + ext_tabline=false + ext_popupmenu=false + ''; + + programs.vscode.enable = true; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..7b76543 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./ezvahi.nix + ./ezwg.nix + ./ezpc.nix + ./kiosk.nix + ./ezpassthru.nix + ./fuckingprint.nix + ./workstation.nix + ]; +} diff --git a/modules/ezpassthru.nix b/modules/ezpassthru.nix new file mode 100644 index 0000000..7eefadf --- /dev/null +++ b/modules/ezpassthru.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.ezpassthru; +in +{ + options.services.ezpassthru = { + enable = + mkEnableOption + "Enable simple VM PCI passthrough config (NOTE: this is only for ppl with a primary AMD/Intel, and a non-primary NVidia)"; + + PCIs = mkOption { + description = "The ID pairs of your PCI devices to passthrough"; + example = { + "10de:1b80" = "0000:41:00.0"; + "10de:10f0" = "0000:41:00.1"; + "1022:43ba" = "0000:01:00.0"; + }; + }; + }; + + config = mkIf cfg.enable { + boot.kernelModules = [ + "kvm-intel" + "kvm-amd" + "vfio_virqfd" + "vfio_pci" + "vfio_iommu_type1" + "vfio" + ]; + + boot.kernelParams = [ + "intel_iommu=on" + "amd_iommu=on" + "pcie_aspm=off" + ]; + + boot.extraModprobeConfig = "options vfio-pci ids=${ + builtins.concatStringsSep "," (builtins.attrNames cfg.PCIs) + }"; + + boot.postBootCommands = '' + DEVS="${builtins.concatStringsSep " " (builtins.attrValues cfg.PCIs)}" + for DEV in $DEVS; do + echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override + done + + modprobe -i vfio-pci + ''; + }; +} diff --git a/modules/ezpc.nix b/modules/ezpc.nix new file mode 100644 index 0000000..6a3d0a6 --- /dev/null +++ b/modules/ezpc.nix @@ -0,0 +1,197 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.ezpc; + + mainConfig = { + services.thermald.enable = true; + + environment.etc."chromium/policies/managed/policies.json".text = '' + { + "NewTabPageLocation": "https://wizbos.club/" + } + ''; + + workstation.enable = true; + workstation.user = cfg.user; + + networking.firewall.allowedTCPPorts = [ 22 ]; + networking.firewall.allowedUDPPorts = [ 1900 ]; + + hardware.pulseaudio.enable = lib.mkDefault (!cfg.portals); + + services.pipewire.enable = lib.mkDefault cfg.portals; + services.pipewire.jack.enable = lib.mkDefault cfg.portals; + services.pipewire.alsa.enable = lib.mkDefault cfg.portals; + services.pipewire.alsa.support32Bit = lib.mkDefault cfg.portals; + services.pipewire.pulse.enable = lib.mkDefault cfg.portals; + + xdg.portal.enable = lib.mkDefault cfg.portals; + xdg.portal.gtkUsePortal = lib.mkDefault cfg.portals; + xdg.portal.extraPortals = lib.mkDefault (if cfg.portals then with pkgs; [ xdg-desktop-portal-wlr xdg-desktop-portal-gtk ] else []); + # https://github.com/NixOS/nixpkgs/issues/108855 + systemd.user.services.xdg-desktop-portal.environment = lib.mkDefault (lib.mkIf cfg.portals { + XDG_DESKTOP_PORTAL_DIR = config.environment.variables.XDG_DESKTOP_PORTAL_DIR; + }); + + # let me use audio and phones + programs.adb.enable = cfg.developer; + + # Set some X11 props + services.xserver = { + enable = lib.mkDefault (cfg.gfx == "nvidia"); + layout = lib.mkDefault "us"; + libinput.enable = true; + + # automatic gfx drivers + videoDrivers = mkIf (cfg.gfx != null) [ cfg.gfx ]; + }; + security.pam.services = { + swaylock.text = '' + auth include login + ''; + }; + }; + notBatteryConfig = { + powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; + }; + batteryConfig = { + services.upower = { + enable = true; + percentageLow = 15; + percentageCritical = 10; + percentageAction = 5; + }; + services.tlp.enable = true; + services.tlp.extraConfig = '' + TLP_ENABLE=1 + CPU_SCALING_GOVERNOR_ON_BAT=powersave + CPU_SCALING_GOVERNOR_ON_AC=ondemand + CPU_BOOST_ON_BAT=0 + CPU_BOOST_ON_AC=1 + CPU_MIN_PERF_ON_BAT=0 + CPU_MAX_PERF_ON_BAT=30 + CPU_MIN_PERF_ON_AC=0 + CPU_MAX_PERF_ON_AC=100 + CPU_ENERGY_PERF_POLICY_ON_BAT=power + CPU_ENERGY_PERF_POLICY_ON_AC=ondemand + ''; + }; + gamingConfig = { + environment.systemPackages = + let + steam = pkgs.steam.override { withJava = true; }; + + steam-run = steam.run; + + newwine = (pkgs.wineFull.override { wineBuild = "wineWow"; wineRelease = "staging"; }); + newwinetricks = pkgs.winetricks.override { wine = newwine; }; + + oldwine = (pkgs.wineFull.override { wineBuild = "wineWow"; }); + oldwinetricks = pkgs.winetricks.override { wine = oldwine; }; + in + with pkgs; ([ + steam + steam-run + xlibs.xf86inputjoystick + oldwine + oldwinetricks + (writeScriptBin "steam-run-native" '' + #!${pkgs.stdenv.shell} + ${(steam.override { nativeOnly = true; }).run}/bin/steam-run $@ + '') + ] ++ ( + if cfg.newWine then [ + ( + pkgs.runCommand "new-wine-stuff" + { } '' + mkdir -p $out/bin + ln -s ${newwine}/bin/wine $out/bin/new-wine + ln -s ${newwine}/bin/winecfg $out/bin/new-winecfg + ln -s ${newwinetricks}/bin/winetricks $out/bin/new-winetricks + '' + ) + ] else [ ] + )); + }; +in +{ + options.ezpc = { + enable = mkEnableOption "Enable simple PC config"; + + battery = mkOption { + type = types.bool; + default = false; + description = "If this device has a battery"; + }; + + portals = mkOption { + type = types.bool; + default = false; + description = "use weird new hipster portal shit"; + }; + + user = mkOption { + type = types.str; + description = "The main user of this PC"; + }; + + gaming = mkOption { + type = types.bool; + default = false; + description = "If this PC is used for gaming"; + }; + + touchscreen = mkOption { + type = types.bool; + default = false; + description = "If this PC has a touchscreen"; + }; + + gfx = mkOption { + type = types.nullOr types.str; + default = null; + description = "Type of your PC's graphics card"; + example = "intel"; + }; + + print = mkOption { + type = types.bool; + default = false; + description = "If this PC should support printing/scanning"; + }; + + developer = mkOption { + type = types.bool; + default = true; + description = "Should enable advanced shit for developers"; + }; + + bluetooth = mkOption { + type = types.bool; + default = false; + description = "If this PC has bluetooth support"; + }; + + tiling = mkOption { + type = types.bool; + default = true; + description = "If you are based and redpilled, and want a tiling WM (deprecated, default)"; + }; + + newWine = mkOption { + type = types.bool; + default = false; + description = "If you want to include wine-staging as new-wine"; + }; + }; + + config = mkIf cfg.enable ( + mkMerge [ + mainConfig + (mkIf cfg.gaming gamingConfig) + (mkIf cfg.battery batteryConfig) + (mkIf (cfg.battery != true) notBatteryConfig) + ] + ); +} diff --git a/modules/ezvahi.nix b/modules/ezvahi.nix new file mode 100644 index 0000000..88dc92d --- /dev/null +++ b/modules/ezvahi.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.ezvahi; +in +{ + options.services.ezvahi.enable = mkEnableOption "Enable simple Avahi config"; + + config = mkIf cfg.enable { + services.avahi = { + enable = true; + nssmdns = true; + publish = { + enable = true; + addresses = true; + domain = true; + workstation = true; + userServices = true; + }; + }; + }; +} diff --git a/modules/ezwg.nix b/modules/ezwg.nix new file mode 100644 index 0000000..93b2a52 --- /dev/null +++ b/modules/ezwg.nix @@ -0,0 +1,97 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.ezwg; +in +{ + options.services.ezwg = { + enable = mkEnableOption "Enable simple Wireguard connection"; + + proxy = mkOption { + type = types.bool; + default = true; + description = "Route all your traffic through this connection"; + }; + + lanSize = mkOption { + type = types.int; + default = 24; + description = "Size of your VLAN (only relevant if proxy is false)"; + }; + + serverIP = mkOption { + type = types.str; + description = "The IP of the wg server"; + }; + + serverPort = mkOption { + type = types.int; + default = 51820; + description = "The port of the wg server"; + }; + + serverKey = mkOption { + type = types.str; + description = "The public key of the wg server"; + }; + + privateKeyFile = mkOption { + type = types.str; + description = "Private wg key"; + }; + + vlanIP = mkOption { + type = types.str; + description = "The IP to use on the wg VLAN"; + }; + }; + + config = mkIf cfg.enable { + networking.firewall.checkReversePath = false; + networking.wireguard.interfaces.wg0 = + let + generateRangesScript = + builtins.toFile "exclusionary-wildcard-ranges-generator.py" '' + import ipaddress + n1 = ipaddress.ip_network('0.0.0.0/0') + n2 = ipaddress.ip_network('${cfg.serverIP}/32') + print(':'.join(list(map(lambda x: str(x), list(n1.address_exclude(n2))))), end="") + ''; + + rangesOutput = + pkgs.runCommandNoCC "exclusionary-wildcard-ranges" + { } '' + ${pkgs.python3}/bin/python3 ${generateRangesScript} > $out + ''; + + generateSubnetScript = + builtins.toFile "subnet-without-host-bits-generator.py" '' + import ipaddress + n1 = ipaddress.ip_network('${cfg.vlanIP}/${toString cfg.lanSize}', False) + print(n1, end="") + ''; + + subnetOutput = + pkgs.runCommandNoCC "subnet-without-host-bits" + { } '' + ${pkgs.python3}/bin/python3 ${generateSubnetScript} > $out + ''; + + ranges = lib.splitString ":" (builtins.readFile "${rangesOutput}"); + subnet = builtins.readFile "${subnetOutput}"; + in + { + ips = [ "${cfg.vlanIP}/32" ]; + privateKeyFile = cfg.privateKeyFile; + + peers = [ + { + publicKey = cfg.serverKey; + allowedIPs = if cfg.proxy then ranges else [ subnet ]; + endpoint = "${cfg.serverIP}:${toString cfg.serverPort}"; + persistentKeepalive = 25; + } + ]; + }; + }; +} diff --git a/modules/fuckingprint.nix b/modules/fuckingprint.nix new file mode 100644 index 0000000..a958be4 --- /dev/null +++ b/modules/fuckingprint.nix @@ -0,0 +1,57 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.fuckingprint; +in +{ + options.fuckingprint.enable = mkEnableOption "Make my fucking printer work"; + + config = mkIf cfg.enable { + services.ezvahi.enable = lib.mkDefault true; + + # Enable CUPS and SANE for printing and scanning + services.printing.enable = true; + services.printing.browsing = true; + services.printing.listenAddresses = [ "*:631" ]; + services.printing.allowFrom = [ "all" ]; + services.printing.defaultShared = true; + services.printing.drivers = with pkgs; [ + gutenprint + gutenprintBin + + hplip + + samsungUnifiedLinuxDriver + splix + brlaser + + brgenml1lpr + brgenml1cupswrapper + + cups-brother-hl1110 + + mfcj470dw-cupswrapper + mfcj6510dw-cupswrapper + + mfcl3770cdwcupswrapper + mfcl2700dncupswrapper + mfcl2720dwcupswrapper + mfcl2740dwcupswrapper + + mfcj470dwlpr + mfcj6510dwlpr + + mfcl3770cdwlpr + mfcl2700dnlpr + mfcl2720dwlpr + mfcl2740dwlpr + ]; + hardware.sane.enable = true; + hardware.sane.brscan4.enable = true; + hardware.sane.extraBackends = with pkgs; [ + utsushi + epkowa + hplipWithPlugin + ]; + }; +} diff --git a/modules/kiosk.nix b/modules/kiosk.nix new file mode 100644 index 0000000..96ea005 --- /dev/null +++ b/modules/kiosk.nix @@ -0,0 +1,84 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.services.kiosk; +in +{ + options.services.kiosk = { + enable = mkEnableOption "Enable simple kiosk display"; + + user = mkOption { + type = types.str; + default = "root"; + description = "The user to run the kiosk under"; + }; + + cursor = mkOption { + type = types.bool; + default = false; + description = "Allow a cursor"; + }; + + session = mkOption { + type = types.lines; + default = "${pkgs.kitty}/bin/kitty ${pkgs.htop}/bin/htop"; + description = "The session script to run for the kiosk"; + }; + + wayland = mkOption { + type = types.bool; + default = false; + description = "Use wayland instead of xserver"; + }; + }; + + config = mkIf cfg.enable { + services.cage = mkIf cfg.wayland { + enable = true; + user = cfg.user; + program = cfg.session; + # TODO cursor + }; + + services.xserver = mkIf (!cfg.wayland) { + enable = true; + + windowManager.ratpoison.enable = true; + + monitorSection = '' + Option "NODPMS" + ''; + + serverLayoutSection = '' + Option "BlankTime" "0" + Option "DPMS" "false" + ''; + + displayManager.lightdm = { + enable = true; + autoLogin = { + enable = true; + user = "${cfg.user}"; + }; + }; + + displayManager.xserverArgs = if cfg.cursor then [ ] else [ "-nocursor" ]; + displayManager.defaultSession = "kiosk+ratpoison"; + + desktopManager.session = [ + { + name = "kiosk"; + start = '' + # dont blank the screen after 5min + xset dpms force on + xset -dpms + xset s noblank + xset s off + + ${cfg.session} + ''; + } + ]; + }; + }; +} diff --git a/modules/workstation.nix b/modules/workstation.nix new file mode 100644 index 0000000..0b2c0f7 --- /dev/null +++ b/modules/workstation.nix @@ -0,0 +1,118 @@ +{ config, lib, pkgs, ... }: +with lib; +let + cfg = config.workstation; +in +{ + options.workstation = { + enable = mkEnableOption "make my computer work"; + + user = mkOption { + type = types.str; + description = "The main user of this PC"; + }; + }; + + config = mkIf cfg.enable { + # support gay men (and video) + hardware.opengl = { + enable = true; + driSupport32Bit = true; + extraPackages = with pkgs; [ + vaapiIntel + vaapiVdpau + libvdpau-va-gl + ]; + }; + hardware.steam-hardware.enable = true; + hardware.uinput.enable = true; + fonts.fontconfig.cache32Bit = true; + + # proton esync + systemd.extraConfig = "DefaultLimitNOFILE=1048576"; + security.pam.loginLimits = [ + { + domain = "*"; + type = "hard"; + item = "nofile"; + value = "1048576"; + } + ]; + + # the user should have some basic permissions lol + users.users."${cfg.user}" = { + extraGroups = [ "adbusers" "audio" "video" "libvirtd" "sway" "wheel" "networkmanager" "docker" "input" "uinput" ]; + + subUidRanges = [ + { + startUid = 100000; + count = 65536; + } + ]; + subGidRanges = [ + { + startGid = 100000; + count = 65536; + } + ]; + }; + + # fuck alsa + nixpkgs.config.pulseaudio = true; + + # brightness + programs.light.enable = true; + + # make fonts not fucked up + fonts.fontconfig.enable = true; + fonts.fontconfig.dpi = lib.mkDefault 96; + services.xserver.dpi = lib.mkDefault 96; + + # this helps with some compatibility + hardware.pulseaudio.daemon.config = { + "default-sample-rate" = "48000"; + }; + + # networking.networkmanager.ethernet.macAddress = "random"; + networking.networkmanager.wifi.macAddress = lib.mkDefault "random"; + networking.networkmanager.wifi.scanRandMacAddress = lib.mkDefault true; + + # Used for chromecast bullshit + networking.firewall.allowedUDPPortRanges = [ + { + from = 32768; + to = 60999; + } + ]; + + # Shit breaks without this lol + services.dbus.packages = [ pkgs.gnome3.dconf ]; + + # better default swap + boot.kernel.sysctl = { "vm.swappiness" = lib.mkDefault 45; }; + + # you probably want this system wide? + environment.systemPackages = with pkgs; [ + exfat + ]; + + # self explanatory + fuckingprint.enable = true; + + # Enable sound. + sound.enable = true; + hardware.pulseaudio.enable = lib.mkOverride 1100 true; + hardware.pulseaudio.support32Bit = lib.mkDefault true; + hardware.pulseaudio.zeroconf.discovery.enable = lib.mkDefault true; + hardware.pulseaudio.package = pkgs.pulseaudioFull; + hardware.pulseaudio.extraConfig = '' + load-module module-dbus-protocol + ''; + + # bluetooth + services.blueman.enable = true; + hardware.bluetooth.enable = true; + hardware.pulseaudio.extraModules = [ pkgs.pulseaudio-modules-bt ]; + hardware.bluetooth.config.General.Enable = "Source,Sink,Media,Socket"; + }; +} diff --git a/users/chekkie.nix b/users/chekkie.nix new file mode 100644 index 0000000..4bd53f7 --- /dev/null +++ b/users/chekkie.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + users.users.chekkie = { + isNormalUser = true; + useDefaultShell = true; + home = "/home/chekkie"; + + openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJJtUlHA/mz7BE/ePgJKM9ENc4qV9nSyefDQuVNHCf3FprhwDIp+gr8xABL/PYLg2UgADfl3L7VR/e/UG2joSN/lK0qq3O2H0LbMgfUEBOAbLGKTMOmev82ySHWxIKCFyYhS73qE+zGurc2SBe4jL9kS+zVIaZEvIpY30ZjUx6U3Edn9egqE5avloGSNufhMEJkgTXLZfSXvaKjZVUj7UVGNKERLXrvWAljnAfIL417vaQcrzlu9aiRSOlOfksACbwDP75Z/5r40w7kQjCA9Sonvhfhc6pngYGWyyhUtkbd9EeAkXeeM4D278YhWRl3dcTYIT5Y5rwVItsr+6mKBP3 chekkie@ChubbaBee" + ]; + }; +} diff --git a/users/glooder.nix b/users/glooder.nix new file mode 100644 index 0000000..8906c4d --- /dev/null +++ b/users/glooder.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + # config for me + users.users.glooder = { + isNormalUser = true; + useDefaultShell = true; + home = "/home/glooder"; + + openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVF3wvfIbyD4gEbHoqECkKCSHYozzfC5dsOsa0vS+xKiFt/ofPmvBiUYNPlFzH4mW8/wqtDJpzgiEIcAB/UM+LjvUW8W8emlGTJ9VZYbsEQVCOJ+u8pJ1JfXBRCzjCmwTITzgDXzuNb+x3bla+KZUk71gbrH2i8z9Ih+RzpDVAhBYPq2ixVjjFhykseaj3rzy21D0yFgsIn13Fmirurlw9fas9puzQRmFDRXlpsUOWvn9m+CtnhKNkl1hjCE1v92h+G0nGzFg9cmA9ZwXhY/6/MGWfsTeozbGyLKUesRAhVPTsdK6wEm3vk2R0Sw0iX7nlp2/76+qIcIHIOjUBjlTN glooder@subm4rine" + ]; + }; +} diff --git a/users/notgne2.nix b/users/notgne2.nix new file mode 100644 index 0000000..92abf96 --- /dev/null +++ b/users/notgne2.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + nix.trustedUsers = [ "notgne2" ]; + + users.users.notgne2 = { + isNormalUser = true; + shell = pkgs.fish; + home = "/home/notgne2"; + description = "notgne2"; + + openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6QX3kMz1z3+QrMZQldgc2Flp+YcxDGWyGp3umdGgGhI3b91IZoOpgxrKFa/XPCa37ysrrMn2z15qR0JazghQOXAPbRbf6ZZ7H4sYDhk8D6O9/1Kcpm1UTJtcz3I3/Da9RvM9f+2biknP2lQEyZN1rW8F/olMQ0rB5QUoJBpZxGnkGH3XXdRf7DAi+kZTQyrsnoWFtJvjKe1kzmXC6xyVtwDHPgQjDA7hD5dGbceMtIge5ZW3KFoQJLO/gWsOR+NXRaBy1cmYhaCW7i7e0+409IUWR5fwWyTHTKcXSLusZcbc1JQItJVkiUcDk0slLS9RT8Leg9OpbRrqJ9oDJO+DV notgne2@peppa" + ]; + }; +}