about summary refs log tree commit diff
path: root/modules/workstation/windowing
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-02-26 23:26:19 +0000
committerAlyssa Ross <hi@alyssa.is>2019-02-26 23:26:19 +0000
commit8c838bf7383f23b553efb4ee8d1acd78f0247ae3 (patch)
treef1ce9ed504e88e6eaa3ffb7b85727e1c0dc31204 /modules/workstation/windowing
parent9ac0eaedae6ca33c1a14251e6a65528d0293cb3f (diff)
downloadnixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar.gz
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar.bz2
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar.lz
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar.xz
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.tar.zst
nixlib-8c838bf7383f23b553efb4ee8d1acd78f0247ae3.zip
modules/sway: customise further
Diffstat (limited to 'modules/workstation/windowing')
-rw-r--r--modules/workstation/windowing/sway/choose_workspace.in6
-rw-r--r--modules/workstation/windowing/sway/config.in97
-rw-r--r--modules/workstation/windowing/sway/config.nix214
-rw-r--r--modules/workstation/windowing/sway/default.nix22
-rw-r--r--modules/workstation/windowing/sway/status_command.in22
5 files changed, 145 insertions, 216 deletions
diff --git a/modules/workstation/windowing/sway/choose_workspace.in b/modules/workstation/windowing/sway/choose_workspace.in
new file mode 100644
index 000000000000..8b36b66b2e77
--- /dev/null
+++ b/modules/workstation/windowing/sway/choose_workspace.in
@@ -0,0 +1,6 @@
+#! @execline@/bin/execlineb
+
+pipeline { swaymsg -t get_workspaces }
+pipeline { @jq@/bin/jq -r .[].name }
+
+choose --bind alt-enter:print-query
diff --git a/modules/workstation/windowing/sway/config.in b/modules/workstation/windowing/sway/config.in
new file mode 100644
index 000000000000..8c76eb877ce8
--- /dev/null
+++ b/modules/workstation/windowing/sway/config.in
@@ -0,0 +1,97 @@
+set $mod Mod4
+set $left h
+set $down j
+set $up k
+set $right l
+set $term alacritty
+
+default_border pixel
+default_floating_border pixel
+font monospace 12
+gaps inner 20
+
+for_window '[app_id="float"]' {
+    floating enable
+}
+
+input * natural_scroll enabled
+output * bg #191919 solid_color
+
+client.focused #4c7899 #4d7b3a #ffffff #83d0a2 #4d7b3a
+
+bindsym $mod+Return exec alacritty
+bindsym $mod+Shift+q kill
+bindsym $mod+d exec swaymsg exec "$(choosebin --tiebreak=begin,length,index)"
+
+# 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'
+
+bindsym $mod+$left focus left
+bindsym $mod+$down focus down
+bindsym $mod+$up focus up
+bindsym $mod+$right focus right
+
+bindsym $mod+Shift+$left move left
+bindsym $mod+Shift+$down move down
+bindsym $mod+Shift+$up move up
+bindsym $mod+Shift+$right move right
+
+bindsym $mod+g exec swaymsg workspace @choose_workspace@
+bindsym $mod+Shift+g exec swaymsg move container to workspace @choose_workspace@
+
+bindsym $mod+b splith
+bindsym $mod+v splitv
+
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+bindsym $mod+f fullscreen
+
+bindsym $mod+Shift+space floating toggle
+bindsym $mod+space focus mode_toggle
+
+bindsym $mod+a focus parent
+
+bindsym $mod+Shift+minus move scratchpad
+bindsym $mod+minus scratchpad show
+
+mode "resize" {
+    bindsym $left resize shrink width 10px
+    bindsym $down resize grow height 10px
+    bindsym $up resize shrink height 10px
+    bindsym $right resize grow width 10px
+
+    bindsym Return mode "default"
+    bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+bar {
+    position top
+
+    font monospace 12
+
+    status_command @status_command@
+
+    colors {
+        statusline #ffffff
+        background #191919
+    }
+}
+
+exec swayidle \
+    timeout 300 'swaylock -c 000000' \
+    timeout 600 'swaymsg "output * dpms off"' \
+    resume 'swaymsg "output * dpms on"' \
+    before-sleep 'swaylock -c 000000'
diff --git a/modules/workstation/windowing/sway/config.nix b/modules/workstation/windowing/sway/config.nix
deleted file mode 100644
index cbcd4c81ee71..000000000000
--- a/modules/workstation/windowing/sway/config.nix
+++ /dev/null
@@ -1,214 +0,0 @@
-{ sway, rofi }:
-
-''
-set $mod Mod4 # Super
-set $left h
-set $down j
-set $up k
-set $right l
-set $term alacritty
-# Your preferred application launcher
-# Note: it's recommended that you pass the final command to sway
-set $menu swaymsg exec ${rofi}/bin/rofi -show run
-
-default_border pixel
-
-### Output configuration
-#
-# Default wallpaper (more resolutions are available in ${sway}/share/backgrounds/sway/)
-output * bg ${sway}/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
-#
-# 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
-
-### Idle configuration
-#
-# Example configuration:
-#
-#exec swayidle \
-#    timeout 300 'swaylock -c 000000' \
-#    timeout 600 'swaymsg "output * dpms off"' \
-#       resume 'swaymsg "output * dpms on"' \
-#    before-sleep 'swaylock -c 000000'
-#
-# This will lock your screen after 300 seconds of inactivity, then turn off
-# your displays after another 300 seconds, and turn your screens back on when
-# resumed. It will also lock your screen before your computer goes to sleep.
-
-### 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.
-
-input * natural_scroll enabled
-
-### 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
-
-    # 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'
-#
-# 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
-    # ditto, with arrow 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
-#
-# Workspaces:
-#
-    # switch to workspace
-    bindsym $mod+1 workspace 1
-    bindsym $mod+2 workspace 2
-    bindsym $mod+3 workspace 3
-    bindsym $mod+4 workspace 4
-    bindsym $mod+5 workspace 5
-    bindsym $mod+6 workspace 6
-    bindsym $mod+7 workspace 7
-    bindsym $mod+8 workspace 8
-    bindsym $mod+9 workspace 9
-    bindsym $mod+0 workspace 10
-    # move focused container to workspace
-    bindsym $mod+Shift+1 move container to workspace 1
-    bindsym $mod+Shift+2 move container to workspace 2
-    bindsym $mod+Shift+3 move container to workspace 3
-    bindsym $mod+Shift+4 move container to workspace 4
-    bindsym $mod+Shift+5 move container to workspace 5
-    bindsym $mod+Shift+6 move container to workspace 6
-    bindsym $mod+Shift+7 move container to workspace 7
-    bindsym $mod+Shift+8 move container to workspace 8
-    bindsym $mod+Shift+9 move container to workspace 9
-    bindsym $mod+Shift+0 move container to workspace 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 top
-
-    # 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 %l:%M:%S %p'; do sleep 1; done
-
-    colors {
-        statusline #ffffff
-        background #323232
-        inactive_workspace #32323200 #32323200 #5c5c5c
-    }
-}
-
-include ${sway}/etc/sway/config.d/*
-''
diff --git a/modules/workstation/windowing/sway/default.nix b/modules/workstation/windowing/sway/default.nix
index d3dc1daddc07..0cc69f53ab3a 100644
--- a/modules/workstation/windowing/sway/default.nix
+++ b/modules/workstation/windowing/sway/default.nix
@@ -1,8 +1,26 @@
 { pkgs, ... }:
 
+let
+  config = pkgs.runCommand "sway-config" { inherit status_command; } ''
+    substituteAll ${./config.in} $out
+  '';
+
+  status_command = with pkgs;
+    runCommand "status_command" { inherit execline; } ''
+      substituteAll ${./status_command.in} $out
+      chmod +x $out
+    '';
+
+  choose_workspace = with pkgs;
+    runCommand "choose_workspace" { inherit execline jq; } ''
+      substituteAll ${./choose_workspace.in} $out
+      chmod +x $out
+    '';
+
 {
+  environment.systemPackages = with pkgs; [ choose ];
+
   programs.sway-beta.enable = true;
 
-  xdg.config.users.qyliss.paths."sway/config" =
-    with pkgs; writeText "sway-config" (callPackage ./config.nix {});
+  xdg.config.users.qyliss.paths."sway/config" = config;
 }
diff --git a/modules/workstation/windowing/sway/status_command.in b/modules/workstation/windowing/sway/status_command.in
new file mode 100644
index 000000000000..fda3ed7602e9
--- /dev/null
+++ b/modules/workstation/windowing/sway/status_command.in
@@ -0,0 +1,22 @@
+#! @execline@/bin/execlineb
+
+loopwhilex {
+  foreground {
+    backtick -i -n status { cat /sys/class/power_supply/BAT0/status }
+    importas -i -u status status
+
+    ifelse { test $status = Charging }
+    { printf "↑" }
+
+    printf "↓"
+  }
+
+  foreground {
+    redirfd -r 0 /sys/class/power_supply/BAT0/capacity
+    tr -d "\n"
+  }
+
+  foreground { printf "%%  " }
+
+  date "+%Y-%m-%d %H:%M:%S"
+}