Compare commits

...

2 commits

Author SHA1 Message Date
74f549dab8 Стили для rofi 2024-08-28 19:15:17 +03:00
b3b69d2a85 Включил i3 2024-08-28 19:14:33 +03:00
11 changed files with 512 additions and 42 deletions

View file

@ -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` или просто не отслеживаемые гитом файлы.

View file

@ -22,8 +22,9 @@
./terminal/zsh.nix
./wm/bspwm/bspwm.nix
./wm/rofi.nix
./wm/rofi/rofi.nix
./wm/dunst.nix
./wm/i3.nix
./wm/lockscreen.nix
./wm/polybar.nix
./wm/sxhkd.nix

View file

@ -9,7 +9,7 @@
# Вроде это более простой симлинк, чем просто ссылка на файл
# Но мб меня обманули
{ config, ... }: let
{ pkgs, config, ... }: let
home-dir = "backups"; # Имя каталога для бекапов. Мб захочу поменять
dir = "${config.home.homeDirectory}/${home-dir}";
in {
@ -32,12 +32,19 @@ in {
".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Backups/Apps/.librewolf";
"Downloads/Telegram Desktop".source = config.lib.file.mkOutOfStoreSymlink "${dir}/Telegram Desktop";
# Не знаю на счёт strawberry, obs, chatbox, planify, calibre, discord, nekobox
# Временное решение, где `native-messaging-hosts/ff2mpv.json` ссылается на ~/ff2mpv.py
"ff2mpv.py" = {
source = "${pkgs.ff2mpv}/bin/ff2mpv.py";
executable = true;
};
# Надо добавить симлинк на `native-messaging-hosts/ff2mpv.json`.
# Сначала установить это на firefox, который мне не особо важен
# А потом задать симлинк с firefox на librewolf, который мне важен
# и который я не хочу редактировать через nix
# Не знаю на счёт obs, chatbox, planify, calibre, discord, nekobox
};
xdg.configFile = { # Это для каталога .config

View file

@ -0,0 +1,10 @@
{ # https://nixos.wiki/wiki/I3
xsession.windowManager.i3 = {
enable = true;
};
# programs = {
# i3status = {};
# i3blocks = {};
# };
}

View file

@ -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

View file

@ -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} [<span weight='light' size='small'><i>({generic})</i></span>]";
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;
}

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -23,7 +23,10 @@
services.xserver = {
enable = true;
windowManager.bspwm.enable = true;
windowManager = {
bspwm.enable = true;
i3.enable = true; # i3-gaps доступен в стоке в новых версиях
};
displayManager = {
lightdm = { # Минималистичный display manager

View file

@ -51,6 +51,7 @@
gnupg.agent = {
enable = true;
enableSSHSupport = true;
pinentryPackage = pkgs.pinentry-qt;
};
appimage = { # Чтоб .appimage работал
@ -300,15 +301,9 @@
## IDE ##
#########
# neovim # Мб не надо писать, он у меня необычный через nixvim flake
# vscode # Мб надо в home.packages писать, чтоб расширения ставились без рута
# vscodium # VSCode без телеметрии и прочего кала. Не имеет обратной совместимости с расширениями vscode
# jetbrains-toolbox # У меня крашит ребилд. https://nixos.wiki/wiki/Jetbrains_Tools
# jetbrains.webstorm
# jetbrains.rust-rover
# jetbrains.pycharm-professional
# jetbrains.clion
# jetbrains.goland
# neovim # Мб не надо писать, он у меня необычный, через nixvim flake
# vscode # Надо в home.packages писать, чтоб расширения ставились без рута
# jetbrains-toolbox # Надо в home.packages писать. https://nixos.wiki/wiki/Jetbrains_Tools
helix # A Kakoune / Neovim inspired editor, written in Rust.
###########