From 135d190b74cfb20ba83ccb62701fda15ae5ab65d Mon Sep 17 00:00:00 2001 From: Dominik Polakovics Date: Thu, 13 Jul 2023 19:39:41 +0200 Subject: [PATCH] move sway config files to nix files --- utils/modules/sway/config.nix | 356 +++++++++++++++++++++++ utils/modules/sway/sway.nix | 11 +- utils/modules/sway/wofi-styles.nix | 46 +++ utils/modules/sway/xdg-waybar-config.nix | 220 ++++++++++++++ 4 files changed, 626 insertions(+), 7 deletions(-) create mode 100644 utils/modules/sway/config.nix create mode 100644 utils/modules/sway/wofi-styles.nix create mode 100644 utils/modules/sway/xdg-waybar-config.nix diff --git a/utils/modules/sway/config.nix b/utils/modules/sway/config.nix new file mode 100644 index 0000000..8eda7db --- /dev/null +++ b/utils/modules/sway/config.nix @@ -0,0 +1,356 @@ +{ config, pkgs, lib, ... }: +{ + environment.etc = { + "sway/config".text = '' + # Oxide theme + # + # Author: Diki Ananta Repository: https://github.com/dikiaap/dotfiles + # License: MIT + # i3 config file (v4) + + # font for window titles and bar + font pango:Source Sans Pro 10 + + # use win key + set $mod Mod4 + + # use these keys for focus, movement, and resize directions + set $left h + set $down j + set $up k + set $right l + + # define names for workspaces + 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: " + + # assign workspaces to primary monitor + workspace $ws1 output primary + workspace $ws2 output primary + workspace $ws3 output primary + workspace $ws4 output primary + workspace $ws5 output primary + workspace $ws6 output primary + workspace $ws7 output primary + workspace $ws8 output primary + workspace $ws9 output primary + + # use $mod+Mouse to drag floating windows to their wanted position + floating_modifier $mod + + # control focused window when follows the mouse movements + focus_follows_mouse no + + # window border settings + default_border none + default_floating_border none + + # hiding borders adjacent to the screen edges + hide_edge_borders none + + # set popups during fullscreen mode + popup_during_fullscreen smart + + # start a terminal + #bindsym $mod+Return workspace $ws1; exec --no-startup-id alacritty + bindsym $mod+Return workspace $ws1; exec alacritty -t alacritty-sway + + # start a program launcher + # bindsym $mod+d exec --no-startup-id wofi -s /etc/wofi/style.css --show drun --lines 5 --columns 1 -t alacritty + bindsym $mod+d exec alacritty --class=launcher -e env TERMINAL_COMMAND="alacritty -e" sway-launcher-desktop + #bindsym $mod+d exec --no-startup-id bemenu + #bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu="dmenu -i -fn 'Source Sans Pro-10' -nb '#212121' -sb '#2b83a6' -sf '#ffffff' + #bindsym $mod+d exec --no-startup-id bemenu --dmenu="dmenu -i -fn 'Source Sans Pro-10' -nb '#212121' -sb '#2b83a6' -sf '#ffffff' + + # start an explorer + bindsym $mod+e exec --no-startup-id pcmanfm + + # switching window with win+tab + bindsym $mod+Tab exec --no-startup-id wofi -show window + + # kill focused window + bindsym $mod+Shift+q kill + + # change keyboard layout + bindsym $mod+i swaymsg input "*" us + bindsym $mod+Shift+i swaymsg input "*" de + + # change focus + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right 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+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right 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+c 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 + bindsym $mod+s layout stacking + bindsym $mod+w layout tabbed + bindsym $mod+p 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+Shift+a focus child + + # move the currently focused window to the scratchpad + bindsym $mod+Shift+minus move scratchpad + + # show the next scratchpad window or hide the focused scratchpad window + bindsym $mod+minus scratchpad show + + # move focused floating window to the current position of the cursor + bindsym $mod+Shift+m move position mouse + + # set a window to stick to the glass + bindsym $mod+Shift+s sticky toggle + + # sticky preview for media + bindsym $mod+Shift+p fullscreen disable; floating enable; resize set 350 px 197 px; sticky enable; move window to position 1006 px 537 px + + # shortcut to change window border + bindsym $mod+t border normal 0 + bindsym $mod+y border pixel 1 + bindsym $mod+u border none + + # switch to workspace + + bindcode $mod+10 workspace $ws1 + bindcode $mod+11 workspace $ws2 + bindcode $mod+12 workspace $ws3 + bindcode $mod+13 workspace $ws4 + bindcode $mod+14 workspace $ws5 + bindcode $mod+15 workspace $ws6 + bindcode $mod+16 workspace $ws7 + bindcode $mod+17 workspace $ws8 + bindcode $mod+18 workspace $ws9 + bindcode $mod+19 workspace $ws10 + + # move focused container to workspace + bindcode $mod+Shift+10 move container to workspace $ws1 + bindcode $mod+Shift+11 move container to workspace $ws2 + bindcode $mod+Shift+12 move container to workspace $ws3 + bindcode $mod+Shift+13 move container to workspace $ws4 + bindcode $mod+Shift+14 move container to workspace $ws5 + bindcode $mod+Shift+15 move container to workspace $ws6 + bindcode $mod+Shift+16 move container to workspace $ws7 + bindcode $mod+Shift+17 move container to workspace $ws8 + bindcode $mod+Shift+18 move container to workspace $ws9 + bindcode $mod+Shift+19 move container to workspace $ws10 + + # shortcut applications + bindsym $mod+F1 exec gkamus + bindsym $mod+F2 workspace $ws2; exec subl + bindsym $mod+F3 workspace $ws3; exec chromium-browser + bindsym $mod+F4 workspace $ws4; exec pcmanfm + bindsym $mod+F5 workspace $ws5; exec evince + bindsym $mod+F6 workspace $ws6; exec audacious + bindsym $mod+F7 workspace $ws7; exec gcolor2 + bindsym $mod+F8 workspace $ws8; exec telegram + bindsym $mod+F9 workspace $ws9; exec go-for-it + bindsym Print exec --no-startup-id gnome-screenshot + bindcode $mod+9 exec swaylock --image ~/.wallpaper.jpg + bindsym Ctrl+Shift+Space exec 1password --quick-access + bindsym $mod+Space exec rofi-rbw --menu-keybindings ctrl+p:copy:password + + # volume + bindsym XF86AudioLowerVolume exec amixer -q sset Master 5%- unmute + bindsym XF86AudioRaiseVolume exec amixer -q sset Master 5%+ unmute + bindsym XF86AudioMute exec amixer -q sset Master toggle + + # touchpad + # bindsym XF86NotificationCenter exec swaymsg input type:touchpad events toggle enabled disabled + + # set brightness logarithmically by factor 1.4 + # .72 is just slightly bigger than 1 / 1.4 + bindsym --locked XF86MonBrightnessUp exec light -S "$(light -G | awk '{ print int(($1 + .72) * 1.4) }')" + bindsym --locked XF86MonBrightnessDown exec light -S "$(light -G | awk '{ print int($1 / 1.4) }')" + + # reload the configuration file + bindsym $mod+Shift+c reload + + # restart i3 inplace + bindsym $mod+Shift+r restart + + # manage i3 session + bindsym $mod+Shift+e exec swaynag --background f1fa8c --border ffb86c --border-bottom-size 0 --button-background ffb86c --button-text 282a36 -t warning -f "pango:Hack 9" -m "Do you really want to exit?" -B "  Exit " "swaymsg exit" -B "  Lock " "pkill swaynag && swaylock --image ~/.wallpaper.jpg" -B "  Reboot " "pkill swaynag && reboot" -B "  Shutdown " "pkill swaynag && shutdown -h now" -B " Suspend " "pkill swaynag && systemctl suspend" + + # resize window + bindsym $mod+r mode "  " + mode "  " { + # pressing left and up will shrink the window's width and height + # pressing right and down will grow the window's width and height + 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 + + # 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 win+r + bindsym Return mode "default" + bindsym $mod+r mode "default" + } + + # set specific windows to floating mode + for_window [window_role="app"] floating enable + #for_window [window_role="pop-up"] floating enable + for_window [window_role="task_dialog"] floating enable + for_window [title="Preferences$"] floating enable + for_window [class="Gkamus"] floating enable + for_window [class="Go-for-it"] floating enable + for_window [class="Lightdm-gtk-greeter-settings"] floating enable + for_window [class="Lxappearance"] floating enable + for_window [class="Menu"] floating enable + for_window [class="Nm-connection-editor"] floating enable + for_window [class="Software-properties-gtk"] floating enable + for_window [app_id="launcher"] floating enable + + # set specific windows to tabbed mode + #for_window [class="Rambox"]tabbed + #for_window [class="Signal"]tabbed + + # assign program to workspace + assign [title="alacritty-sway"] → $ws1 + assign [app_id="Alacritty" title="^(?!alacritty-sway)$"] → $ws2 + assign [app_id="chromium"] → $ws3 + assign [app_id="firefox"] → $ws3 + assign [app_id="pcmanfm"] → $ws4 + assign [app_id="libreoffice-calc"] → $ws5 + assign [app_id="libreoffice-writer"] → $ws5 + assign [class="vlc"] → $ws6 + assign [class="Gimp"] → $ws7 + assign [class="Signal"] → $ws8 + assign [app_id="social"] → $ws8 + assign [app_id="thunderbird"] → $ws8 + assign [class="Lightdm-gtk-greeter-settings"] → $ws10 + assign [class="Software-properties-gtk"] → $ws10 + + # class border backgr. text indicator child_border + client.focused #2b83a6 #2b83a6 #ffffff #dddddd #2b83a6 + client.focused_inactive #212121 #212121 #86888c #292d2e #5a5a5a + client.unfocused #212121 #212121 #86888c #292d2e #5a5a5a + client.urgent #d64e4e #d64e4e #ffffff #d64e4e #d64e4e + client.placeholder #212121 #0c0c0c #ffffff #212121 #262626 + client.background #212121 + + bar { + swaybar_command waybar + } + + # gaps + smart_gaps on + gaps inner 12 + gaps outer 0 + + # startup applications + exec /run/wrappers/bin/gnome-keyring-daemon --start --daemonize + exec dbus-sway-environment + exec configure-gtk + exec nm-applet --indicator + exec alacritty -t alacritty-sway + exec signal-desktop + exec firefox --name=social -P social + exec thunderbird + exec firefox + exec nextcloud + exec owncloud + exec swayidle \ + before-sleep 'loginctl lock-session $XDG_SESSION_ID' \ + lock 'swaylock --image ~/.wallpaper.jpg' \ + timeout 180 'swaylock --screenshots --effect-blur 7x5' \ + timeout 1800 'systemctl suspend' + exec dunst + #exec --no-startup-id swaybg -c "#000000" -m fill -i ~/.config/wallpaper/wot.jpg + # exec --no-startup-id gnome-keyring-daemon --start --components=pkcs11,secrets,ssh + exec 'sleep 2; swaymsg workspace $ws8; swaymsg layout tabbed' + + # wallpaper + output eDP-1 bg ~/.wallpaper.jpg fill + output DP-4 bg ~/.wallpaper.jpg fill + output DP-5 bg ~/.wallpaper.jpg fill + + input * xkb_layout "de" + input * xkb_variant "colemak,,typewriter" + input * xkb_options "grp:win_space_toggle" + input "MANUFACTURER1 Keyboard" xkb_model "pc101" + + # notebook + set $laptop eDP-1 + # bindswitch --reload --locked lid:on output $laptop disable + # bindswitch --reload lid:off output $laptop enable + + # A lock command used in several places + set $lock_script swaylock + + # A sleep command used in several places. + # We leave a bit of time for locking to happen before putting the system to sleep + set $sleep $lock_script && sleep 3 && systemctl suspend + + # Triggers a short notification + set $notify dunstify --timeout 1500 + + # Set your laptop screen name + set $laptop_screen 'eDP-1' + + # Clamshell mode or lock & sleep + # This is a if/else statement: [ outputs_count == 1 ] && true || false + #bindswitch --reload --locked lid:on exec '[ $(swaymsg -t get_outputs | grep name | wc -l) == 1 ] && ($sleep) || ($notify "Clamshell mode" "Laptop screen off" && swaymsg output $laptop_screen disable)' + + #bindswitch --reload --locked lid:off output $laptop_screen enable + + # disable xwayland + #xwayland disable + + # Touchpad + input type:touchpad { + tap enabled + natural_scroll enabled + } + ''; + }; +} diff --git a/utils/modules/sway/sway.nix b/utils/modules/sway/sway.nix index 6671bf2..62b3483 100644 --- a/utils/modules/sway/sway.nix +++ b/utils/modules/sway/sway.nix @@ -15,6 +15,10 @@ let in { imports = [ + ./config.nix + ./wofi-styles.nix + ./xdg-waybar-config.nix + ./social.nix ./signal-work.nix ./thunderbird.nix @@ -127,11 +131,4 @@ in { enable = true; wrapperFeatures.gtk = true; }; - - environment.etc = { - "sway/config".source = "/var/bento/utils/modules/sway/sway.conf"; - "wofi/style.css".source = "/var/bento/utils/modules/sway/wofi.css"; - "xdg/waybar/config".source = "/var/bento/utils/modules/sway/waybar.conf"; - "xdg/waybar/style.css".source = "/var/bento/utils/modules/sway/waybar.css"; - }; } diff --git a/utils/modules/sway/wofi-styles.nix b/utils/modules/sway/wofi-styles.nix new file mode 100644 index 0000000..0417fbc --- /dev/null +++ b/utils/modules/sway/wofi-styles.nix @@ -0,0 +1,46 @@ +{ config, pkgs, lib, ... }: +{ + environment.etc = { + "wofi/style.css".text = '' + window { + margin: 0px; + border: 1px solid #bd93f9; + background-color: #282a36; + } + + #input { + margin: 5px; + border: none; + color: #f8f8f2; + background-color: #44475a; + } + + #inner-box { + margin: 5px; + border: none; + background-color: #282a36; + } + + #outer-box { + margin: 5px; + border: none; + background-color: #282a36; + } + + #scroll { + margin: 0px; + border: none; + } + + #text { + margin: 5px; + border: none; + color: #f8f8f2; + } + + #entry:selected { + background-color: #44475a; + } + ''; + }; +} diff --git a/utils/modules/sway/xdg-waybar-config.nix b/utils/modules/sway/xdg-waybar-config.nix new file mode 100644 index 0000000..e35fff3 --- /dev/null +++ b/utils/modules/sway/xdg-waybar-config.nix @@ -0,0 +1,220 @@ +{ config, pkgs, lib, ... }: +{ + environment.etc = { + "xdg/waybar/config".text = '' + // -*- mode: json -*- + + { + "layer": "top", + "position": "top", + + "modules-left": [ + "sway/workspaces", + "custom/right-arrow-dark" + ], + "modules-center": [ + "custom/left-arrow-dark", + "clock#1", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "clock#2", + "custom/right-arrow-dark", + "custom/right-arrow-light", + "clock#3", + "custom/right-arrow-dark" + ], + "modules-right": [ + "custom/left-arrow-dark", + "network", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "pulseaudio", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "memory", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "cpu", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "battery", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "disk", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "tray" + ], + + "custom/left-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/left-arrow-light": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-light": { + "format": "", + "tooltip": false + }, + + "sway/workspaces": { + "disable-scroll": true, + "format": "{name}" + }, + + "clock#1": { + "format": "{:%a}", + "tooltip": false + }, + "clock#2": { + "format": "{:%H:%M}", + "tooltip": false + }, + "clock#3": { + "format": "{:%d.%m}", + "tooltip": false + }, + + "pulseaudio": { + "format": "{icon}{volume}%", + "format-muted": "ﱝ", + "format-icons": { + "phone": ["奄", "奔", "墳"], + "default": ["奄", "奔", "墳"] + }, + "scroll-step": 5, + "on-click": "pavucontrol", + "tooltip": false + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "memory": { + "interval": 5, + "format": "{}%" + }, + "cpu": { + "interval": 5, + "format": "﬙{usage:2}%" + }, + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-icons": [ + "", + "", + "", + "", + "" + ] + }, + "disk": { + "interval": 5, + "format": "{percentage_used:2}%", + "path": "/home/" + }, + "tray": { + "icon-size": 20 + } + } + ''; + + "xdg/waybar/style.css".text = '' + * { + font-size: 20px; + font-family: monospace; + } + + window#waybar { + background: #282a36; + color: #f8f8f2; + } + + #custom-right-arrow-dark, + #custom-left-arrow-dark { + color: #252525; + } + #custom-right-arrow-light, + #custom-left-arrow-light { + color: #282a36; + background: #252525; + } + + #workspaces, + #clock.1, + #clock.2, + #clock.3, + #network, + #pulseaudio, + #memory, + #cpu, + #battery, + #disk, + #tray { + background: #252525; + } + + #workspaces button { + padding: 0 2px; + color: #f8f8f2; + } + #workspaces button.focused { + color: #50fa7b; + } + #workspaces button:hover { + box-shadow: inherit; + text-shadow: inherit; + } + #workspaces button:hover { + background: #252525; + border: #252525; + padding: 0 3px; + } + + #network { + color: #8be9fd; + } + #pulseaudio { + color: #6272a4; + } + #memory { + color: #f8f8f2; + } + #cpu { + color: #bd93f9; + } + #battery { + color: #f1fa8c; + } + #disk { + color: #ffb86c; + } + + #clock, + #network, + #pulseaudio, + #memory, + #cpu, + #battery, + #disk { + padding: 0 10px; + } + ''; + }; +}