From 70c3449f036993c7712922f560ed940420a91403 Mon Sep 17 00:00:00 2001 From: pro100ton Date: Sat, 2 Nov 2024 14:05:10 +0300 Subject: [PATCH] Initial migration --- .zshrc | 116 ++ MANIFEST.md | 3 + README.md | 1 + i3/config | 224 +++ mint/README.md | 9 + mint/cinnamon.css | 1756 +++++++++++++++++ mint/zshrc | 121 ++ neovim/Dockerfile | 26 + neovim/README.md | 36 + neovim/init.lua | 3 + neovim/lua/t0xa/core/options.lua | 40 + neovim/lua/t0xa/lazy.lua | 25 + neovim/lua/t0xa/plugins/autopairs.lua | 31 + neovim/lua/t0xa/plugins/blame.lua | 6 + neovim/lua/t0xa/plugins/colorscheme.lua | 16 + .../t0xa/plugins/colorschemes/kanagawa.lua | 3 + neovim/lua/t0xa/plugins/comment.lua | 19 + neovim/lua/t0xa/plugins/dressing.lua | 4 + neovim/lua/t0xa/plugins/lsp/lspconfig.lua | 109 + neovim/lua/t0xa/plugins/lsp/mason.lua | 54 + neovim/lua/t0xa/plugins/lualine.lua | 22 + neovim/lua/t0xa/plugins/neogen.lua | 15 + neovim/lua/t0xa/plugins/none-ls.lua | 21 + neovim/lua/t0xa/plugins/nvim-cmp.lua | 64 + neovim/lua/t0xa/plugins/nvim-tree.lua | 40 + neovim/lua/t0xa/plugins/plenary.lua | 3 + neovim/lua/t0xa/plugins/telescope.lua | 38 + neovim/lua/t0xa/plugins/todo-comments.lua | 21 + neovim/lua/t0xa/plugins/treesitter.lua | 66 + .../lua/t0xa/plugins/vim-tmux-navigator.lua | 17 + neovim/lua/t0xa/plugins/which-key.lua | 19 + neovim/snippets/package.json | 15 + neovim/snippets/python.json | 26 + polybar/config.ini | 254 +++ polybar/launch.sh | 22 + scripts/README.md | 11 + scripts/db_dropper | 40 + skhd/skhdrc | 54 + t1/front_dockerized/Dockerfile | 19 + t1/front_dockerized/README.md | 30 + t1/front_dockerized/nginx.conf | 55 + tmux/README.md | 4 + tmux/tmux.conf | 35 + yabai/yabairc | 15 + 44 files changed, 3508 insertions(+) create mode 100644 .zshrc create mode 100644 MANIFEST.md create mode 100644 README.md create mode 100644 i3/config create mode 100644 mint/README.md create mode 100644 mint/cinnamon.css create mode 100644 mint/zshrc create mode 100644 neovim/Dockerfile create mode 100644 neovim/README.md create mode 100644 neovim/init.lua create mode 100644 neovim/lua/t0xa/core/options.lua create mode 100644 neovim/lua/t0xa/lazy.lua create mode 100644 neovim/lua/t0xa/plugins/autopairs.lua create mode 100644 neovim/lua/t0xa/plugins/blame.lua create mode 100644 neovim/lua/t0xa/plugins/colorscheme.lua create mode 100644 neovim/lua/t0xa/plugins/colorschemes/kanagawa.lua create mode 100644 neovim/lua/t0xa/plugins/comment.lua create mode 100644 neovim/lua/t0xa/plugins/dressing.lua create mode 100644 neovim/lua/t0xa/plugins/lsp/lspconfig.lua create mode 100644 neovim/lua/t0xa/plugins/lsp/mason.lua create mode 100644 neovim/lua/t0xa/plugins/lualine.lua create mode 100644 neovim/lua/t0xa/plugins/neogen.lua create mode 100644 neovim/lua/t0xa/plugins/none-ls.lua create mode 100644 neovim/lua/t0xa/plugins/nvim-cmp.lua create mode 100644 neovim/lua/t0xa/plugins/nvim-tree.lua create mode 100644 neovim/lua/t0xa/plugins/plenary.lua create mode 100644 neovim/lua/t0xa/plugins/telescope.lua create mode 100644 neovim/lua/t0xa/plugins/todo-comments.lua create mode 100644 neovim/lua/t0xa/plugins/treesitter.lua create mode 100644 neovim/lua/t0xa/plugins/vim-tmux-navigator.lua create mode 100644 neovim/lua/t0xa/plugins/which-key.lua create mode 100644 neovim/snippets/package.json create mode 100644 neovim/snippets/python.json create mode 100644 polybar/config.ini create mode 100755 polybar/launch.sh create mode 100644 scripts/README.md create mode 100755 scripts/db_dropper create mode 100644 skhd/skhdrc create mode 100644 t1/front_dockerized/Dockerfile create mode 100644 t1/front_dockerized/README.md create mode 100644 t1/front_dockerized/nginx.conf create mode 100644 tmux/README.md create mode 100644 tmux/tmux.conf create mode 100644 yabai/yabairc diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..ea9a832 --- /dev/null +++ b/.zshrc @@ -0,0 +1,116 @@ +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. +export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +ZSH_THEME="powerlevel10k/powerlevel10k" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(git vi-mode) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +alias vpsz="ssh root@185.241.55.216" +alias prnv="poetry run nvim" +alias remote_astra="ssh t0xa@172.31.142.161" +alias remote_sup="ssh t0xa@172.31.142.124" +alias air='~/go/bin/air' +# alias ohmyzsh="mate ~/.oh-my-zsh" + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +export PATH=$PATH:/Users/antonsalimov/go/bin diff --git a/MANIFEST.md b/MANIFEST.md new file mode 100644 index 0000000..f0abe68 --- /dev/null +++ b/MANIFEST.md @@ -0,0 +1,3 @@ +# Yabai + skhd + +- [Видос с базовой настройкой](https://www.youtube.com/watch?v=k94qImbFKWE) diff --git a/README.md b/README.md new file mode 100644 index 0000000..6214172 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Dot-files collection for various applications diff --git a/i3/config b/i3/config new file mode 100644 index 0000000..6fbd891 --- /dev/null +++ b/i3/config @@ -0,0 +1,224 @@ +# This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout some time, delete +# this file and re-run i3-config-wizard(1). +# + +# i3 config file (v4) +# +# Please see https://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:monospace 8 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# Start XDG autostart .desktop files using dex. See also +# https://wiki.archlinux.org/index.php/XDG_Autostart +exec --no-startup-id dex --autostart --environment i3 + +# The combination of xss-lock, nm-applet and pactl is a popular choice, so +# they are included here as an example. Modify as you see fit. + +# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the +# screen before suspend. Use loginctl lock-session to lock your screen. +exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork + +# NetworkManager is the most popular way to manage wireless networks on Linux, +# and nm-applet is a desktop environment-independent system tray GUI for it. +exec --no-startup-id nm-applet + +# Use pactl to adjust volume in PulseAudio. +set $refresh_i3status killall -SIGUSR1 i3status +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec alacritty + +# Screenshots +bindsym Mod1+Shift+A exec "/usr/bin/flameshot gui" + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id dmenu_run +# A more modern dmenu replacement is rofi: +# bindcode $mod+40 exec "rofi -modi drun,run -show drun" +# There also is i3-dmenu-desktop which only displays applications shipping a +# .desktop file. It is a wrapper around dmenu, so you need that installed. +# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop + +# change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+b split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +set $ws1 "1" +set $ws2 "2" +set $ws3 "3" +set $ws4 "4" +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9" +set $ws10 "10" + +# switch to workspace +bindsym $mod+1 workspace number $ws1 +bindsym $mod+2 workspace number $ws2 +bindsym $mod+3 workspace number $ws3 +bindsym $mod+4 workspace number $ws4 +bindsym $mod+5 workspace number $ws5 +bindsym $mod+6 workspace number $ws6 +bindsym $mod+7 workspace number $ws7 +bindsym $mod+8 workspace number $ws8 +bindsym $mod+9 workspace number $ws9 +bindsym $mod+0 workspace number $ws10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace number $ws1 +bindsym $mod+Shift+2 move container to workspace number $ws2 +bindsym $mod+Shift+3 move container to workspace number $ws3 +bindsym $mod+Shift+4 move container to workspace number $ws4 +bindsym $mod+Shift+5 move container to workspace number $ws5 +bindsym $mod+Shift+6 move container to workspace number $ws6 +bindsym $mod+Shift+7 move container to workspace number $ws7 +bindsym $mod+Shift+8 move container to workspace number $ws8 +bindsym $mod+Shift+9 move container to workspace number $ws9 +bindsym $mod+Shift+0 move container to workspace number $ws10 + +# reload the configuration file +bindsym $mod+Shift+c reload +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 pph + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape or $mod+r + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} + +bindsym $mod+r mode "resize" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +#bar { +# status_command i3status +# font pango:JetBrainsMonoNL Nerd Font Mono 10 +#} + +# Polybar settings. Allow obly i3bar or polybar at one time +exec_always --no-startup-id $HOME/.config/polybar/launch.sh + +# Set gaps between windows +# Works only on i3 4.22+ version +gaps inner 6 + +# Change layout language +exec --no-startup-id setxkbmap -model pc105 -layout us,ru -option grp:alt_space_toggle + +# Configure workspaces on monitors +workspace 1 output DP-2 +workspace 3 output DP-2 +workspace 2 output DP-4 +workspace 4 output DP-4 + +# Set font +font pango:JetBrainsMonoNL Nerd Font Mono 10 + +# Set theme +default_border pixel 2 + +# class border backgr. text indicator child_border +client.focused #FB8B24 #272727 #FB8B24 #272727 #FB8B24 +client.focused_inactive #333333 #626262 #FB8B24 #272727 #5f676a +client.unfocused #333333 #272727 #888888 #292d2e #222222 +client.urgent #2f343a #900000 #ffffff #900000 #900000 +client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c + +client.background #ffffff + +# Lockscreen binding +bindsym Control+Mod1+q exec "i3lock -c 000000" diff --git a/mint/README.md b/mint/README.md new file mode 100644 index 0000000..763c274 --- /dev/null +++ b/mint/README.md @@ -0,0 +1,9 @@ +# cinnamon.css +Это файл темы, который я настраивал для своей оболочки cinnamon +Для его применения необходимо: +1. Выбрать тему в меню настроек темы +2. Перейти в папку `/usr/share/themes//cinnamon/` +3. Открыть на редактирование или заменить файл `cinnamon.css` на файл в репо +# zshrc +Данный файл с настройками окружения `zsh`. +Данный файл находится в `home` директории: `~/` \ No newline at end of file diff --git a/mint/cinnamon.css b/mint/cinnamon.css new file mode 100644 index 0000000..2cb29f1 --- /dev/null +++ b/mint/cinnamon.css @@ -0,0 +1,1756 @@ +stage { + color: rgba(255, 255, 255, 0.87); } + +.label-shadow { + color: rgba(0, 0, 0, 0); } + +.sound-button, .modal-dialog-button-box .modal-dialog-button, .notification-button, .notification-icon-button, .popup-menu #notification .notification-button, .popup-menu #notification .notification-icon-button { + min-height: 20px; + padding: 5px 32px; + transition-duration: 0; + color: rgba(255, 255, 255, 0.87); + background-color: #454545; + border: 1px solid #202020; + box-shadow: inset 0 2px 4px rgba(69, 69, 69, 0.05); } + .sound-button, .modal-dialog-button-box .modal-dialog-button, .notification-button, .notification-icon-button, .popup-menu #notification .notification-button, .popup-menu #notification .notification-icon-button { + border-radius: 2px; } + .sound-button:focus, .modal-dialog-button-box .modal-dialog-button:focus, .notification-button:focus, .notification-icon-button:focus, .popup-menu #notification .notification-button:focus, .popup-menu #notification .notification-icon-button:focus { + color: rgba(255, 255, 255, 0.87); + background-color: #454545; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px rgba(69, 69, 69, 0.05); } + .sound-button:hover, .modal-dialog-button-box .modal-dialog-button:hover, .notification-button:hover, .notification-icon-button:hover, .popup-menu #notification .notification-button:hover, .popup-menu #notification .notification-icon-button:hover { + color: rgba(255, 255, 255, 0.87); + background-color: #525252; + border: 1px solid #202020; + box-shadow: inset 0 2px 4px rgba(82, 82, 82, 0.05); } + .sound-button:hover:focus, .modal-dialog-button-box .modal-dialog-button:hover:focus, .notification-button:hover:focus, .notification-icon-button:hover:focus, .popup-menu #notification .notification-button:hover:focus, .popup-menu #notification .notification-icon-button:hover:focus { + color: rgba(255, 255, 255, 0.87); + background-color: #525252; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px rgba(69, 69, 69, 0.05); } + .sound-button:active, .modal-dialog-button-box .modal-dialog-button:active, .notification-button:active, .notification-icon-button:active, .popup-menu #notification .notification-button:active, .popup-menu #notification .notification-icon-button:active { + color: #ffffff; + background-color: #199ca8; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px #199ca8; } + .sound-button:insensitive, .modal-dialog-button-box .modal-dialog-button:insensitive, .notification-button:insensitive, .notification-icon-button:insensitive, .popup-menu #notification .notification-button:insensitive, .popup-menu #notification .notification-icon-button:insensitive { + color: rgba(255, 255, 255, 0.32); + border: 1px solid rgba(32, 32, 32, 0.55); + background-color: rgba(69, 69, 69, 0.55); + box-shadow: inset 0 2px 4px rgba(69, 69, 69, 0.05); } + +#menu-search-entry, .popup-menu #notification StEntry { + padding: 7px; + caret-size: 1px; + selection-background-color: #199ca8; + selected-color: #ffffff; + transition-duration: 300ms; + border-radius: 3px; + color: #D3D3D3; + background-color: #404040; + border: 1px solid #202020; + box-shadow: inset 0 2px 4px rgba(64, 64, 64, 0.05); } + #menu-search-entry:focus, .popup-menu #notification StEntry:focus, #menu-search-entry:hover, .popup-menu #notification StEntry:hover { + color: rgba(255, 255, 255, 0.87); + background-color: #404040; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px rgba(64, 64, 64, 0.05); } + #menu-search-entry:insensitive, .popup-menu #notification StEntry:insensitive { + color: rgba(255, 255, 255, 0.32); + background-color: #383838; + border-color: 1px solid #272727; + box-shadow: inset 0 2px 4px rgba(56, 56, 56, 0.05); } + #menu-search-entry StIcon.capslock-warning, .popup-menu #notification StEntry StIcon.capslock-warning { + icon-size: 16px; + warning-color: #F27835; + padding: 0 4px; } + +.notification StEntry { + padding: 7px; + caret-size: 1px; + caret-color: #c3c3c3; + selection-background-color: #199ca8; + selected-color: #ffffff; + transition-duration: 300ms; + border-radius: 3px; + color: #c3c3c3; + background-color: rgba(109, 109, 109, 0.4); + border: 1px solid rgba(22, 22, 22, 0.4); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } + .notification StEntry:focus { + color: #ffffff; + background-color: #199ca8; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } + .notification StEntry:insensitive { + color: rgba(195, 195, 195, 0.55); + background-color: rgba(109, 109, 109, 0.25); + border: 1px solid rgba(22, 22, 22, 0.4); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } + +StScrollView.vfade { + -st-vfade-offset: 68px; } + +StScrollView.hfade { + -st-hfade-offset: 68px; } + +StScrollBar { + padding: 8px; } + StScrollView StScrollBar { + min-width: 5px; + min-height: 5px; } + StScrollBar StBin#trough { + background-color: rgba(64, 64, 64, 0.1); + border-radius: 8px; } + StScrollBar StButton#vhandle, StScrollBar StButton#hhandle { + border-radius: 2px; + background-color: rgba(118, 118, 118, 0.948); + border: 0px solid; + margin: 0px; } + StScrollBar StButton#vhandle:hover, StScrollBar StButton#hhandle:hover { + background-color: rgba(99, 99, 99, 0.961); } + StScrollBar StButton#vhandle:active, StScrollBar StButton#hhandle:active { + background-color: #199ca8; } + +.separator { + -gradient-height: 1px; + -gradient-start: rgba(0, 0, 0, 0); + -gradient-end: rgba(0, 0, 0, 0); + -margin-horizontal: 1.5em; + height: 1em; } + +.ripple-pointer-location { + width: 50px; + height: 50px; + border-radius: 25px; + background-color: rgba(25, 156, 168, 0.3); + box-shadow: 0 0 2px 2px #199ca8; } + +.popup-slider-menu-item, +.slider { + -slider-height: 0.3em; + -slider-background-color: #202020; + -slider-border-color: rgba(47, 47, 47, 0.3); + -slider-active-background-color: #199ca8; + -slider-active-border-color: rgba(47, 47, 47, 0.3); + -slider-border-width: 1px; + -slider-handle-radius: 0.5em; + height: 1em; + min-width: 15em; + border: 0 solid transparent; + border-right-width: 1px; + border-left-width: 5px; } + +.check-box CinnamonGenericContainer { + spacing: .2em; + min-height: 30px; + padding-top: 2px; } + +.check-box StLabel { + font-weight: normal; } + +.check-box StBin { + width: 16px; + height: 16px; + background-image: url("dark-assets/checkbox/checkbox-unchecked.svg"); } + +.check-box:focus StBin { + background-image: url("dark-assets/checkbox/checkbox-unchecked-focused.svg"); } + +.check-box:checked StBin { + background-image: url("dark-assets/checkbox/checkbox-checked.svg"); } + +.check-box:focus:checked StBin { + background-image: url("dark-assets/checkbox/checkbox-checked-focused.svg"); } + +.radiobutton CinnamonGenericContainer { + spacing: .2em; + height: 26px; + padding-top: 2px; } + +.radiobutton StLabel { + padding-top: 4px; + font-size: 0.9em; + box-shadow: none; } + +.radiobutton StBin { + width: 16px; + height: 16px; + background-image: url("dark-assets/checkbox/radio-unchecked.svg"); } + +.radiobutton:focus StBin { + background-image: url("dark-assets/checkbox/radio-unchecked.svg"); } + +.radiobutton:checked StBin { + background-image: url("dark-assets/checkbox/radio-checked.svg"); } + +.radiobutton:focus:checked StBin { + background-image: url("dark-assets/checkbox/radio-checked.svg"); } + +.toggle-switch { + width: 50px; + height: 20px; + background-size: contain; } + .toggle-switch-us, .toggle-switch-intl { + background-image: url("dark-assets/switch/switch-off.svg"); } + .toggle-switch-us:checked, .toggle-switch-intl:checked { + background-image: url("dark-assets/switch/switch-on.svg"); } + +.cinnamon-link { + color: #44d6e3; + text-decoration: underline; } + .cinnamon-link:hover { + color: #70e0ea; } + +#Tooltip { + border: none; + border-radius: 5px; + padding: 12px 12px; + background-color: rgba(24, 148, 160, 0.95); + color: #ffffff; + font-size: 1em; + font-weight: normal; + text-align: center; + margin: 3px; } + +#LookingGlassDialog { + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + border-radius: 3px; + background-color: #2f2f2f; + spacing: 4px; + padding: 8px; } + +.menu { + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + border-radius: 3px; + background-color: rgba(47, 47, 47, 0.99); } + .menu.top { + border-radius: 0 0 3px 3px; } + .menu.bottom { + border-radius: 3px 3px 0 0; } + .menu.left { + border-radius: 0 3px 3px 0; } + .menu.right { + border-radius: 3px 0 0 3px; } + +.popup-sub-menu { + background-color: #404040; + box-shadow: none; } + .popup-sub-menu .popup-menu-item:ltr { + padding-right: 1.75em; } + .popup-sub-menu .popup-menu-item:rtl { + padding-left: 1.75em; } + .popup-sub-menu StScrollBar { + padding: 4px; } + .popup-sub-menu StScrollBar StBin#trough, .popup-sub-menu StScrollBar StBin#vhandle { + border-width: 0; } + +.popup-menu-content { + padding: 1em 0em 1em 0em; } + +.popup-menu-item { + padding: .4em 1.75em; + spacing: 1em; + border-left-width: 0; + border-right-width: 0; } + .popup-menu-item:active { + color: #ffffff; + background-color: #525352; } + .popup-menu-item:insensitive { + color: rgba(255, 255, 255, 0.37); + background: none; } + +.popup-inactive-menu-item { + color: rgba(255, 255, 255, 0.87); } + .popup-inactive-menu-item:insensitive { + color: rgba(255, 255, 255, 0.32); } + +/* This is for popup menus in Cinnamon versions < 3.2 */ +.popup-menu { + color: white; + color: rgba(255, 255, 255, 0.87); } + .popup-menu-arrow { + icon-size: 16px; } + .popup-menu .popup-sub-menu { + background-color: #404040; + box-shadow: none; } + .popup-menu .popup-sub-menu .popup-menu-item:ltr { + padding-right: 1.75em; } + .popup-menu .popup-sub-menu .popup-menu-item:rtl { + padding-left: 1.75em; } + .popup-menu .popup-sub-menu StScrollBar { + padding: 4px; } + .popup-menu .popup-sub-menu StScrollBar StBin#trough, .popup-menu .popup-sub-menu StScrollBar StBin#vhandle { + border-width: 0; } + .popup-menu .popup-menu-content { + padding: 1em 0em 1em 0em; } + .popup-menu .popup-menu-item { + padding: .4em 1.75em; + spacing: 1em; + border: 1px solid transparent; + border-left-width: 0; + border-right-width: 0; } + .popup-menu .popup-menu-item:active { + color: rgba(255, 255, 255, 0.87); + border-color: rgba(255, 255, 255, 0); + background-color: rgba(255, 255, 255, 0); } + .popup-menu .popup-menu-item:insensitive { + color: rgba(255, 255, 255, 0.37); + background: none; } + .popup-menu .popup-inactive-menu-item { + color: rgba(255, 255, 255, 0.87); } + .popup-menu .popup-inactive-menu-item:insensitive { + color: rgba(255, 255, 255, 0.32); } + .popup-menu-icon { + icon-size: 16px; } + +.popup-menu-boxpointer { + -arrow-border-radius: 3px; + -arrow-background-color: #2f2f2f; + -arrow-border-width: 1px; + -arrow-border-color: #202020; + -arrow-base: 21px; + -arrow-rise: 9px; + -boxpointer-gap: 2px; } + +/*Scale view context menu*/ +.popup-combo-menu { + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + border-radius: 3px; + background-color: #404040; + box-shadow: none; + padding: 1em 0em 1em 0em; } + +.popup-combobox-item { + spacing: 1em; + padding: .4em 1.75em; + border: 1px solid transparent; + border-left-width: 0; + border-right-width: 0; } + +.popup-separator-menu-item { + -gradient-height: 1px; + -gradient-start: #202020; + -gradient-end: #202020; + -margin-horizontal: 0; + height: 1px; } + +.popup-alternating-menu-item:alternate { + font-weight: normal; } + +.popup-device-menu-item { + spacing: .5em; } + +.popup-subtitle-menu-item { + font-weight: normal; } + +.nm-menu-item-icons { + spacing: .5em; } + +#panel { + font-weight: bold; + /* sets the height of horizontal panels */ + height: 40px; + /* sets the width of vertical panels */ + width: 32px; + /* Set the symbolic foreground color for icons, and importantly, the system tray applet icons */ + color: rgba(255, 255, 255, 0.87); } + #panelLeft { + spacing: 4px; } + #panelLeft:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(255, 0, 0, 0.05); + background-gradient-end: rgba(255, 0, 0, 0.2); } + #panelLeft:ltr { + padding-right: 4px; } + #panelLeft:rtl { + padding-left: 4px; } + #panelLeft.vertical { + padding: 0px; } + #panelLeft.vertical:ltr { + padding-right: 0px; } + #panelLeft.vertical:rtl { + padding-left: 0px; } + #panelRight:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(0, 0, 255, 0.05); + background-gradient-end: rgba(0, 0, 255, 0.2); } + #panelRight:ltr { + padding-left: 4px; + spacing: 0px; } + #panelRight:rtl { + padding-right: 4px; + spacing: 0px; } + #panelRight.vertical { + padding: 0px; } + #panelRight.vertical:ltr { + padding-right: 0px; } + #panelRight.vertical:rtl { + padding-left: 0px; } + #panelCenter { + spacing: 4px; } + #panelCenter:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(0, 255, 0, 0.05); + background-gradient-end: rgba(0, 255, 0, 0.2); } + #panel:highlight { + border-image: none; + background-color: rgba(252, 65, 56, 0.5); } + +.panelLeft { + spacing: 4px; } + .panelLeft:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(255, 0, 0, 0.05); + background-gradient-end: rgba(255, 0, 0, 0.2); } + .panelLeft:ltr { + padding-right: 4px; } + .panelLeft:rtl { + padding-left: 4px; } + .panelLeft.vertical { + padding: 0px; } + .panelLeft.vertical:ltr { + padding-right: 0px; } + .panelLeft.vertical:rtl { + padding-left: 0px; } + +.panelRight:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(0, 0, 255, 0.05); + background-gradient-end: rgba(0, 0, 255, 0.2); } + +.panelRight:ltr { + padding-left: 4px; + spacing: 0px; } + +.panelRight:rtl { + padding-right: 4px; + spacing: 0px; } + +.panelRight.vertical { + padding: 0px; } + .panelRight.vertical:ltr { + padding-left: 0px; + spacing: 0px; } + .panelRight.vertical:rtl { + padding-right: 0px; + spacing: 0px; } + +.panelCenter { + spacing: 4px; } + .panelCenter.vertical { + padding-left: 0px; + padding-right: 0px; } + .panelCenter:dnd { + background-gradient-direction: vertical; + background-gradient-start: rgba(0, 255, 0, 0.05); + background-gradient-end: rgba(0, 255, 0, 0.2); } + +.panel-top, .panel-bottom, .panel-left, .panel-right { + color: #ffffff; + border: none; + background-color: rgba(0, 51, 48, 0.49); + font-size: 1em; + padding: 0px; } + +.panel-top { + box-shadow: 0 1px #202020; } + +.panel-bottom { + box-shadow: 0 -1px #202020; } + +.panel-left { + box-shadow: 1px 0 #202020; } + +.panel-right { + box-shadow: -1px 0 #202020; } + +.panel-dummy { + background-color: rgba(252, 65, 56, 0.5); } + .panel-dummy:entered { + background-color: rgba(252, 65, 56, 0.6); } + +.panel-status-button { + border-width: 0; + -natural-hpadding: 3px; + -minimum-hpadding: 3px; + font-weight: bold; + color: rgba(255, 255, 255, 0.87); } + +.panel-button { + -natural-hpadding: 6px; + -minimum-hpadding: 2px; + font-weight: bold; + color: green; + transition-duration: 100; } + +.system-status-icon { + icon-size: 16px; + padding: 0 1px; } + .system-status-icon.warning { + color: #F27835; } + .system-status-icon.error { + color: #FC4138; } + +#overview { + spacing: 12px; } + +.window-caption { + background-color: #353535; + border: 1px solid #353535; + color: #c3c3c3; + spacing: 8px; + border-radius: 2px; + font-size: 0.9em; + padding: 5px 8px; + -cinnamon-caption-spacing: 8px; } + .window-caption:focus { + background-color: #199ca8; + color: #ffffff; + border: 1px solid #199ca8; } + +.window-border { + border: 3px #199ca8; + border-radius: 2px; + background-color: rgba(255, 255, 255, 0.05); + /* Cover rounded corners and some bad adjustment gaps */ + box-shadow: 0 0 0 1px #199ca8 inset; } + +.overview-empty-placeholder { + color: #ffffff; + font-size: 2em; } + +.expo-workspaces-name-entry, +.expo-workspaces-name-entry#selected { + height: 1.5em; + border-radius: 2px; + font-size: 1em; + padding: 5px 8px; + -cinnamon-caption-spacing: 4px; + color: #c3c3c3; + background-color: rgba(109, 109, 109, 0.4); + border: 1px solid rgba(22, 22, 22, 0.4); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } + .expo-workspaces-name-entry:focus, + .expo-workspaces-name-entry#selected:focus { + border: 1px solid #199ca8; + background-color: #199ca8; + color: #ffffff; + font-style: italic; + transition-duration: 300; + selection-background-color: #ffffff; + selected-color: #199ca8; } + +.expo-workspace-thumbnail-frame { + border: 4px solid rgba(255, 255, 255, 0); + background-color: rgba(255, 255, 255, 0); + border-radius: 2px; } + .expo-workspace-thumbnail-frame#active { + border: 4px solid #199ca8; + background-color: black; + border-radius: 2px; } + +.expo-background { + background-color: #353535; } + +.workspace-thumbnails { + spacing: 26px; } + .workspace-thumbnails-background, .workspace-thumbnails-background:rtl { + padding: 8px; } + +.workspace-add-button { + background-image: url("common-assets/misc/add-workspace.svg"); + height: 200px; + width: 35px; + transition-duration: 100; } + .workspace-add-button:hover { + background-image: url("common-assets/misc/add-workspace-hover.svg"); + transition-duration: 100; } + .workspace-add-button:active { + background-image: url("common-assets/misc/add-workspace-active.svg"); + transition-duration: 100; } + +.workspace-overview-background-shade { + background-color: rgba(0, 0, 0, 0.5); } + +.workspace-close-button, +.window-close { + background-image: url("common-assets/misc/close.svg"); + background-size: 26px; + height: 26px; + width: 26px; + -cinnamon-close-overlap: 12px; } + .workspace-close-button:hover, + .window-close:hover { + background-image: url("common-assets/misc/close-hover.svg"); + background-size: 26px; + height: 26px; + width: 26px; } + .workspace-close-button:active, + .window-close:active { + background-image: url("common-assets/misc/close-active.svg"); + background-size: 26px; + height: 26px; + width: 26px; } + +.window-close-area { + background-image: url("common-assets/misc/trash-icon.svg"); + height: 120px; + width: 400px; } + +.calendar { + spacing-rows: 0; + spacing-columns: 0; } + +.calendar-main-box { + margin: 0 .8em .5em .8em; } + +.calendar-events-main-box { + height: 300px; + margin-right: .5em; + padding: .5em; + min-width: 350px; + border: 1px solid #202020; + background-color: #404040; } + +.calendar-events-no-events-button { + margin: 6px 0 6px 0; + padding: 6px; } + .calendar-events-no-events-button:hover { + background-color: #199ca8; } + .calendar-events-no-events-button:hover .calendar-events-no-events-icon, + .calendar-events-no-events-button:hover .calendar-events-no-events-label { + color: #ffffff; } + +.calendar-events-no-events-icon, +.calendar-events-no-events-label { + font-weight: bold; + color: rgba(255, 255, 255, 0.87); + text-align: center; } + +.calendar-events-date-label { + padding: .1em .1em .5em .1em; + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + text-align: center; } + +.calendar-events-event-container { + padding: 0; } + +.calendar-event-button { + border: 1px solid rgba(0, 0, 0, 0); } + .calendar-event-button .calendar-event-time-past { + color: rgba(255, 255, 255, 0.27); + font-weight: bold; + text-align: left; + margin-bottom: .2em; } + .calendar-event-button .calendar-event-time-present { + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + text-align: left; + margin-bottom: .2em; } + .calendar-event-button .calendar-event-time-present:all-day { + color: #199ca8; } + .calendar-event-button .calendar-event-time-future { + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + text-align: left; + margin-bottom: .2em; } + .calendar-event-button .calendar-event-summary { + color: rgba(255, 255, 255, 0.87); + text-align: left; + width: 200px; } + .calendar-event-button .calendar-event-countdown { + text-align: right; + margin-bottom: .6em; + color: rgba(255, 255, 255, 0.87); } + .calendar-event-button .calendar-event-countdown:soon { + font-weight: bold; } + .calendar-event-button .calendar-event-countdown:imminent { + font-weight: bold; + color: #F27835; } + .calendar-event-button .calendar-event-countdown:current { + font-weight: bold; + color: #199ca8; } + .calendar-event-button:hover { + background-color: #199ca8; + border: 1px solid #202020; } + .calendar-event-button:hover .calendar-event-time-past, + .calendar-event-button:hover .calendar-event-time-present, + .calendar-event-button:hover .calendar-event-time-future, + .calendar-event-button:hover .calendar-event-summary { + color: #ffffff; } + .calendar-event-button:hover .calendar-event-countdown { + text-align: right; + margin-bottom: .6em; + color: #ffffff; } + .calendar-event-button:hover .calendar-event-countdown:soon { + font-weight: bold; } + .calendar-event-button:hover .calendar-event-countdown:imminent { + font-weight: bold; } + .calendar-event-button:hover .calendar-event-countdown:current { + font-weight: bold; } + +.calendar-event-color-strip { + width: 2px; } + +.calendar-today-home-button { + padding: 6px; } + +.calendar-today-day-label { + font-size: 1.75em; + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + text-align: center; + padding-bottom: .1em; } + +.calendar-today-date-label { + font-size: 1.1em; + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + text-align: center; } + +.calendar-today-home-button-enabled { + padding: 6px; } + .calendar-today-home-button-enabled:hover { + background-color: #199ca8; } + .calendar-today-home-button-enabled:hover .calendar-today-day-label { + color: #ffffff; } + .calendar-today-home-button-enabled:hover .calendar-today-date-label { + color: #ffffff; } + +.calendar-month-label { + color: rgba(255, 255, 255, 0.87); + font-weight: bold; + padding: 8px 0; } + +.calendar-change-month-back, +.calendar-change-month-forward { + width: 16px; + height: 16px; } + +.calendar-change-month-back { + background-image: url("common-assets/misc/calendar-arrow-left.svg"); } + .calendar-change-month-back:focus, .calendar-change-month-back:hover { + background-image: url("common-assets/misc/calendar-arrow-left-hover.svg"); } + .calendar-change-month-back:active { + background-image: url("common-assets/misc/calendar-arrow-left.svg"); } + .calendar-change-month-back:rtl { + background-image: url("common-assets/misc/calendar-arrow-right.svg"); } + .calendar-change-month-back:rtl:focus, .calendar-change-month-back:rtl:hover { + background-image: url("common-assets/misc/calendar-arrow-right-hover.svg"); } + .calendar-change-month-back:rtl:active { + background-image: url("common-assets/misc/calendar-arrow-right.svg"); } + +.calendar-change-month-forward { + background-image: url("common-assets/misc/calendar-arrow-right.svg"); } + .calendar-change-month-forward:focus, .calendar-change-month-forward:hover { + background-image: url("common-assets/misc/calendar-arrow-right-hover.svg"); } + .calendar-change-month-forward:active { + background-image: url("common-assets/misc/calendar-arrow-right.svg"); } + .calendar-change-month-forward:rtl { + background-image: url("common-assets/misc/calendar-arrow-left.svg"); } + .calendar-change-month-forward:rtl:focus, .calendar-change-month-forward:rtl:hover { + background-image: url("common-assets/misc/calendar-arrow-left-hover.svg"); } + .calendar-change-month-forward:rtl:active { + background-image: url("common-assets/misc/calendar-arrow-left.svg"); } + +.calendar-day-event-dot-box { + margin-top: 1.7em; + max-rows: 1; } + +.calendar-day-event-dot { + margin: 1px; + border-radius: 2px; + width: 4px; + height: 4px; } + +.calendar-day-base { + font-size: 1em; + text-align: center; + width: 2.2em; + height: 2.2em; + padding: 0.1em; } + .calendar-day-base:hover { + font-weight: bold; + color: #ffffff; + background-color: #199ca8; } + +.calendar-day-heading { + color: rgba(255, 255, 255, 0.72); + margin-top: 1em; + font-size: 1.05em; } + +.calendar-day { + border-width: 0; + color: rgba(255, 255, 255, 0.77); } + +.calendar-day-top { + border-top-width: 0; } + +.calendar-day-left { + border-left-width: 0; } + +.calendar-nonwork-day { + color: rgba(255, 255, 255, 0.87); + background-color: transparent; + font-weight: bold; } + +.calendar-today { + color: rgba(255, 255, 255, 0.87); + background-color: rgba(25, 156, 168, 0.4); + border-width: 0; } + .calendar-today:selected { + font-weight: bold; } + +.calendar-not-today { + color: rgba(255, 255, 255, 0.87); } + .calendar-not-today:selected { + font-weight: bold; + background-color: rgba(255, 255, 255, 0.27); } + .calendar-not-today:selected:hover { + font-weight: bold; + color: rgba(255, 255, 255, 0.87); } + +.calendar-other-month-day { + color: rgba(255, 255, 255, 0.17); + opacity: 1; } + +.calendar-other-month-day:hover { + color: #ffffff; + opacity: 1; } + +.calendar-week-number { + color: rgba(255, 255, 255, 0.72); + font-size: 0.8em; + margin-top: 0.8em; } + +#notification { + box-shadow: 0 1px 15px 4px #202020; + border-top-color: #199ca8; + border-top: 4px; + border-radius: 5px; + background-color: #004e4f; + padding: 13px; + spacing-rows: 10px; + spacing-columns: 10px; + margin-from-right-edge-of-screen: 1050px; + width: 34em; + color: rgba(255, 255, 255, 0.87); } + .popup-menu #notification { + color: rgba(255, 255, 255, 0.87); + border-image: url("dark-assets/misc/message.svg") 9 9 9 9; } + .popup-menu #notification .notification-button, .popup-menu #notification .notification-icon-button { + padding: 5px; } + #notification.multi-line-notification { + padding-bottom: 13px; + color: rgba(255, 255, 255, 0.87); } + #notification-scrollview { + max-height: 10em; } + #notification-scrollview > .top-shadow, #notification-scrollview > .bottom-shadow { + height: 1em; } + #notification-scrollview:ltr > StScrollBar { + padding-left: 6px; } + #notification-scrollview:rtl > StScrollBar { + padding-right: 6px; } + #notification-body { + spacing: 5px; } + #notification-actions { + spacing: 10px; } + +.notification-with-image { + min-height: 159px; + color: rgba(255, 255, 255, 0.87); } + +.notification-button, .notification-icon-button { + color: #ffffff; + background-color: #004e4f; + padding: 5px; } + +.notification-icon-button > StIcon { + icon-size: 32px; } + +#altTabPopup { + padding: 8px; + spacing: 16px; } + +.switcher-list { + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + background-color: #2f2f2f; + border-radius: 3px; + padding: 20px; } + .switcher-list > StBoxLayout { + padding: 4px; } + .switcher-list-item-container { + spacing: 8px; } + .switcher-list .item-box { + padding: 8px; + border-radius: 2px; } + .switcher-list .item-box:outlined { + padding: 8px; + border: 1px solid #199ca8; } + .switcher-list .item-box:selected { + color: #ffffff; + background-color: #199ca8; + border: 0px solid #199ca8; } + .switcher-list .thumbnail { + width: 256px; } + .switcher-list .thumbnail-box { + padding: 2px; + spacing: 4px; } + .switcher-list .separator { + width: 1px; + background: rgba(255, 255, 255, 0.2); } + +.switcher-arrow { + border-color: rgba(0, 0, 0, 0); + color: rgba(255, 255, 255, 0.87); } + .switcher-arrow:highlighted { + border-color: rgba(0, 0, 0, 0); + color: #ffffff; } + +.thumbnail-scroll-gradient-left { + background-color: rgba(0, 0, 0, 0); + border-radius: 24px; + border-radius-topright: 0px; + border-radius-bottomright: 0px; + width: 60px; } + +.thumbnail-scroll-gradient-right { + background-color: rgba(0, 0, 0, 0); + border-radius: 24px; + border-radius-topleft: 0px; + border-radius-bottomleft: 0px; + width: 60px; } + +.ripple-box { + width: 104px; + height: 104px; + background-image: url("common-assets/misc/corner-ripple.svg"); + background-size: contain; } + .ripple-box:rtl { + background-image: url("common-assets/misc/corner-ripple.svg"); } + +.lightbox { + background-color: rgba(0, 0, 0, 0.4); } + +.flashspot { + background-color: white; } + +.modal-dialog { + background-color: #2f2f2f; + border: 1px solid #202020; + border-radius: 3px; + padding: 5px 10px; } + .modal-dialog > StBoxLayout:first-child { + padding: 10px; } + .modal-dialog-button-box { + spacing: 0; + margin: 0px; + padding: 10px; + border: none; + background-color: #2f2f2f; } + .modal-dialog-button-box .modal-dialog-button { + padding-top: 0; + padding-bottom: 0; + height: 30px; } + .modal-dialog .confirm-dialog-title { + text-align: center; + font-weight: bold; + font-size: 1.3em; + padding-bottom: 12px; } + +.run-dialog { + padding: 10px 15px 10px 15px; + border: 1px solid #202020; + border-radius: 3px; + background-color: #2f2f2f; } + .run-dialog > * { + padding: 0; } + .run-dialog-label { + font-size: 1.3em; + font-weight: bold; + color: rgba(255, 255, 255, 0.87); + padding-bottom: 15px; + text-align: center; } + .run-dialog-description { + color: rgba(255, 255, 255, 0.87); + padding-top: 15px; + text-align: center; } + .run-dialog-description.error { + color: #FC4138; } + .run-dialog-completion-box { + padding-top: 5px; + padding-left: 15px; + font-size: 1em; } + .run-dialog-entry { + width: 21em; + height: 1.2em; + padding: 7px; + border-radius: 3px; + caret-color: #c3c3c3; + selected-color: #ffffff; + selection-background-color: #199ca8; + color: #c3c3c3; + background-color: rgba(109, 109, 109, 0.4); + border: 1px solid rgba(22, 22, 22, 0.4); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); } + .run-dialog-entry:focus { + color: rgba(255, 255, 255, 0.87); + background-color: #404040; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px rgba(64, 64, 64, 0.05); } + .run-dialog .modal-dialog-button-box { + border: none; + box-shadow: none; + background: none; } + +/* CinnamonMountOperation Dialogs */ +.cinnamon-mount-operation-icon { + icon-size: 48px; } + +.mount-password-reask { + color: #F27835; } + +.show-processes-dialog, +.mount-question-dialog { + spacing: 24px; } + .show-processes-dialog-subject, + .mount-question-dialog-subject { + padding-top: 10px; + padding-left: 17px; + padding-bottom: 6px; } + .show-processes-dialog-subject:rtl, + .mount-question-dialog-subject:rtl { + padding-left: 0px; + padding-right: 17px; } + .show-processes-dialog-description, + .mount-question-dialog-description { + padding-left: 17px; + width: 28em; } + .show-processes-dialog-description:rtl, + .mount-question-dialog-description:rtl { + padding-right: 17px; } + +.show-processes-dialog-app-list { + max-height: 200px; + padding-top: 24px; + padding-left: 49px; + padding-right: 32px; } + .show-processes-dialog-app-list:rtl { + padding-right: 49px; + padding-left: 32px; } + .show-processes-dialog-app-list-item { + color: #ccc; } + .show-processes-dialog-app-list-item:hover { + color: white; } + .show-processes-dialog-app-list-item:ltr { + padding-right: 1em; } + .show-processes-dialog-app-list-item:rtl { + padding-left: 1em; } + .show-processes-dialog-app-list-item-icon:ltr { + padding-right: 17px; } + .show-processes-dialog-app-list-item-icon:rtl { + padding-left: 17px; } + .show-processes-dialog-app-list-item-name { + font-size: 1.1em; } + +.magnifier-zoom-region { + border: 2px solid maroon; } + .magnifier-zoom-region .full-screen { + border-width: 0px; } + +#keyboard { + background-color: #353535; + border-width: 0; + border-top-width: 1px; + border-color: rgba(0, 0, 0, 0.4); } + +.keyboard-layout { + spacing: 10px; + padding: 10px; } + +.keyboard-row { + spacing: 15px; } + +.keyboard-key { + min-height: 2em; + min-width: 2em; + font-size: 1.4em; + font-weight: bold; + border-radius: 3px; + box-shadow: none; + color: #c3c3c3; + border: 1px solid #202020; + background-color: rgba(109, 109, 109, 0.4); } + .keyboard-key:hover { + color: #c3c3c3; + border: 1px solid rgba(2, 2, 2, 0.4); + background-color: rgba(127, 127, 127, 0.5); } + .keyboard-key:active, .keyboard-key:checked { + color: #ffffff; + border: 1px solid #199ca8; + background-color: #199ca8; } + .keyboard-key:grayed { + color: #606060; + border: 1px solid rgba(2, 2, 2, 0.4); + background-color: rgba(109, 109, 109, 0.25); } + +.keyboard-subkeys { + color: #c3c3c3; + padding: 5px; + -arrow-border-radius: 2px; + -arrow-background-color: #353535; + -arrow-border-width: 1px; + -arrow-border-color: rgba(0, 0, 0, 0.4); + -arrow-base: 20px; + -arrow-rise: 10px; + -boxpointer-gap: 5px; } + +.menu-favorites-box { + padding: 10px; + transition-duration: 300; + background-color: #333333; + border: 1px solid #202020; } + +.menu-favorites-button { + padding: .9em 1em; + border: 1px solid rgba(0, 0, 0, 0); + border-radius: 2px; } + .menu-favorites-button:hover { + background-color: #525352; } + +.menu-places-box { + padding: 10px; + border: 0px solid red; } + +.menu-places-button { + padding: 10px; } + +.menu-categories-box { + padding: 10px 30px 10px 30px; } + +.menu-applications-inner-box, .menu-applications-outer-box { + margin: 10px 10px 0 10px; } + +.menu-application-button { + padding: 7px; + border: 1px solid rgba(0, 0, 0, 0); } + .menu-application-button:highlighted { + font-weight: bold; } + .menu-application-button-selected { + padding: 7px; + color: #ffffff; + background-color: #525352; + border: 1px solid #202020; } + .menu-application-button-selected:highlighted { + font-weight: bold; } + .menu-application-button-label:ltr { + padding-left: 5px; } + .menu-application-button-label:rtl { + padding-right: 5px; } + +.menu-category-button { + padding: 7px; + border: 1px solid rgba(0, 0, 0, 0); } + .menu-category-button-selected { + padding: 7px; + color: #ffffff; + background-color: #525352; + border: 1px solid #202020; } + .menu-category-button:hover { + background-color: #3d3d3d; + border: 1px solid #292929; + border-radius: 0px; } + .menu-category-button-greyed { + padding: 7px; + color: rgba(255, 255, 255, 0.32); + border: 1px solid rgba(0, 0, 0, 0); } + .menu-category-button-label:ltr { + padding-left: 5px; } + .menu-category-button-label:rtl { + padding-right: 5px; } + +.menu-selected-app-box { + padding-right: 30px; + padding-left: 28px; + text-align: right; + height: 2.2em; } + .menu-selected-app-box:rtl { + padding-top: 10px; + height: 2.2em; } + +.menu-selected-app-title { + font-weight: bold; } + +.menu-selected-app-description { + max-width: 150px; } + +.menu-search-box:ltr { + padding-left: 30px; } + +.menu-search-box-rtl { + padding-right: 30px; } + +#menu-search-entry { + width: 250px; + min-height: 16px; + font-weight: normal; + caret-color: rgba(255, 255, 255, 0.87); } + +.menu-search-entry-icon { + icon-size: 1em; + color: rgba(255, 255, 255, 0.87); } + +/* Context menu (at the moment only for favorites) */ +.info-osd { + text-align: center; + font-weight: bold; + spacing: 1em; + padding: 16px; + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + border-radius: 5px; + background-color: #2f2f2f; } + +.restart-osd { + font-size: 1.6em; } + +.workspace-osd { + font-size: 4em; } + +.osd-window { + text-align: center; + font-weight: bold; + spacing: 1em; + padding: 20px; + color: rgba(255, 255, 255, 0.87); + background-color: #2f2f2f; + border: 1px solid #202020; + border-radius: 5px; } + .osd-window .osd-monitor-label { + font-size: 3em; } + .osd-window .level { + padding: 0; + height: 0.7em; + background-color: rgba(0, 0, 0, 0.5); + border-radius: 2px; } + .osd-window .level-bar { + border-radius: 2px; + background-color: #199ca8; } + +.window-list-box { + spacing: 6px; + padding-left: 10px; + padding-top: 1px; } + .window-list-box.vertical { + spacing: 2px; + padding-left: 0px; + padding-right: 0px; + padding-top: 10px; + padding-bottom: 10px; } + .window-list-box:highlight { + background-color: rgba(252, 65, 56, 0.5); } + +.window-list-item-label { + font-weight: bold; + width: 15em; + min-width: 5px; } + +.window-list-item-box { + font-weight: bold; + background-image: none; + padding-top: 0; + padding-left: 8px; + padding-right: 8px; + transition-duration: 100; + color: rgba(255, 255, 255, 0.67); } + .window-list-item-box.top, .window-list-item-box.bottom { + border-bottom-width: 2px; } + .window-list-item-box.top StLabel, .window-list-item-box.bottom StLabel { + padding-left: 2px; } + .window-list-item-box.right { + padding-left: 0px; + padding-right: 0px; + border-right-width: 2px; } + .window-list-item-box.right StBin { + padding-right: 0; } + .window-list-item-box.left { + padding-left: 0px; + padding-right: 0px; + border-left-width: 2px; } + .window-list-item-box.left StBin { + padding-left: 1px; } + .window-list-item-box:hover, .window-list-item-box:groupFocus { + color: rgba(255, 255, 255, 0.87); + background-color: rgba(255, 255, 255, 0.07); } + .window-list-item-box:active, .window-list-item-box:checked, .window-list-item-box:focus, .window-list-item-box:running { + color: rgba(255, 255, 255, 0.87); + border-color: #199ca8; + background-color: rgba(255, 255, 255, 0.07); } + .window-list-item-box .progress { + background-color: rgba(25, 156, 168, 0.8); } + +.window-list-item-demands-attention { + background-gradient-direction: vertical; + background-gradient-start: #F04A50; + background-gradient-end: #F04A50; } + +.window-list-preview { + spacing: 6px; + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + background-color: #2f2f2f; + border-radius: 3px; + padding: 6px 12px 12px 12px; + font-size: 1em; } + +.grouped-window-list-item-label { + font-weight: bold; + width: 15em; + min-width: 5px; } + +.grouped-window-list-item-box { + text-align: left; + font-weight: bold; + background-image: none; + padding-top: 0; + padding-left: 8px; + padding-right: 8px; + transition-duration: 100; + color: rgba(255, 255, 255, 0.67); } + .grouped-window-list-item-box.top, .grouped-window-list-item-box.bottom { + border-bottom-width: 2px; } + .grouped-window-list-item-box.top StLabel, .grouped-window-list-item-box.bottom StLabel { + padding-left: 2px; } + .grouped-window-list-item-box.right { + padding-left: 0px; + padding-right: 0px; + border-right-width: 2px; } + .grouped-window-list-item-box.right StBin { + padding-right: 0; } + .grouped-window-list-item-box.left { + padding-left: 0px; + padding-right: 0px; + border-left-width: 2px; } + .grouped-window-list-item-box.left StBin { + padding-left: 1px; } + .grouped-window-list-item-box:hover, .grouped-window-list-item-box:focus { + color: rgba(255, 255, 255, 0.87); + background-color: rgba(255, 255, 255, 0.17); } + .grouped-window-list-item-box:active, .grouped-window-list-item-box:checked { + color: rgba(255, 255, 255, 0.87); + border-color: #199ca8; } + .grouped-window-list-item-box .progress { + background-color: rgba(25, 156, 168, 0.8); } + +.grouped-window-list-item-demands-attention { + background-gradient-direction: vertical; + background-gradient-start: #F04A50; + background-gradient-end: #F04A50; } + +.grouped-window-list-thumbnail-label { + padding-left: 4px; } + +.grouped-window-list-number-label { + font-size: 0.8em; + z-index: 99; + color: #ffffff; } + +.grouped-window-list-badge { + border-radius: 9999px; + background-color: #199ca8; + margin: 0; } + +.grouped-window-list-button-label { + padding-left: 4px; } + +.grouped-window-list-thumbnail-alert { + background: rgba(255, 52, 52, 0.3); } + +.grouped-window-list-thumbnail-menu { + color: rgba(255, 255, 255, 0.87); + border: 1px solid #202020; + background-color: #2f2f2f; + border-radius: 3px; + padding: 0px; } + .grouped-window-list-thumbnail-menu > StBoxLayout { + padding: 4px; } + .grouped-window-list-thumbnail-menu .item-box { + padding: 10px; + border-radius: 2px; + spacing: 4px; } + .grouped-window-list-thumbnail-menu .item-box:outlined { + padding: 8px; + border: 1px solid #199ca8; } + .grouped-window-list-thumbnail-menu .item-box:selected { + border: 1px solid #199ca8; } + .grouped-window-list-thumbnail-menu .thumbnail { + width: 256px; } + .grouped-window-list-thumbnail-menu .separator { + width: 1px; + background: rgba(255, 255, 255, 0.2); } + +.sound-button { + width: 22px; + height: 13px; + padding: 8px; } + .sound-button-container { + padding-right: 3px; + padding-left: 3px; } + .sound-button StIcon { + icon-size: 1.4em; } + +.sound-track-infos { + padding: 5px; } + +.sound-track-info { + padding-top: 2px; + padding-bottom: 2px; } + .sound-track-info StIcon { + icon-size: 16px; } + .sound-track-info StLabel { + padding-left: 5px; + padding-right: 5px; } + +.sound-track-box { + padding-left: 15px; + padding-right: 15px; + max-width: 220px; } + +.sound-seek-box { + padding-left: 15px; } + .sound-seek-box StLabel { + padding-top: 2px; } + .sound-seek-box StIcon { + icon-size: 16px; } + +.sound-seek-slider { + width: 140px; } + +.sound-volume-menu-item { + padding: .4em 1.75em; } + .sound-volume-menu-item StIcon { + icon-size: 1.14em; + padding-left: 8px; + padding-right: 8px; } + +.sound-playback-control { + padding: 5px 10px 10px 10px; } + +.sound-player > StBoxLayout:first-child { + padding: 5px 10px 12px 10px; + spacing: 0.5em; } + .sound-player > StBoxLayout:first-child StButton:small { + width: 20px; + height: 20px; + border: 1px solid transparent; } + .sound-player > StBoxLayout:first-child StButton:small StIcon { + icon-size: 12px; } + .sound-player > StBoxLayout:first-child StButton:small:hover { + color: rgba(255, 255, 255, 0.87); + background-color: #525252; + border: 1px solid #202020; + box-shadow: inset 0 2px 4px rgba(82, 82, 82, 0.05); } + .sound-player > StBoxLayout:first-child StButton:small:active { + color: #ffffff; + background-color: #199ca8; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px #199ca8; } + +.sound-player-generic-coverart { + background: rgba(0, 0, 0, 0.2); } + +.sound-player-overlay { + width: 290px; + height: 5.4em; + padding: 15px; + spacing: 0.5em; + background: rgba(47, 47, 47, 0.9); + border-top: 1px solid #202020; + color: rgba(255, 255, 255, 0.87); } + .sound-player-overlay StButton { + width: 22px; + height: 13px; + padding: 5px; + color: rgba(255, 255, 255, 0.87); + border-radius: 2px; + border: 1px solid transparent; } + .sound-player-overlay StButton StIcon { + icon-size: 16px; } + .sound-player-overlay StButton:hover { + color: rgba(255, 255, 255, 0.87); + background-color: #525252; + border: 1px solid #202020; + box-shadow: inset 0 2px 4px rgba(82, 82, 82, 0.05); } + .sound-player-overlay StButton:active { + color: #ffffff; + background-color: #199ca8; + border: 1px solid #199ca8; + box-shadow: inset 0 2px 4px #199ca8; } + .sound-player-overlay StBoxLayout { + padding-top: 2px; } + .sound-player-overlay > StBoxLayout { + spacing: 5px; } + +.sound-player .slider { + height: 0.5em; + padding: 0; + border: none; + -slider-height: 0.5em; + -slider-background-color: #222222; + -slider-border-color: rgba(0, 0, 0, 0); + -slider-active-background-color: #199ca8; + -slider-active-border-color: rgba(0, 0, 0, 0); + -slider-border-width: 0px; + -slider-handle-radius: 0px; } + +#workspaceSwitcher { + spacing: 0px; + padding: 3px; } + +/* Controls the styling when using the "Simple buttons" option */ +.workspace-switcher { + padding-left: 3px; + padding-right: 3px; } + .panel-left .workspace-switcher, .panel-right .workspace-switcher { + padding: 0; } + +.workspace-button { + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.2); + width: 20px; + height: 14px; + color: rgba(255, 255, 255, 0.45); + padding: 3px; + padding-top: 4px; + transition-duration: 200; } + .workspace-button.vertical { + height: 1.5em; + width: 24px; + padding: 0; + padding-top: 3px; + padding-bottom: 3px; } + .workspace-button:outlined { + background-color: #199ca8; + color: #ffffff; } + .workspace-button:outlined:hover { + background-color: rgba(25, 156, 168, 0.7); + color: #ffffff; } + .workspace-button:hover { + background-color: rgba(255, 255, 255, 0.07); + color: #ffffff; } + +/* Controls the style when using the "Visual representation" option */ +.workspace-graph { + padding: 3px; + spacing: 6px; } + +.workspace-graph .workspace { + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.2); } + +.workspace-graph .workspace:active { + border: 1px solid #199ca8; } + +.workspace-graph .workspace .windows { + -active-window-background: #555555; + -active-window-border: rgba(0, 0, 0, 0.8); + -inactive-window-background: #555555; + -inactive-window-border: rgba(0, 0, 0, 0.8); } + +.workspace-graph .workspace:active .windows { + -active-window-background: #6f6f6f; + -active-window-border: rgba(0, 0, 0, 0.8); + -inactive-window-background: #3c3c3c; + -inactive-window-border: rgba(0, 0, 0, 0.8); } + +.panel-launchers { + padding-left: 7px; + spacing: 2px; } + .panel-launchers .launcher { + padding-left: 2px; + padding-right: 2px; + padding-bottom: 2px; + transition-duration: 200; } + .panel-launchers .launcher:hover { + background-color: #525352; } + .panel-launchers.vertical { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 0px; + padding-right: 0px; + spacing: 1px; } + .panel-launchers.vertical .launcher { + padding-top: 2px; + padding-bottom: 2px; } + +#overview-corner { + background-image: url("common-assets/misc/overview.png"); } + #overview-corner:hover { + background-image: url("common-assets/misc/overview-hover.png"); } + +.applet-separator { + padding: 1px 4px; } + .applet-separator.vertical { + padding: 4px 1px; } + +.applet-separator-line { + width: 1px; + background: rgba(255, 255, 255, 0.12); } + .applet-separator-line-vertical { + height: 1px; + background: rgba(255, 255, 255, 0.12); } + +.applet-box { + padding-left: 4px; + padding-right: 4px; + spacing: 4px; + color: rgba(255, 255, 255, 0.87); + text-shadow: none; + transition-duration: 100; + text-align: center; } + .applet-box.vertical { + padding-left: 0px; + padding-right: 0px; + padding-top: 3px; + padding-bottom: 3px; } + .applet-box:hover, .applet-box:checked { + color: #ffffff; + background-color: #525352; } + .applet-box:highlight { + background-image: none; + border-image: none; + background-color: rgba(252, 65, 56, 0.5); } + +.applet-label { + font-weight: bold; + color: rgba(255, 255, 255, 0.87); } + .applet-label:hover, .applet-label:checked, .applet-box:hover .applet-label, .applet-box:checked .applet-label { + color: #ffffff; + text-shadow: none; } + +.applet-icon { + color: #ffffff; + icon-size: 22px; } + .applet-icon:hover, .applet-icon:checked, .applet-box:hover > .applet-icon, .applet-box:checked > .applet-icon { + color: #ffffff; + text-shadow: none; } + +.user-icon { + width: 32px; + height: 32px; + background-color: transparent; + border: none; + border-radius: 0; } + +.user-label { + color: rgba(255, 255, 255, 0.87); + font-size: 1em; + font-weight: bold; + margin: 0px; } + +.applet-cornerbar { + width: 8px; + background-color: rgba(255, 255, 255, 0.12); } + .applet-cornerbar-box { + padding: 4px 4px; } + .applet-cornerbar-box:hover > .applet-cornerbar { + background-color: rgba(255, 255, 255, 0.22); } + .applet-cornerbar.vertical { + height: 8px; } + +.desklet { + color: rgba(255, 255, 255, 0.87); } + .desklet:highlight { + background-color: rgba(252, 65, 56, 0.5); } + .desklet-with-borders { + border: 1px solid #202020; + border-radius: 5px; + background-color: #2f2f2f; + color: rgba(255, 255, 255, 0.87); + padding: 12px; + padding-bottom: 16px; } + .desklet-with-borders:highlight { + background-color: rgba(252, 65, 56, 0.5); } + .desklet-with-borders-and-header { + border: 1px solid #202020; + border-top-width: 0; + border-radius: 0 0 5px 5px; + background-color: #2f2f2f; + color: rgba(255, 255, 255, 0.87); + border-radius: 0; + border-radius-topleft: 0; + border-radius-topright: 0; + padding: 12px; + padding-bottom: 17px; } + .desklet-with-borders-and-header:highlight { + background-color: rgba(252, 65, 56, 0.5); } + .desklet-header { + border: 1px solid #202020; + border-radius: 5px 5px 0 0; + background-color: #272727; + color: rgba(255, 255, 255, 0.87); + font-size: 1em; + padding: 12px; + padding-bottom: 6px; } + .desklet-drag-placeholder { + border: 2px solid #199ca8; + background-color: rgba(25, 156, 168, 0.3); } + +.photoframe-box { + border: 1px solid #202020; + border-radius: 5px; + background-color: #2f2f2f; + color: rgba(255, 255, 255, 0.87); + padding: 12px; + padding-bottom: 16px; } + +.notification-applet-padding { + padding: .5em 1em; } + +.notification-applet-container { + max-height: 100px; } + +.tile-preview { + background-color: rgba(25, 156, 168, 0.3); + border: 1px solid #199ca8; } + .tile-preview.snap { + background-color: rgba(25, 156, 168, 0.6); } + +.tile-hud { + background-color: rgba(25, 156, 168, 0.3); + border: 1px solid #199ca8; } + .tile-hud.snap { + background-color: rgba(25, 156, 168, 0.6); } + .tile-hud:top { + border-top-width: 0px; } + .tile-hud:bottom { + border-bottom-width: 0px; } + .tile-hud:left { + border-left-width: 0px; } + .tile-hud:right { + border-right-width: 0px; } + .tile-hud:top-left { + border-top-width: 0px; + border-left-width: 0px; } + .tile-hud:top-right { + border-top-width: 0px; + border-right-width: 0px; } + .tile-hud:bottom-left { + border-bottom-width: 0px; + border-left-width: 0px; } + .tile-hud:bottom-right { + border-bottom-width: 0px; + border-right-width: 0px; } + +.xkcd-box { + padding: 6px; + border: 0px; + background-color: rgba(0, 0, 0, 0); + border-radius: 0px; } diff --git a/mint/zshrc b/mint/zshrc new file mode 100644 index 0000000..217bfdf --- /dev/null +++ b/mint/zshrc @@ -0,0 +1,121 @@ +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH + +# Path to your oh-my-zsh installation. +export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time oh-my-zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +ZSH_THEME="powerlevel10k/powerlevel10k" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=( + git + zsh-autosuggestions +) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +alias nvimzsh="nvim ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" +alias ssh134="ssh astra@172.16.122.134" +alias ssh21="ssh astra@10.10.14.21" +alias ssh129="ssh astra@10.11.12.129" +alias vpsz="ssh root@185.241.55.216" +alias remote_mate="ssh t0xa@172.31.142.60" +alias remote_astra="ssh t0xa@172.31.142.194" +alias vpnz="sudo ss-local -v -c /etc/shadowsocks-libev/config.json" +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +export PATH=$PATH:/usr/local/go/bin diff --git a/neovim/Dockerfile b/neovim/Dockerfile new file mode 100644 index 0000000..a28923a --- /dev/null +++ b/neovim/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:latest + +LABEL maintainer="pro100ton@gmail.com" + +RUN apt-get update && apt-get install -y \ + build-essential \ + curl \ + neovim \ + git \ + nodejs \ + npm \ + fzf \ + golang-go \ + python3 \ + python3-pip \ + python3-venv \ + unzip \ + ripgrep +RUN useradd -m nvim_playground + +USER nvim_playground + +RUN mkdir /home/nvim_playground/.config +RUN mkdir /home/nvim_playground/.config/nvim +WORKDIR /home/nvim_playground/.config/nvim +COPY . . diff --git a/neovim/README.md b/neovim/README.md new file mode 100644 index 0000000..340a658 --- /dev/null +++ b/neovim/README.md @@ -0,0 +1,36 @@ +# File structure +. +├── Dockerfile +├── README.md +├── init.lua +└── lua + └── t0xa + ├── core + │   └── options.lua + └── plugins + └── lazy.lua + +## init.lua +Файл, в который "смотрит" neovim при [старте](https://neovim.io/doc/user/starting.html#initialization). + +## t0xa +Вместо того, чтобы использовать обращение к файлам настройки напрямую - используется данная +папка. +Можно обходиться без нее, однако для избегания конфликтов нейминга решил что буду использовать +так. +## core +Тут хранятся базовые настройки для neovim +## plugins +Папка для хранения и настроек плагинов для neovim + +# Main options + + +# Useful links +- [neovim stup guide](https://www.youtube.com/watch?v=6pAG3BHurdM) + +# Команда для запуска контейнеров + +``` +docker build -t nvim:nvim . && docker run -it --user nvim_playground nvim:nvim +``` diff --git a/neovim/init.lua b/neovim/init.lua new file mode 100644 index 0000000..04f1b13 --- /dev/null +++ b/neovim/init.lua @@ -0,0 +1,3 @@ +-- Omitting `lua` directory, because neovim autmaticaly serching in it +require("t0xa.core.options") +require("t0xa.lazy") diff --git a/neovim/lua/t0xa/core/options.lua b/neovim/lua/t0xa/core/options.lua new file mode 100644 index 0000000..0f79ee2 --- /dev/null +++ b/neovim/lua/t0xa/core/options.lua @@ -0,0 +1,40 @@ +local opt = vim.opt -- Shorcut to scip writing vim.opt.* in settings beneath + +-- enable line number and relative line number +opt.number = true -- This will show the line number cursor is currently standing +opt.relativenumber = true -- This will enable relative numbers on the left side + +-- tabs & indentation +opt.shiftwidth = 2 -- Set spaces for tabs == 2 +opt.tabstop = 2 -- Set spaces for indent with == 2 +opt.expandtab = true -- use number of spaces to insert a +opt.softtabstop = 2 + +-- search settings +opt.ignorecase = true -- ignore case when searching +opt.smartcase = true -- If mixing cases while searching = you want case-sensitive search + +-- Cursor line setting +opt.cursorline = true + +-- Turn on termguicolors for colorschemes +-- (Have to use true color terminal to see theese setting work) +opt.termguicolors = true +opt.background = "dark" -- colorschemes that can be light or dark will be made dark +opt.signcolumn = "yes" -- show sigh columns so that text doesn't shift + +-- backspace setting +opt.backspace = "indent,eol,start" -- allow backspace on indent, end of line or insert mode start position + +-- clipboard +opt.clipboard:append("unnamedplus") -- config to set up clipboard as default register + +-- split windows settings +opt.splitright = true -- split vertical window to the right +opt.splitbelow = true -- split horizontal window to the bottom + +-- disable swap files creation +opt.swapfile = false + +-- Add line at 88 symbols +opt.colorcolumn = "88" diff --git a/neovim/lua/t0xa/lazy.lua b/neovim/lua/t0xa/lazy.lua new file mode 100644 index 0000000..412b880 --- /dev/null +++ b/neovim/lua/t0xa/lazy.lua @@ -0,0 +1,25 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-- Initializing `lazy` lib and +require("lazy").setup({ + { + import = "t0xa.plugins", + }, + { + import = "t0xa.plugins.colorschemes", + }, + { + import = "t0xa.plugins.lsp", + }, +}) diff --git a/neovim/lua/t0xa/plugins/autopairs.lua b/neovim/lua/t0xa/plugins/autopairs.lua new file mode 100644 index 0000000..e22b7db --- /dev/null +++ b/neovim/lua/t0xa/plugins/autopairs.lua @@ -0,0 +1,31 @@ +return { + "windwp/nvim-autopairs", + event = { "InsertEnter" }, + dependencies = { + "hrsh7th/nvim-cmp", + }, + config = function() + -- import nvim-autopairs + local autopairs = require("nvim-autopairs") + + -- configure autopairs + autopairs.setup({ + check_ts = true, -- enable treesitter + ts_config = { + lua = { "string" }, -- don't add pairs in lua string treesitter nodes + javascript = { "template_string" }, -- don't add pairs in javscript template_string treesitter nodes + java = false, -- don't check treesitter on java + }, + }) + + -- import nvim-autopairs completion functionality + local cmp_autopairs = require("nvim-autopairs.completion.cmp") + + -- import nvim-cmp plugin (completions plugin) + local cmp = require("cmp") + + -- make autopairs and completion work together + cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) + end, +} + diff --git a/neovim/lua/t0xa/plugins/blame.lua b/neovim/lua/t0xa/plugins/blame.lua new file mode 100644 index 0000000..b198696 --- /dev/null +++ b/neovim/lua/t0xa/plugins/blame.lua @@ -0,0 +1,6 @@ +return { + "FabijanZulj/blame.nvim", + config = function() + require("blame").setup() + end +} diff --git a/neovim/lua/t0xa/plugins/colorscheme.lua b/neovim/lua/t0xa/plugins/colorscheme.lua new file mode 100644 index 0000000..392fe9d --- /dev/null +++ b/neovim/lua/t0xa/plugins/colorscheme.lua @@ -0,0 +1,16 @@ +return { + "folke/tokyonight.nvim", + dependencies = { + "ellisonleao/gruvbox.nvim", + "sainnhe/everforest", + "sainnhe/gruvbox-material", + "rebelot/kanagawa.nvim", + }, + lazy = false, + priority = 1000, + config = function() + vim.g.gruvbox_material_enable_italic = true + vim.cmd.colorscheme("gruvbox-material") + end, +} + diff --git a/neovim/lua/t0xa/plugins/colorschemes/kanagawa.lua b/neovim/lua/t0xa/plugins/colorschemes/kanagawa.lua new file mode 100644 index 0000000..87c2b23 --- /dev/null +++ b/neovim/lua/t0xa/plugins/colorschemes/kanagawa.lua @@ -0,0 +1,3 @@ +return { + "rebelot/kanagawa.nvim", +} diff --git a/neovim/lua/t0xa/plugins/comment.lua b/neovim/lua/t0xa/plugins/comment.lua new file mode 100644 index 0000000..ecc93c4 --- /dev/null +++ b/neovim/lua/t0xa/plugins/comment.lua @@ -0,0 +1,19 @@ +return { + "numToStr/Comment.nvim", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "JoosepAlviste/nvim-ts-context-commentstring", + }, + config = function() + -- import comment plugin safely + local comment = require("Comment") + + local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim") + + -- enable comment + comment.setup({ + -- for commenting tsx, jsx, svelte, html files + pre_hook = ts_context_commentstring.create_pre_hook(), + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/dressing.lua b/neovim/lua/t0xa/plugins/dressing.lua new file mode 100644 index 0000000..feadb27 --- /dev/null +++ b/neovim/lua/t0xa/plugins/dressing.lua @@ -0,0 +1,4 @@ +return { + "stevearc/dressing.nvim", + event = "VeryLazy" +} diff --git a/neovim/lua/t0xa/plugins/lsp/lspconfig.lua b/neovim/lua/t0xa/plugins/lsp/lspconfig.lua new file mode 100644 index 0000000..b5ad600 --- /dev/null +++ b/neovim/lua/t0xa/plugins/lsp/lspconfig.lua @@ -0,0 +1,109 @@ +return { + "neovim/nvim-lspconfig", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "hrsh7th/cmp-nvim-lsp", + -- Some additional QOL impovements like rename imports when file is renamed + { "antosha417/nvim-lsp-file-operations", config = true }, + -- Improved functionality when working with neovim config + { "folke/neodev.nvim", opts = {} }, + }, + config = function() + -- import lspconfig plugin + local lspconfig = require("lspconfig") + + -- import mason_lspconfig plugin + local mason_lspconfig = require("mason-lspconfig") + + -- import cmp-nvim-lsp plugin + local cmp_nvim_lsp = require("cmp_nvim_lsp") + + local keymap = vim.keymap -- for conciseness + + -- nvim_create_autocmd - used to execute some logic automaticaly on a specific event + -- Here it is used the LSP server attaches to file + vim.api.nvim_create_autocmd("LspAttach", { + -- Grouping together autocommands. Here we creating new group and calling it "UserLspConfig" + group = vim.api.nvim_create_augroup("UserLspConfig", {}), + -- callback defining logic to execute on the event + callback = function(ev) + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local opts = { buffer = ev.buf, silent = true } + + -- set keybinds + opts.desc = "Show LSP references" + keymap.set("n", "gR", "Telescope lsp_references", opts) -- show definition, references + + opts.desc = "Go to declaration" + keymap.set("n", "gD", vim.lsp.buf.declaration, opts) -- go to declaration + + opts.desc = "Show LSP definitions" + keymap.set("n", "gd", "Telescope lsp_definitions", opts) -- show lsp definitions + + opts.desc = "Show LSP implementations" + keymap.set("n", "gi", "Telescope lsp_implementations", opts) -- show lsp implementations + + opts.desc = "Show LSP type definitions" + keymap.set("n", "gt", "Telescope lsp_type_definitions", opts) -- show lsp type definitions + + opts.desc = "See available code actions" + keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) -- see available code actions, in visual mode will apply to selection + + opts.desc = "Smart rename" + keymap.set("n", "rn", vim.lsp.buf.rename, opts) -- smart rename + + opts.desc = "Show buffer diagnostics" + keymap.set("n", "D", "Telescope diagnostics bufnr=0", opts) -- show diagnostics for file + + opts.desc = "Show line diagnostics" + keymap.set("n", "d", vim.diagnostic.open_float, opts) -- show diagnostics for line + + opts.desc = "Go to previous diagnostic" + keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) -- jump to previous diagnostic in buffer + + opts.desc = "Go to next diagnostic" + keymap.set("n", "]d", vim.diagnostic.goto_next, opts) -- jump to next diagnostic in buffer + + opts.desc = "Show documentation for what is under cursor" + keymap.set("n", "K", vim.lsp.buf.hover, opts) -- show documentation for what is under cursor + + opts.desc = "Restart LSP" + keymap.set("n", "rs", ":LspRestart", opts) -- mapping to restart lsp if necessary + + opts.desc = "Run formatting on current buffer" + keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, opts) + end, + }) + + -- used to enable autocompletion (assign to every lsp server config) + local capabilities = cmp_nvim_lsp.default_capabilities() + + mason_lspconfig.setup_handlers({ + -- default handler for installed servers + function(server_name) + lspconfig[server_name].setup({ + capabilities = capabilities, + }) + end, + ["lua_ls"] = function() + -- configure lua server (with special settings) + lspconfig["lua_ls"].setup({ + capabilities = capabilities, + settings = { + Lua = { + -- make the language server recognize "vim" global + diagnostics = { + globals = { "vim" }, + }, + completion = { + callSnippet = "Replace", + }, + }, + }, + }) + end, + }) + end, +} + diff --git a/neovim/lua/t0xa/plugins/lsp/mason.lua b/neovim/lua/t0xa/plugins/lsp/mason.lua new file mode 100644 index 0000000..ba337dc --- /dev/null +++ b/neovim/lua/t0xa/plugins/lsp/mason.lua @@ -0,0 +1,54 @@ +return { + "williamboman/mason.nvim", + dependencies = { + "williamboman/mason-lspconfig.nvim", -- util for better language servers manipulation + "WhoIsSethDaniel/mason-tool-installer.nvim", + }, + config = function() + -- import mason + local mason = require("mason") + + -- import mason-lspconfig + local mason_lspconfig = require("mason-lspconfig") + + local mason_tool_installer = require("mason-tool-installer") + + -- enable mason and configure icons + mason.setup({ + ui = { + icons = { + package_installed = "✓", + package_pending = "➜", + package_uninstalled = "✗", + }, + }, + }) + + mason_lspconfig.setup({ + -- list of servers for mason to install + ensure_installed = { + "lua_ls", + "pyright", + "gopls", + }, + }) + + mason_tool_installer.setup({ + ensure_installed = { + "prettier", -- prettier formatter + "stylua", -- lua formatter + "isort", -- python formatter + "black", -- python formatter + "pylint", + "flake8", + -- Astra settings for 3.7 Python + -- { "isort", version = "5.11.5" }, -- python formatter + -- { "black", version = "23.3.0" }, -- python formatter + -- { "pylint", version = "2.9.0" }, + -- { "pylint", version = "2.9.0" }, + -- { "flake8", version = "4.0.1" }, + "eslint_d", + }, + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/lualine.lua b/neovim/lua/t0xa/plugins/lualine.lua new file mode 100644 index 0000000..45d910d --- /dev/null +++ b/neovim/lua/t0xa/plugins/lualine.lua @@ -0,0 +1,22 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + local lualine = require("lualine") + -- configure lualine with modified theme + lualine.setup({ + options = { + theme = "gruvbox-material", + }, + sections = { + lualine_c = { + { + "filename", + file_status = true, + path = 2, + }, + }, + }, + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/neogen.lua b/neovim/lua/t0xa/plugins/neogen.lua new file mode 100644 index 0000000..e838b1e --- /dev/null +++ b/neovim/lua/t0xa/plugins/neogen.lua @@ -0,0 +1,15 @@ +return { + "danymat/neogen", + version = "*", -- Follow only stable versions + enabled = true, + config = function() + local neogen = require("neogen") + neogen.setup({ + enabled = true + }) + local keymap = vim.keymap + local opts = { noremap = true, silent = true } + keymap.set("n", "ids", ":lua require('neogen').generate()", opts) + end, + -- config = true, +} diff --git a/neovim/lua/t0xa/plugins/none-ls.lua b/neovim/lua/t0xa/plugins/none-ls.lua new file mode 100644 index 0000000..2d6b9e8 --- /dev/null +++ b/neovim/lua/t0xa/plugins/none-ls.lua @@ -0,0 +1,21 @@ +return { + "nvimtools/none-ls.nvim", + dependencies = { + "nvimtools/none-ls-extras.nvim", + }, + config = function() + local null_ls = require("null-ls") + + null_ls.setup({ + sources = { + null_ls.builtins.formatting.black, + null_ls.builtins.formatting.isort, + null_ls.builtins.formatting.gofumpt, + null_ls.builtins.formatting.goimports_reviser, + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.golines, + require("none-ls.diagnostics.flake8"), + }, + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/nvim-cmp.lua b/neovim/lua/t0xa/plugins/nvim-cmp.lua new file mode 100644 index 0000000..f45b99c --- /dev/null +++ b/neovim/lua/t0xa/plugins/nvim-cmp.lua @@ -0,0 +1,64 @@ +return { + "hrsh7th/nvim-cmp", + event = "InsertEnter", -- Only load plugin when in INSERT mode + dependencies = { + "hrsh7th/cmp-buffer", -- source for text in buffer + "hrsh7th/cmp-path", -- source for file system paths + { + "L3MON4D3/LuaSnip", + -- follow latest release. + version = "v2.*", -- Replace by the latest released major (first number of latest release) + }, + "saadparwaiz1/cmp_luasnip", -- for autocompletion + "rafamadriz/friendly-snippets", -- useful snippets + "onsails/lspkind.nvim", -- vs-code like pictograms + }, + config = function() + -- Load custom snippets from path + require("luasnip.loaders.from_vscode").lazy_load() + require("luasnip.loaders.from_vscode").lazy_load({ paths = vim.fn.stdpath("config") .. "/snippets/" }) + + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspkind = require("lspkind") + + -- loads vscode style snippets from installed plugins (e.g. friendly-snippets) + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + completion = { + completeopt = "menu,menuone,preview,noselect", + }, + snippet = { -- configure how nvim-cmp interacts with snippet engine + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.close(), + [""] = cmp.mapping.confirm { select = true }, + }), + -- sources for autocompletion + -- !! Priority is important - autocompletion will be ordered from top to bottom + sources = cmp.config.sources({ + { name = "nvim_lsp" }, -- nvim LSP servers + { name = "luasnip" }, -- snippets + { name = "buffer" }, -- text within current buffer + { name = "path" }, -- file system paths + }), + + -- configure lspkind for vs-code like pictograms in completion menu + formatting = { + format = lspkind.cmp_format({ + maxwidth = 50, + ellipsis_char = "...", + }), + }, + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/nvim-tree.lua b/neovim/lua/t0xa/plugins/nvim-tree.lua new file mode 100644 index 0000000..e091d72 --- /dev/null +++ b/neovim/lua/t0xa/plugins/nvim-tree.lua @@ -0,0 +1,40 @@ +return { + "nvim-tree/nvim-tree.lua", + dependencies = "nvim-tree/nvim-web-devicons", + config = function() + local nvimtree = require("nvim-tree") + -- recommended settings from nvim-tree documentation + vim.g.loaded_netrw = 1 + vim.g.loaded_netrwPlugin = 1 + + nvimtree.setup({ + view = { + -- width = 35, + adaptive_size = true, + relativenumber = true, + }, + -- disable window_picker for explorer to work well with window splits + actions = { + open_file = { + window_picker = { + enable = true, + }, + }, + }, + -- Custom list of vim regex for names that will not be shown + filters = { + custom = { ".DS_Store" }, + }, + -- Show files ignored by git + git = { + ignore = false, + }, + }) + + -- set nvim-tree keypmaps + local keymap = vim.keymap + keymap.set('n', 'nt', ':NvimTreeToggle', {desc = "Toggle file explorer"}) + keymap.set('n', 'nf', ':NvimTreeFindFileToggle', {desc = "Toggle file explorer on current file"}) + + end +} diff --git a/neovim/lua/t0xa/plugins/plenary.lua b/neovim/lua/t0xa/plugins/plenary.lua new file mode 100644 index 0000000..9a1441c --- /dev/null +++ b/neovim/lua/t0xa/plugins/plenary.lua @@ -0,0 +1,3 @@ +return { + "nvim-lua/plenary.nvim" +} diff --git a/neovim/lua/t0xa/plugins/telescope.lua b/neovim/lua/t0xa/plugins/telescope.lua new file mode 100644 index 0000000..e3b43e2 --- /dev/null +++ b/neovim/lua/t0xa/plugins/telescope.lua @@ -0,0 +1,38 @@ +return { + "nvim-telescope/telescope.nvim", + tag = "0.1.6", + dependencies = { + "nvim-lua/plenary.nvim", + -- Improving performance of finder + { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, + -- Display dev icons + "nvim-tree/nvim-web-devicons", + "folke/todo-comments.nvim", + }, + config = function() + local telescope = require("telescope") + local actions = require("telescope.actions") + + telescope.setup({ + defaults = { + path_display = { "smart" }, + mappings = { + i = { + [""] = actions.move_selection_previous, -- move to prev result + [""] = actions.move_selection_next, -- move to next result + }, + }, + }, + }) + + telescope.load_extension("fzf") -- load FZF extension to improve performance + + local builtin = require("telescope.builtin") + local keymap = vim.keymap + keymap.set("n", "ff", builtin.find_files, { desc = "FZF: find files in cwd" }) + keymap.set("n", "fg", builtin.live_grep, { desc = "FZF: find string in cwd" }) + keymap.set("n", "fb", builtin.buffers, { desc = "FZF: display opened buffers" }) + keymap.set("n", "fh", builtin.help_tags, { desc = "FZF: display help tags" }) + keymap.set("n", "ft", "TodoTelescope", { desc = "FZF: display TODO comments" }) + end, +} diff --git a/neovim/lua/t0xa/plugins/todo-comments.lua b/neovim/lua/t0xa/plugins/todo-comments.lua new file mode 100644 index 0000000..f74baa9 --- /dev/null +++ b/neovim/lua/t0xa/plugins/todo-comments.lua @@ -0,0 +1,21 @@ +return { + "folke/todo-comments.nvim", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + local todo_comments = require("todo-comments") + + -- set keymaps + local keymap = vim.keymap -- for conciseness + + keymap.set("n", "]t", function() + todo_comments.jump_next() + end, { desc = "Next todo comment" }) + + keymap.set("n", "[t", function() + todo_comments.jump_prev() + end, { desc = "Previous todo comment" }) + + todo_comments.setup() + end, +} diff --git a/neovim/lua/t0xa/plugins/treesitter.lua b/neovim/lua/t0xa/plugins/treesitter.lua new file mode 100644 index 0000000..a5edee1 --- /dev/null +++ b/neovim/lua/t0xa/plugins/treesitter.lua @@ -0,0 +1,66 @@ +return { + "nvim-treesitter/nvim-treesitter", + -- open this plugin on two events: + -- BufReadPre - open existing file + -- BufNewFile - open new file + event = { "BufReadPre", "BufNewFile" }, + build = ":TSUpdate", -- Run whenever this plugin is installed or updated + dependencies = { + "windwp/nvim-ts-autotag", -- Auto-closing functionality within treesitter + }, + config = function() + -- import nvim-treesitter plugin + local treesitter = require("nvim-treesitter.configs") + + -- Configure treesitter + -- treesitter.setup({ + -- -- enable syntax highlighting + -- highligh = { + -- enable = true, + -- }, + -- + -- -- enable better indentation + -- indent = { + -- enable = true, + -- }, + -- + -- -- enable auto-tagging + -- autotag = { + -- enable = true, + -- }, + -- + -- -- ensure these languages parsers are installed + -- ensure_installed = { + -- "python", + -- "go", + -- "lua", + -- "bash", + -- "json", + -- "javascript", + -- "jq", + -- "markdown", + -- "markdown_inline", + -- "regex", + -- "vim", + -- "dockerfile", + -- }, + -- }) + -- end, + treesitter.setup({ + ensure_installed = { + "python", + "lua", + "vim", + "vimdoc", + "query", + "elixir", + "heex", + "javascript", + "html", + }, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true }, + }) + end, +} diff --git a/neovim/lua/t0xa/plugins/vim-tmux-navigator.lua b/neovim/lua/t0xa/plugins/vim-tmux-navigator.lua new file mode 100644 index 0000000..4421fed --- /dev/null +++ b/neovim/lua/t0xa/plugins/vim-tmux-navigator.lua @@ -0,0 +1,17 @@ +return { + "christoomey/vim-tmux-navigator", + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + "TmuxNavigatePrevious", + }, + keys = { + { "", "TmuxNavigateLeft" }, + { "", "TmuxNavigateDown" }, + { "", "TmuxNavigateUp" }, + { "", "TmuxNavigateRight" }, + { "", "TmuxNavigatePrevious" }, + }, +} diff --git a/neovim/lua/t0xa/plugins/which-key.lua b/neovim/lua/t0xa/plugins/which-key.lua new file mode 100644 index 0000000..078eebc --- /dev/null +++ b/neovim/lua/t0xa/plugins/which-key.lua @@ -0,0 +1,19 @@ +return { + "folke/which-key.nvim", + -- Telling nvim that it can load this plugin later, and that it is not + -- that important for initial UI + event = "VeryLazy", + -- Function that will run while neovim startup instead of when plugin is actualy loads + init = function() + -- How long which-key will wait until activation + vim.o.timeout = true + vim.o.timeoutlen = 500 + end, + -- Options that will pass to setup function, but we are leaving it empty to use + -- default configuration + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } +} diff --git a/neovim/snippets/package.json b/neovim/snippets/package.json new file mode 100644 index 0000000..bac218b --- /dev/null +++ b/neovim/snippets/package.json @@ -0,0 +1,15 @@ +{ + "name": "custom-snippets", + "engines": { + "vscode": "^1.11.0" + }, + "contributes": { + "snippets": [ + { + "language": "python", + "path": "./python.json" + } + ] + } +} + diff --git a/neovim/snippets/python.json b/neovim/snippets/python.json new file mode 100644 index 0000000..3ad4c6e --- /dev/null +++ b/neovim/snippets/python.json @@ -0,0 +1,26 @@ +{ + "implog": { + "prefix": "implog", + "body": [ + "import logging", + "_log = logging.getLogger(__name__)" + ], + "description": "Snippet for importing logger" + }, + "Log event": { + "prefix": "logevent", + "body": [ + "_log.error('${1:delimiter}' * 60)", + "_log.error(${2})", + "_log.error('${1:delimiter}' * 60)" + ], + "description": "Snippet for inserting error log" + }, + "Log debug": { + "prefix": "logdebug", + "body": [ + "_log.debug(${1:deug_body})" + ], + "description": "Snippet for inserting debug log" + } +} diff --git a/polybar/config.ini b/polybar/config.ini new file mode 100644 index 0000000..d1f29ae --- /dev/null +++ b/polybar/config.ini @@ -0,0 +1,254 @@ +;========================================================== +; +; +; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/polybar/polybar +; +; The README contains a lot of information +; +;========================================================== +[global/wm] +margin-top = 0 +margin-bottom = 0 + +[module/i3] +type = internal/i3 +pin-workspaces = true +show-urgent = true + +label-focused = %index% +label-focused-foreground = #ffffff +label-focused-background = #3f3f3f +label-focused-underline = #fba922 +label-focused-padding = 3 +label-unfocused-padding = 1 + + +[colors] +background = #282A2E +background-alt = #373B41 +foreground = #C5C8C6 +primary = #F0C674 +secondary = #8ABEB7 +disabled = #707880 + +[bar/example] +width = 100% +height = 24pt +radius = 6 +monitor = ${env:MONITOR:} + +; dpi = 96 + +background = ${colors.background} +foreground = ${colors.foreground} + +line-size = 3pt + +border-size = 0pt +border-color = #00000000 +border-left = 6 +border-right = 6 +border-top = 6 + +padding-left = 0 +padding-right = 1 + +module-margin = 1 + +separator = | +separator-foreground = ${colors.disabled} + +font-0 = JetBrainsMonoNL Nerd Font Mono;3 + +modules-left = i3 xwindow +modules-right = pulseaudio network-home network-vpn memory cpu xkeyboard date + +cursor-click = pointer +cursor-scroll = ns-resize + +enable-ipc = true + +[module/xwindow] +type = internal/xwindow +label = %title:0:60:...% + +[module/filesystem] +type = internal/fs +interval = 25 + +mount-0 = / + +label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%% + +label-unmounted = %mountpoint% not mounted +label-unmounted-foreground = ${colors.disabled} + +[module/pulseaudio] +type = internal/pulseaudio + +format-volume-prefix = "VOL " +format-volume-prefix-foreground = ${colors.primary} +format-volume = + +label-volume = %percentage%% + +label-muted = muted +label-muted-foreground = ${colors.disabled} + +[module/xkeyboard] +type = internal/xkeyboard +blacklist-0 = num lock + +; label-layout = %{T2}%{T-} +label-layout =  %name% +label-layout-foreground = ${colors.primary} +layout-icon-0 = ru;ru +layout-icon-1 = us;us + +label-indicator-on = %name% +label-indicator-padding = 2 +label-indicator-margin = 1 +label-indicator-foreground = ${colors.background} +label-indicator-background = ${colors.secondary} + +format = + +[module/memory] +type = internal/memory +interval = 2 +format-prefix = "RAM " +format-prefix-foreground = ${colors.primary} +label = %percentage_used:2%% + +[module/cpu] +type = internal/cpu +interval = 2 +format-prefix = "CPU " +format-prefix-foreground = ${colors.primary} +label = %percentage:2%% + +[network-base] +type = internal/network +interval = 5 +format-connected = +format-disconnected = +label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected + + +[module/date] +type = internal/date +interval = 1 + +date = %a %d-%b %H:%M:%S +date-alt = %Y-%m-%d %H:%M:%S + +label = %date% +label-foreground = ${colors.primary} + +[settings] +screenchange-reload = true +pseudo-transparency = true + +; vim:ft=dosini +[module/network-home] +type = internal/network +; Name of the network interface to display. You can get the names of the +; interfaces on your machine with `ip link` +; Wireless interfaces often start with `wl` and ethernet interface with `eno` or `eth` +interface = eno1 + +; If no interface is specified, polybar can detect an interface of the given type. +; If multiple are found, it will prefer running interfaces and otherwise just +; use the first one found. +; Either 'wired' or 'wireless' +; New in version 3.6.0 +interface-type = wired + +; Seconds to sleep between updates +; Default: 1 +interval = 3.0 + +; NOTE: Experimental (might change or be removed in the future) +; Test connectivity every Nth update by pinging 8.8.8.8 +; In case the ping fails 'format-packetloss' is used until the next ping +; A value of 0 disables the feature +; Default: 0 +;ping-interval = 3 + +; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%) +; Minimum output width of upload/download rate +; Default: 3 +udspeed-minwidth = 5 + +; Accumulate values from all interfaces +; when querying for up/downspeed rate +; Default: false +accumulate-stats = true + +; Consider an `UNKNOWN` interface state as up. +; Some devices like USB network adapters have +; an unknown state, even when they're running +; Default: false +unknown-as-up = true + +; The unit used for displaying network speeds +; For example if set to the empty string, a speed of 5 KB/s is displayed as 5 K +; Default: B/s +; New in version 3.6.0 +speed-unit = '' + +[module/network-vpn] +type = internal/network +; Name of the network interface to display. You can get the names of the +; interfaces on your machine with `ip link` +; Wireless interfaces often start with `wl` and ethernet interface with `eno` or `eth` +interface = vpn0 + +; If no interface is specified, polybar can detect an interface of the given type. +; If multiple are found, it will prefer running interfaces and otherwise just +; use the first one found. +; Either 'wired' or 'wireless' +; New in version 3.6.0 +interface-type = wired + +; Seconds to sleep between updates +; Default: 1 +interval = 3.0 + +; NOTE: Experimental (might change or be removed in the future) +; Test connectivity every Nth update by pinging 8.8.8.8 +; In case the ping fails 'format-packetloss' is used until the next ping +; A value of 0 disables the feature +; Default: 0 +;ping-interval = 3 + +; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%) +; Minimum output width of upload/download rate +; Default: 3 +udspeed-minwidth = 5 + +; Accumulate values from all interfaces +; when querying for up/downspeed rate +; Default: false +accumulate-stats = true + +; Consider an `UNKNOWN` interface state as up. +; Some devices like USB network adapters have +; an unknown state, even when they're running +; Default: false +unknown-as-up = true + +; The unit used for displaying network speeds +; For example if set to the empty string, a speed of 5 KB/s is displayed as 5 K +; Default: B/s +; New in version 3.6.0 +speed-unit = '' diff --git a/polybar/launch.sh b/polybar/launch.sh new file mode 100755 index 0000000..9b3158b --- /dev/null +++ b/polybar/launch.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Terminate already running bar instances +# If all your bars have ipc enabled, you can use +polybar-msg cmd quit +# Otherwise you can use the nuclear option: +# killall -q polybar + +# Launch bar1 and bar2 +echo "---" | tee -a /tmp/example.log +#polybar example --config=$HOME/.config/polybar/config.ini 2>&1 | tee -a /tmp/example.log & disown + +if type "xrandr"; then + for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do + echo $m + MONITOR=$m polybar --reload example --config=$HOME/.config/polybar/config.ini & + done +else + polybar --reload example --config=$HOME/.config/polybar/config.ini & +fi + +echo "Bars launched..." diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..9c467b5 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,11 @@ +# db_dropper +Скрипт для проделывания следующих процедур: + +1. Подключение к БД и сброс баз данных `console_db` и `logs_db` +2. Создание новых БД с аналогичными названиями и присваивания владельцем `console_user` +3. Переход в директорию проекта и активация виртуального окружения `python` +4. Очистка миграций, отсутствующих в `git` +5. Создание новых миграций +6. Применение миграций +7. Создание суперпользователя +8. Деактивация виртуального окружения. diff --git a/scripts/db_dropper b/scripts/db_dropper new file mode 100755 index 0000000..b3c75d6 --- /dev/null +++ b/scripts/db_dropper @@ -0,0 +1,40 @@ +#!/bin/bash + +# Database details +DBS=("console_db" "logs_db") +DB_OWNER="console_user" + +# Drop and create databases +for DB in "${DBS[@]}"; do + sudo -u postgres -H -- psql -c "DROP DATABASE IF EXISTS $DB" + sudo -u postgres -H -- psql -c "CREATE DATABASE $DB OWNER $DB_OWNER" +done + +PROJECT_DIR="/home/t0xa/Documents/backend" +VENV_DIR="$PROJECT_DIR/.venv" + +cd "$PROJECT_DIR" || { echo "Project directory not found!"; exit 1; } +source "$VENV_DIR/bin/activate" + +git clean -xf */migrations/ +python3 manage.py makemigrations +python3 manage.py migrate +python3 manage.py migrate --database logs +python3 manage.py shell -c " +from django.contrib.auth import get_user_model; +User = get_user_model(); +if not User.objects.filter(email='a@a.ru').exists(): + User.objects.create_superuser('a@a.ru', password='T1Rules@123') +" +deactivate + +# sudo -u postgres -H -- psql -c "DROP DATABASE console_db" +# sudo -u postgres -H -- psql -c "DROP DATABASE logs_db" +# sudo -u postgres -H -- psql -c "CREATE DATABASE console_db OWNER console_user" +# sudo -u postgres -H -- psql -c "CREATE DATABASE logs_db OWNER console_user" +# cd /home/t0xa/Documents/backend +# source .venv/bin/activate +# # python3 manage.py makemigrations +# python3 manage.py migrate +# python3 manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('a@a.ru', password='T1Rules@123')" +# deactivate diff --git a/skhd/skhdrc b/skhd/skhdrc new file mode 100644 index 0000000..b6ca380 --- /dev/null +++ b/skhd/skhdrc @@ -0,0 +1,54 @@ +# -- Changing Window Focus -- + +# change window focus within space +alt - j : yabai -m window --focus south +alt - k : yabai -m window --focus north +alt - h : yabai -m window --focus west +alt - l : yabai -m window --focus east + +# -- Modifying the Layout -- +# +# rotate layout clockwise +shift + alt - r : yabai -m space --rotate 270 + +# flip along y-axis +# shift + alt - y : yabai -m space --mirror y-axis + +# flip along x-axis +# shift + alt - x : yabai -m space --mirror x-axis + +# toggle window float +shift + alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2 + +# -- Modifying Window Size -- + +# maximize a window +shift + alt - f : yabai -m window --toggle zoom-fullscreen + +# balance out tree of windows (resize to occupy same area) +shift + alt - e : yabai -m space --balance + +# swap windows +shift + alt - j : yabai -m window --swap south +shift + alt - k : yabai -m window --swap north +shift + alt - h : yabai -m window --swap west +shift + alt - l : yabai -m window --swap east + +# move window to space # +shift + alt - 1 : yabai -m window --space 1; +shift + alt - 2 : yabai -m window --space 2; +shift + alt - 3 : yabai -m window --space 3; +shift + alt - 4 : yabai -m window --space 4; +shift + alt - 5 : yabai -m window --space 5; +shift + alt - 6 : yabai -m window --space 6; +shift + alt - 7 : yabai -m window --space 7; + +# Move between monitors +alt - s: yabai -m display --focus west +alt - g: yabai -m display --focus east + +# Resize panes in space +ctrl + cmd - h : yabai -m window west --resize right:-20:0 2> /dev/null || yabai -m window --resize right:-20:0 +ctrl + cmd - j : yabai -m window north --resize bottom:0:20 2> /dev/null || yabai -m window --resize bottom:0:20 +ctrl + cmd - k : yabai -m window south --resize top:0:-20 2> /dev/null || yabai -m window --resize top:0:-20 +ctrl + cmd - l : yabai -m window east --resize left:20:0 2> /dev/null || yabai -m window --resize left:20:0 diff --git a/t1/front_dockerized/Dockerfile b/t1/front_dockerized/Dockerfile new file mode 100644 index 0000000..0f5aba8 --- /dev/null +++ b/t1/front_dockerized/Dockerfile @@ -0,0 +1,19 @@ +# Use Node.js LTS image as base +FROM node:21-alpine as build +WORKDIR /app + +ENV PATH /app/node_modules/.bin:$PATH +COPY ./reactapp/package.json /app/package.json +RUN npm config --global set 'registry=https://nexuswatchman.t1-consulting.ru/repository/npm-group/' +RUN npm config --global set 'fund=false' +RUN npm install react-scripts@3.0.1 -g --silent +RUN npm install +# Create environment file +COPY ./reactapp/ /app +RUN npm run build + +FROM nginx:stable-alpine +COPY --from=build /app/dist usr/share/nginx/html +COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/t1/front_dockerized/README.md b/t1/front_dockerized/README.md new file mode 100644 index 0000000..3b8f433 --- /dev/null +++ b/t1/front_dockerized/README.md @@ -0,0 +1,30 @@ +# Контейнеризация react приложения Купол.Управление + +## Структура папок для запуска +``` +. +├── Dockerfile +├── nginx +│   └── nginx.conf +├── reactapp +│   ├── ... +``` + +где: +- `.` - build контекст приложения; +- Папка `nginx` - конфиг для контейнера с nginx; +- Папка `reactapp` - папка, куда клонируется реакт проект Купол.Управление. + +## Команды для сборки и запуска приложения + +Для сборки используется команда: + +``` +docker build -t pro100ton:kupol-front-prod . +``` + +Для запуска используется команда: +``` +docker run -it --rm -p 1337:80 pro100ton:kupol-front-prod +``` + diff --git a/t1/front_dockerized/nginx.conf b/t1/front_dockerized/nginx.conf new file mode 100644 index 0000000..cc7d136 --- /dev/null +++ b/t1/front_dockerized/nginx.conf @@ -0,0 +1,55 @@ +server { + + listen 80; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://172.31.142.161:8080; + } + + location /media { + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://172.31.142.161:8080; + } + + + location /ssh/ { + proxy_pass http://172.31.142.161:9590/; + proxy_http_version 1.1; + proxy_read_timeout 300; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-PORT $remote_port; + } + + location /ws { + proxy_pass http://172.31.142.161:9590; + proxy_http_version 1.1; + proxy_read_timeout 300; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-PORT $remote_port; + } + + + error_page 500 502 503 504 /50x.html; + + location = /50x.html { + root /usr/share/nginx/html; + } + +} diff --git a/tmux/README.md b/tmux/README.md new file mode 100644 index 0000000..be13ef9 --- /dev/null +++ b/tmux/README.md @@ -0,0 +1,4 @@ +# Установка +1. Копируем в `~/.` папку, чтобы было: `~/.tmux.conf` +2. Выходим из tmux +3. Заходим обратно и выполняем `prefix + I` diff --git a/tmux/tmux.conf b/tmux/tmux.conf new file mode 100644 index 0000000..87f5c04 --- /dev/null +++ b/tmux/tmux.conf @@ -0,0 +1,35 @@ +set-option -sa terminal-overrides ",xterm*:Tc" +set -g mouse on + +# List of plugins +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'christoomey/vim-tmux-navigator' +# set -g @plugin 'dreamsofcode-io/catppuccin-tmux' +set -g @plugin 'tmux-plugins/tmux-yank' +set -g @plugin 'egel/tmux-gruvbox' +set -g @tmux-gruvbox 'dark' # or 'light' + +# Shift Alt vim keys to switch windows +bind -n M-H previous-window +bind -n M-L next-window + +# Start windows and panes at 1, not 0 +set -g base-index 1 +set -g pane-base-index 1 +set-window-option -g pane-base-index 1 +set-option -g renumber-windows on + +# Open panes in the same directory +bind '"' split-window -v -c "#{pane_current_path}" +bind % split-window -h -c "#{pane_current_path}" + +# set vi-mode +set-window-option -g mode-keys vi +# keybindings +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle +bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel + +# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) +run '~/.tmux/plugins/tpm/tpm' diff --git a/yabai/yabairc b/yabai/yabairc new file mode 100644 index 0000000..74841dc --- /dev/null +++ b/yabai/yabairc @@ -0,0 +1,15 @@ +# bsp, stack or float +yabai -m config layout bsp + +yabai -m config window_placement second_split + +# padding +yabai -m config top_padding 6 +yabai -m config bottom_padding 6 +yabai -m config right_padding 6 +yabai -m config left_padding 6 + +# mouse settings +yabai -m config mouse_follows_focus on + +yabai -m mouse_drop_action swap