diff --git a/README.md b/README.md index e94e2db..d989b44 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ - [Другие README файлы в этих дотсах](#другие-readme-файлы-в-этих-дотсах) - [Проблемы](#проблемы) - [TODO](#todo) +- [bspwm или i3](#bspwm-или-i3) - [Описание](#описание) - [Нюансы с JetBrains Toolbox](#нюансы-с-jetbrains-toolbox) - [Настройки для игр](#настройки-для-игр) @@ -58,11 +59,11 @@ | `Super + A` | Applications. Запускатор софта | Да | | `Super + C` | Calculator имбовый. Можно даже написать `5600 USD to BTC` или `500 + 25%`. | Да | | `Super + P` | Passwords. Пароли из утилиты pass |нет| -| `Super + V` | История буфера обмена. Как ctrl+v, но через win. |нет| -| `Super + Tab` | Как alt+tab, переключение окон. На нужный воркспейс само перекинет |хз| -| `Super + Alt + T` | Timer. Думаю сделать через утилиту timer |хз| -| `Super + Shift + N` | Notification history. История оповещений. Мб сделать только в баре кнопку? Мб не делать вообще |хз| -| `Super + Backspace` | PowerMenu. Выключение пк |нет| +| `Super + V` | История буфера обмена. Как ctrl+v, но через win. | Да | +| `Super + Backspace` | PowerMenu. Выключение пк | Да | +| `Super + Tab` | Как alt+tab, переключение окон. На нужный воркспейс само перекинет |нет| +| `Super + Alt + T` | Timer. Думаю сделать через утилиту timer |нет| +| `Super + Shift + N` | Notification history. История оповещений. Мб сделать только в баре кнопку? Мб не делать вообще |нет| | Applications | Описание | Работает? | | -------------------------- | ----------------------------------------- | --------- | @@ -140,6 +141,18 @@ - i3 с его экосистемой софта. Чтоб тот же polybar был лишь на bspwm, а на i3 работал i3bar - Sway. Мб сделать через ags +## bspwm или i3 + +Изначально я написал конфиги для `bspwm` + `polybar`. Но так как оба эти проги созданы далбаёбами бездарными, я переехал на `i3` + `i3bar`. Если хочешь затестить `bspwm`, то закомментируй эти строки в `modules/home-manager/bundle.nix`: +- `./wm/i3.nix` +И раскомментируй эти строки в том же файле: +- `./wm/bspwm/bspwm.nix` +- `./wm/lockscreen.nix` +- `./wm/polybar.nix` +- `./wm/sxhkd.nix` + +В теории можно сделать так, чтоб оба работали из коробки. Для этого надо тот же `polybar` и `sxhkd` скачать не как сервис, а как пакет. Чтоб он не был в автозапуске. А конфиги сделать симлинком, а не в nix синтаксисе. Запускать через `bspwm` конфиг, чтоб на `i3` не стартовало. Но я не хочу с этим ебаться ради бездарного кала, который не может делать элементарные вещи по типу отображение floating окон поверх tiling. + ## Описание Железо, на котором это работает: @@ -153,13 +166,15 @@ | Software | Name | | ------------ | -------------------------------- | -| WM | bspwm | -| Hotkeys | sxhkd | +| WM | bspwm/i3 | +| Hotkeys | sxhkd/i3 | | Terminal | Alacritty, Kitty | | Multiplexer | Zellij | | Shell | oh-my-zsh with many plugins | | Shell Prompt | Starship | | Apps/Menus | Rofi | +| Bar | Polybar/i3bar | +| ScreenLock | betterlockscreen/i3lock | | Notification | Dunst | | Files | Thunar, Ranger | | Images | qView, imv, viewnior, feh | @@ -309,12 +324,13 @@ sudo nixos-rebuild switch Дальше есть два способа. Перед использованием любого из них я рекомендую сделать форк и внести следующие изменения в конфиг перед установкой: -- Заменить имя юзера на своё. Для этого надо открыть файл `nixos/configuration.nix` и заменить переменную `username` на ник своего юзера. +- Заменить имя юзера на своё. Для этого надо открыть файл `nixos/configuration.nix` и заменить переменную `username` на ник своего юзера. И открыть файл `nixos/home.nix`, где надо заменить `username` и `homeDirectory`. - Изменить параметры мониторов в `modules/home-manager/wm/bspwm/bspwm.nix`. Для этого через xrandr надо узнать параметры экрана. Либо закомментить настройки мониторов и посмотреть как будет работать из коробки. -- Изменить gpu драйвер, если видеокарта не от amd. Самый простой вариант - закомментировать `videoDrivers` в `modules/nixos/xserver.nix` и `boot.initrd.kernelModules` в `modules/nixos/hardware.nix`. Мб он сам подберёт подходящий драйвер. Если же знаешь конкретные настройки, которые надо ставить, то пишешь их. +- Изменить gpu драйвер, если видеокарта не от amd. Самый простой вариант - закомментировать `videoDrivers` в `modules/nixos/xserver.nix`, `boot.initrd.kernelModules` и всю категорию настроек `amdgpu` в `modules/nixos/hardware.nix`. Мб он сам подберёт подходящий драйвер. Если же знаешь конкретные настройки, которые надо ставить, то пишешь их. - Изменить настройки звука в `modules/nixos/sound.nix`. Там надо закомментировать `default.clock.allowed-rates` с кучей разных частот. Они сделаны для моего цапа, но у большинства людей это может вызвать ошибки. Те, кто знают что это и зачем, те изменят под себя. - Закомментировать/удалить `./symlinks.nix` в файле `modules/home-manager/bundle.nix`. Там написаны симлинки для второго ссд, где я бекаплю браузер и тд. Ребилд выдаст ошибку, если другой человек попробует использовать этот же конфиг. - Закомментировать/удалить `./filesystems.nix` в файле `modules/nixos/bundle.nix`. Там монтируется мой второй ссд для бекапов. Ребилд выдаст ошибку, если другой человек попробует использовать этот же конфиг. +- Если хочешь `bspwm`, а не `i3`, то читай [bspwm или i3](#bspwm-или-i3) С гитом есть нюанс. Если захочешь потом создать свои конфиги или добавить новые файлы, на которые надо ссылаться из nix, то надо указывать либо полный путь до файла, либо добавлять файл в гит. Если указывать относительный путь, как сделано в моих `bundle.nix`, то все эти файлы должны находиться в гите, либо каталог дотсов должен быть без гита вовсе. Если в каталоге дотсов инициализирован репозиторий гита, то в относительных путях он не видит файлы из `gitignore` или просто не отслеживаемые гитом файлы. diff --git a/modules/home-manager/wm/polybar.nix b/modules/home-manager/wm/polybar.nix index 33e4d83..4df3e68 100644 --- a/modules/home-manager/wm/polybar.nix +++ b/modules/home-manager/wm/polybar.nix @@ -52,7 +52,7 @@ modules-center=time modules-left=bspwm title - modules-right=cpu memory alsa tray xkeyboard rofi + modules-right=cpu memory alsa tray xkeyboard rofi power wm-restack=bspwm @@ -294,9 +294,13 @@ [module/rofi] type=custom/text click-left=exec rofi -show drun -show-icons - click-right=exec rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu label=" " + [module/power] + type=custom/text + click-left=exec rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu + label=" " + [module/time] type=internal/date interval=1 diff --git a/modules/home-manager/wm/rofi/launcher.rasi b/modules/home-manager/wm/rofi/launcher.rasi new file mode 100644 index 0000000..dab8e62 --- /dev/null +++ b/modules/home-manager/wm/rofi/launcher.rasi @@ -0,0 +1,264 @@ +/*****----- Configuration -----*****/ +configuration { + modes: "drun,run,window"; + show-icons: true; + icon-theme: "Papirus"; + display-drun: ""; + display-run: ""; + display-window: ""; + drun-display-format: "{name} [({generic})]"; + window-format: "{w} · {c} · {t}"; +} + +/*****----- Global Properties -----*****/ +@import "colors.rasi" + +* { + border-colour: var(selected); + handle-colour: var(selected); + background-colour: var(background); + foreground-colour: var(foreground); + alternate-background: var(background-alt); + normal-background: var(background); + normal-foreground: var(foreground); + urgent-background: var(urgent); + urgent-foreground: var(background); + active-background: var(active); + active-foreground: var(background); + selected-normal-background: var(selected); + selected-normal-foreground: var(background); + selected-urgent-background: var(active); + selected-urgent-foreground: var(background); + selected-active-background: var(urgent); + selected-active-foreground: var(background); + alternate-normal-background: var(background); + alternate-normal-foreground: var(foreground); + alternate-urgent-background: var(urgent); + alternate-urgent-foreground: var(background); + alternate-active-background: var(active); + alternate-active-foreground: var(background); +} + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 800px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @border-colour; + cursor: "default"; + background-color: @background-colour; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 30px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px 0px 10px 10px; + border: 0px; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; + children: [ "prompt", "entry" ]; +} + +prompt { + enabled: true; + background-color: inherit; + text-color: inherit; +} +textbox-prompt-colon { + enabled: true; + expand: false; + str: "::"; + background-color: inherit; + text-color: inherit; +} +entry { + enabled: true; + background-color: inherit; + text-color: inherit; + cursor: text; + placeholder: ""; + placeholder-color: inherit; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 12; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 0px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: "default"; +} +scrollbar { + handle-width: 5px ; + handle-color: @handle-colour; + border-radius: 0px; + background-color: @alternate-background; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 10px; + margin: 0px; + padding: 5px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; + cursor: pointer; +} +element normal.normal { + background-color: var(normal-background); + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(alternate-background); + text-color: var(foreground-colour); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-icon { + background-color: transparent; + text-color: inherit; + size: 24px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} + +/*****----- Mode Switcher -----*****/ +mode-switcher{ + enabled: true; + spacing: 10px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +button { + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: inherit; + cursor: pointer; +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px 0px 0px 0px; + border-color: @border-colour; + background-color: transparent; + text-color: @foreground-colour; +} +textbox { + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @alternate-background; + text-color: @foreground-colour; + vertical-align: 0.5; + horizontal-align: 0.0; + highlight: none; + placeholder-color: @foreground-colour; + blink: true; + markup: true; +} +error-message { + padding: 10px; + border: 0px solid; + border-radius: 0px; + border-color: @border-colour; + background-color: @background-colour; + text-color: @foreground-colour; +} diff --git a/modules/home-manager/wm/rofi/power.rasi b/modules/home-manager/wm/rofi/power.rasi new file mode 100644 index 0000000..6fe2085 --- /dev/null +++ b/modules/home-manager/wm/rofi/power.rasi @@ -0,0 +1,151 @@ +/*****----- Configuration -----*****/ +configuration { + show-icons: false; +} + +/*****----- Global Properties -----*****/ +@import "colors.rasi" + +/*****----- Main Window -----*****/ +window { + /* properties for window widget */ + transparency: "real"; + location: center; + anchor: center; + fullscreen: false; + width: 350px; + x-offset: 0px; + y-offset: 0px; + + /* properties for all widgets */ + enabled: true; + margin: 0px; + padding: 0px; + border: 1px solid; + border-radius: 0px; + border-color: @selected; + cursor: "default"; + background-color: @background; +} + +/*****----- Main Box -----*****/ +mainbox { + enabled: true; + spacing: 8px; + margin: 0px; + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + children: [ "inputbar", "message", "listview" ]; +} + +/*****----- Inputbar -----*****/ +inputbar { + enabled: true; + spacing: 8px; + margin: 0px; + padding: 0px; + border: 0px; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + children: [ "textbox-prompt-colon", "prompt"]; +} + +textbox-prompt-colon { + enabled: true; + expand: false; + str: ""; + padding: 8px 12px; + border-radius: 0px; + background-color: @urgent; + text-color: @background; +} +prompt { + enabled: true; + padding: 8px; + border-radius: 0px; + background-color: @active; + text-color: @background; +} + +/*****----- Message -----*****/ +message { + enabled: true; + margin: 0px; + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background-alt; + text-color: @foreground; +} +textbox { + background-color: inherit; + text-color: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; + placeholder-color: @foreground; + blink: true; + markup: true; +} +error-message { + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: @background; + text-color: @foreground; +} + +/*****----- Listview -----*****/ +listview { + enabled: true; + columns: 1; + lines: 5; + cycle: true; + dynamic: true; + scrollbar: false; + layout: vertical; + reverse: false; + fixed-height: true; + fixed-columns: true; + + spacing: 5px; + margin: 0px; + padding: 0px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: "default"; +} + +/*****----- Elements -----*****/ +element { + enabled: true; + spacing: 0px; + margin: 0px; + padding: 8px; + border: 0px solid; + border-radius: 0px; + border-color: @selected; + background-color: transparent; + text-color: @foreground; + cursor: pointer; +} +element-text { + background-color: transparent; + text-color: inherit; + cursor: inherit; + vertical-align: 0.5; + horizontal-align: 0.0; +} +element selected.normal { + background-color: var(selected); + text-color: var(background); +} \ No newline at end of file diff --git a/modules/home-manager/wm/rofi.nix b/modules/home-manager/wm/rofi/rofi.nix similarity index 57% rename from modules/home-manager/wm/rofi.nix rename to modules/home-manager/wm/rofi/rofi.nix index 25a03d0..26861e0 100644 --- a/modules/home-manager/wm/rofi.nix +++ b/modules/home-manager/wm/rofi/rofi.nix @@ -7,19 +7,20 @@ # Полезная инфа https://wiki.archlinux.org/title/Rofi # Готовые скрипты https://github.com/davatorium/rofi/wiki/User-scripts -{ pkgs, ... }: { # Запускатор софта и не только +{ pkgs, config, ... }: { # Запускатор софта и не только programs.rofi = { # https://github.com/davatorium/rofi enable = true; terminal = "${pkgs.alacritty}/bin/alacritty"; # Path to the terminal which will be used to run console applications location = "center"; # The location rofi appears on the screen. # cycle = true; # Whether to cycle through the results list. - pass = { # https://github.com/carnager/rofi-pass - enable = true; - # stores = []; # Directory roots of your password-stores. - # extraConfig = '' - # https://github.com/carnager/rofi-pass/blob/master/config.example - # ''; + pass = { + enable = true; # https://github.com/carnager/rofi-pass + extraConfig = '' + _rofi () { + rofi -i -no-auto-select -theme ${config.home.homeDirectory}/.config/rofi/launcher.rasi "$@" + } + ''; }; plugins = with pkgs; [ @@ -28,9 +29,7 @@ # rofi-bluetooth # https://github.com/nickclyde/rofi-bluetooth ]; - extraConfig = { - - }; + # extraConfig = {}; }; # Мб заменю на greenclip, который включается как сервис в packages.nix @@ -39,7 +38,25 @@ launcher = "rofi"; }; - # xdg.configFile = { - # "rofi/config.rasi".source = config.rasi; - # }; + xdg.configFile = { + "rofi/launcher.rasi".source = ./launcher.rasi; + "rofi/power.rasi".source = ./power.rasi; + "rofi/colors.rasi".text = '' + * { + background: #${config.lib.stylix.colors.base00}; + background-alt: #${config.lib.stylix.colors.base01}; + foreground: #${config.lib.stylix.colors.base06}; + selected: #${config.lib.stylix.colors.base0D}; + active: #${config.lib.stylix.colors.base0B}; + urgent: #${config.lib.stylix.colors.base08}; + } + ''; + }; } + +# background: #${config.lib.stylix.colors.base00}; #282828 +# background-alt: #${config.lib.stylix.colors.base01}; #3c3836 +# foreground: #${config.lib.stylix.colors.base06}; #ebdbb2 +# selected: #${config.lib.stylix.colors.base0D}; #83a598 +# active: #${config.lib.stylix.colors.base0B}; #b8bb26 +# urgent: #${config.lib.stylix.colors.base08}; #fb4934 diff --git a/modules/home-manager/wm/sxhkd.nix b/modules/home-manager/wm/sxhkd.nix index 749fe95..3a51cc5 100644 --- a/modules/home-manager/wm/sxhkd.nix +++ b/modules/home-manager/wm/sxhkd.nix @@ -4,7 +4,7 @@ # Но мне лень столько текста делать. И так сойдёт # Стандартный конфиг https://github.com/baskerville/bspwm/blob/master/examples/sxhkdrc -{ pkgs, ... }: let +{ pkgs, config, ... }: let notifyMute = ''dunstify "$(if [ "$(pamixer --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000''; notifyMicMute = ''dunstify "$(if [ "$(pamixer --default-source --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000''; notifyVolume = ''dunstify " Volume: $(pamixer --get-volume)" -r 91190 -t 800''; @@ -13,6 +13,8 @@ terminalFirst = "alacritty"; terminalSecond = "kitty"; + + rofiDir = "${config.home.homeDirectory}/.config/rofi" in { home.package = [ sxhkd ]; @@ -119,11 +121,11 @@ in { # Applications. Запускатор софта super + a - rofi -show drun -show-icons + rofi -show drun -theme ${rofiDir}/launcher.rasi # Calculator имбовый. Можно даже написать `5600 USD to BTC` или `500 + 25%`. super + c - rofi -show calc -modi calc -no-show-match -no-sort + rofi -show calc -modi calc -no-show-match -no-sort -theme ${rofiDir}/launcher.rasi # Passwords. Пароли из утилиты pass super + p @@ -135,11 +137,11 @@ in { # Как alt+tab, переключение окон. На нужный воркспейс само перекинет super + tab - rofi -show window -show-icons + rofi -show window -theme ${rofiDir}/launcher.rasi # PowerMenu. Выключение пк super + BackSpace - rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu + rofi -show powermenu -modi powermenu:${pkgs.rofi-power-menu}/bin/rofi-power-menu -theme ${rofiDir}/power.rasi # Timer. Думаю сделать через утилиту timer # super + alt + t