From e2a8f86899fc75777b971d9ee4db5a467df895c1 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Mon, 12 Jun 2023 23:32:34 +0100 Subject: [PATCH] refactor(sway): manage with Home Manager --- config/sway/config | 271 ----------------------- config/{sway => wallpaper}/wallpaper.jpg | Bin home-manager/modules/common.nix | 4 +- home-manager/modules/home-manager.nix | 134 ++++++++++- system/nixos/nixedo/configuration.nix | 9 +- 5 files changed, 141 insertions(+), 277 deletions(-) delete mode 100644 config/sway/config rename config/{sway => wallpaper}/wallpaper.jpg (100%) diff --git a/config/sway/config b/config/sway/config deleted file mode 100644 index 7205e4f..0000000 --- a/config/sway/config +++ /dev/null @@ -1,271 +0,0 @@ -# Default config for sway -# -# Copy this to ~/.config/sway/config and edit it to your liking. -# -# Read `man 5 sway` for a complete reference. - -### Variables -# -# Logo key. Use Mod1 for Alt. -set $mod Mod4 - -# Home row direction keys, like vim -set $left h -set $down j -set $up k -set $right l - -# Your preferred terminal emulator -set $term alacritty -# Your preferred application launcher -# Note: pass the final command to swaymsg so that the resulting window can be opened -# on the original workspace that the command was run on. -set $menu wofi --show run - -set $browser firefox - -set $wallpaper ~/.config/sway/wallpaper.jpg - -### Output configuration -# -# Default wallpaper (more resolutions are available in /run/current-system/sw/share/backgrounds/sway/) -output * bg $wallpaper fill #000000 - -# -# Example configuration: -# -# output HDMI-A-1 resolution 1920x1080 position 1920,0 -# -# You can get the names of your outputs by running: swaymsg -t get_outputs -output DP-7 resolution 2560x1440 scale 1.0 -output eDP-1 scale 1.0 - -set $laptop eDP-1 -bindswitch --reload --locked lid:on output $laptop disable -bindswitch --reload --locked lid:off output $laptop enable - -# bindsym $mod+1 [workspace="1"] move workspace to output current; workspace number 1 -# bindsym $mod+2 [workspace="2"] move workspace to output current; workspace number 2 -# bindsym $mod+3 [workspace="3"] move workspace to output current; workspace number 3 -# bindsym $mod+4 [workspace="4"] move workspace to output current; workspace number 4 -# bindsym $mod+5 [workspace="5"] move workspace to output current; workspace number 5 -# bindsym $mod+6 [workspace="6"] move workspace to output current; workspace number 6 -# bindsym $mod+7 [workspace="7"] move workspace to output current; workspace number 7 -# bindsym $mod+8 [workspace="8"] move workspace to output current; workspace number 8 -# bindsym $mod+9 [workspace="9"] move workspace to output current; workspace number 9 -# bindsym $mod+0 [workspace="10"] move workspace to output current; workspace number 10 - -bindsym $mod+tab workspace back_and_forth - -bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- -bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ - -### Idle configuration -exec swayidle -w \ - timeout 300 'swaylock -f -i $wallpaper \ - timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \ - before-sleep "swaylock -f -i $wallpaper" - -bindsym $mod+Escape exec swaylock -f -i $wallpaper #000000 - -### Input configuration -# -# Example configuration: -# -# input "2:14:SynPS/2_Synaptics_TouchPad" { -# dwt enabled -# tap enabled -# natural_scroll enabled -# middle_emulation enabled -# } -# -# You can get the names of your inputs by running: swaymsg -t get_inputs -# Read `man 5 sway-input` for more information about this section. - -### Key bindings -# -# Basics: -# - # Start a terminal - bindsym $mod+Return exec $term - - # Kill focused window - bindsym $mod+Shift+q kill - - # Start your launcher - bindsym $mod+d exec $menu - - bindsym $mod+Shift+b exec $browser - - # Drag floating windows by holding down $mod and left mouse button. - # Resize them with right mouse button + $mod. - # Despite the name, also works for non-floating windows. - # Change normal to inverse to use left mouse button for resizing and right - # mouse button for dragging. - floating_modifier $mod normal - - # Reload the configuration file - bindsym $mod+Shift+c reload - - # Exit sway (logs you out of your Wayland session) - bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' - -exec nm-applet --indicator - -# -# Moving around: -# - # Move your focus around - bindsym $mod+$left focus left - bindsym $mod+$down focus down - bindsym $mod+$up focus up - bindsym $mod+$right focus right - # Or use $mod+[up|down|left|right] - bindsym $mod+Left focus left - bindsym $mod+Down focus down - bindsym $mod+Up focus up - bindsym $mod+Right focus right - - # Move the focused window with the same, but add Shift - bindsym $mod+Shift+$left move left - bindsym $mod+Shift+$down move down - bindsym $mod+Shift+$up move up - bindsym $mod+Shift+$right move right -# -# Workspaces: -# - # Switch to workspace - bindsym $mod+1 workspace number 1 - bindsym $mod+2 workspace number 2 - bindsym $mod+3 workspace number 3 - bindsym $mod+4 workspace number 4 - bindsym $mod+5 workspace number 5 - bindsym $mod+6 workspace number 6 - bindsym $mod+7 workspace number 7 - bindsym $mod+8 workspace number 8 - bindsym $mod+9 workspace number 9 - bindsym $mod+0 workspace number 10 - # Move focused container to workspace - bindsym $mod+Shift+1 move container to workspace number 1 - bindsym $mod+Shift+2 move container to workspace number 2 - bindsym $mod+Shift+3 move container to workspace number 3 - bindsym $mod+Shift+4 move container to workspace number 4 - bindsym $mod+Shift+5 move container to workspace number 5 - bindsym $mod+Shift+6 move container to workspace number 6 - bindsym $mod+Shift+7 move container to workspace number 7 - bindsym $mod+Shift+8 move container to workspace number 8 - bindsym $mod+Shift+9 move container to workspace number 9 - bindsym $mod+Shift+0 move container to workspace number 10 - # Note: workspaces can have any name you want, not just numbers. - # We just use 1-10 as the default. -# -# Layout stuff: -# - # You can "split" the current object of your focus with - # $mod+b or $mod+v, for horizontal and vertical splits - # respectively. - bindsym $mod+b splith - bindsym $mod+v splitv - - # Switch the current container between different layout styles - bindsym $mod+s layout stacking - bindsym $mod+w layout tabbed - bindsym $mod+e layout toggle split - - # Make the current focus fullscreen - bindsym $mod+f fullscreen - - # Toggle the current focus between tiling and floating mode - bindsym $mod+Shift+space floating toggle - - # Swap focus between the tiling area and the floating area - bindsym $mod+space focus mode_toggle - - # Move focus to the parent container - bindsym $mod+a focus parent -# -# Scratchpad: -# - # Sway has a "scratchpad", which is a bag of holding for windows. - # You can send windows there and get them back later. - - # 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. - # If there are multiple scratchpad windows, this command cycles through them. - bindsym $mod+minus scratchpad show -# -# Resizing containers: -# -mode "resize" { - # left will shrink the containers width - # right will grow the containers width - # up will shrink the containers height - # down will grow the containers height - bindsym $left resize shrink width 10px - bindsym $down resize grow height 10px - bindsym $up resize shrink height 10px - bindsym $right resize grow width 10px - - # Ditto, with arrow keys - bindsym Left resize shrink width 10px - bindsym Down resize grow height 10px - bindsym Up resize shrink height 10px - bindsym Right resize grow width 10px - - # Return to default mode - bindsym Return mode "default" - bindsym Escape mode "default" -} -bindsym $mod+r mode "resize" - -# -# Status Bar: -# -# Read `man 5 sway-bar` for more information about this section. -bar { - position bottom - tray_padding 10px - font pango:DejaVu Sans Mono 16 - - # When the status_command prints a new line to stdout, swaybar updates. - # The default just shows the current date and time. - # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done - status_command i3status-rs ~/.config/i3status-rust/config-default.toml - - colors { - statusline #ffffff - background #323232 - focused_workspace #ffffff #ffffff #333333 - } -} - -default_border pixel 3 - -input * { - xkb_layout "gb" -} - -input type:touchpad { - tap enabled - dwt enabled - natural_scroll disabled -} - -smart_borders on -smart_gaps on -gaps inner 10 - -exec configure-gtk - -bindsym --locked XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -l 1.2 -bindsym --locked XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ -l 1.2 - -assign [app_id="Alacritty"] workspace 1 -assign [app_id="firefox"] workspace 2 -assign [class="Slack"] workspace 10 -assign [class="discord"] workspace 10 -# Get app_id with swaymsg -t get_tree - -include /etc/sway/config.d/* diff --git a/config/sway/wallpaper.jpg b/config/wallpaper/wallpaper.jpg similarity index 100% rename from config/sway/wallpaper.jpg rename to config/wallpaper/wallpaper.jpg diff --git a/home-manager/modules/common.nix b/home-manager/modules/common.nix index f3d11d3..2ae1545 100644 --- a/home-manager/modules/common.nix +++ b/home-manager/modules/common.nix @@ -257,8 +257,8 @@ in recursive = true; }; - xdg.configFile.sway = { - source = ../../config/sway; + xdg.configFile.wallpaper = { + source = ../../config/wallpaper; recursive = true; }; } diff --git a/home-manager/modules/home-manager.nix b/home-manager/modules/home-manager.nix index ef13b04..da0c4cb 100644 --- a/home-manager/modules/home-manager.nix +++ b/home-manager/modules/home-manager.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: { +{ config, lib, pkgs, ... }: { home.username = "opdavies"; home.homeDirectory = "/home/opdavies"; @@ -6,6 +6,121 @@ programs.home-manager.enable = true; + services.swayidle.enable = true; + + services.swayidle.events = [ + { + event = "before-sleep"; + command = "${pkgs.swaylock}/bin/swaylock --daemonize --image ~/.config/wallpaper/wallpaper.jpg"; + } + ]; + + services.swayidle.timeouts = [ + { + timeout = 60; + command = "${pkgs.swaylock}/bin/swaylock --daemonize --image ~/.config/wallpaper/wallpaper.jpg"; + } + { + timeout = 300; + command = "swaymsg 'output * dpms off'"; + resumeCommand = "swaymsg 'output * dpms on'"; + } + ]; + + programs.swaylock.enable = true; + programs.swaylock.settings = { + daemonize = true; + image = "~/.config/wallpaper/wallpaper.jpg"; + }; + + wayland.windowManager.sway.enable = true; + + wayland.windowManager.sway.config = { + assigns = { + "1" = [{ app_id = "firefox"; }]; + "2" = [{ app_id = "Alacritty"; }]; + "3" = [{ class = "vlc"; }]; + "10" = [ + { class = "Slack"; } + { class = "discord"; } + ]; + # Get app_id with swaymsg -t get_tree + }; + + bars = [ + { + colors = { + background = "#323232"; + focusedWorkspace = { + background = "#ffffff"; + border = "#ffffff"; + text = "#333333"; + }; + statusline = "#ffffff"; + }; + + fonts = { + names = [ "DejaVu Sans Mono" ]; + size = 16.0; + }; + + statusCommand = "i3status-rs ~/.config/i3status-rust/config-default.toml"; + trayPadding = 10; + } + ]; + + gaps.inner = 10; + gaps.smartBorders = "on"; + gaps.smartGaps = true; + + input = { + "*" = { + xkb_layout = "gb"; + }; + + "type:touchpad" = { + dwt = "enabled"; + tap = "enabled"; + }; + }; + + keybindings = + let modifier = config.wayland.windowManager.sway.config.modifier; + in lib.mkOptionDefault { + "${modifier}+Escape" = "exec swaylock --daemonize"; + "${modifier}+Shift+b" = "exec firefox"; + "${modifier}+tab" = "workspace back_and_forth"; + }; + + menu = "wofi --show run"; + modifier = "Mod4"; + + output = { + "*" = { + bg = "~/.config/wallpaper/wallpaper.jpg fill"; + }; + + eDP-1 = { + scale = "1.0"; + }; + }; + + terminal = "alacritty"; + + window.border = 3; + }; + + wayland.windowManager.sway.extraConfig = '' + set $laptop eDP-1 + bindswitch --reload --locked lid:on output $laptop disable + bindswitch --reload --locked lid:off output $laptop enable + + bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- + bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ + + for_window [class="vlc"] inhibit_idle fullscreen + ''; + programs.i3status-rust = { enable = true; @@ -44,6 +159,23 @@ format = " $timestamp.datetime(f:'%F %T') "; } ]; + + settings = { + theme = { + theme = "plain"; + overrides = { + good_bg = "#333333"; + good_fg = "#ffffff"; + idle_bg = "#333333"; + idle_fg = "#ffffff"; + info_bg = "#333333"; + info_fg = "#ffffff"; + separator_bg = "#333333"; + warning_bg = "#333333"; + warning_fg = "#ffffff"; + }; + }; + }; }; }; }; diff --git a/system/nixos/nixedo/configuration.nix b/system/nixos/nixedo/configuration.nix index ca702a2..8fb58c0 100644 --- a/system/nixos/nixedo/configuration.nix +++ b/system/nixos/nixedo/configuration.nix @@ -118,9 +118,12 @@ in { [ brightnessctl configure-gtk - i3status-rust - swayidle - swaylock + ffmpegthumbnailer + google-chrome + swaybg + xfce.thunar + xfce.thunar-volman + xfce.tumbler ]; xdg.portal = {