From b954f7181940d2daa6f8d9e5c767e23d0bc5f897 Mon Sep 17 00:00:00 2001
From: Tim Schubert <dadada@dadada.li>
Date: Sat, 25 Jan 2025 17:43:38 +0100
Subject: [PATCH] feat(home): template sway config with colors

---
 home/config      | 231 -----------------------------------
 home/default.nix | 311 +++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 286 insertions(+), 256 deletions(-)
 delete mode 100644 home/config

diff --git a/home/config b/home/config
deleted file mode 100644
index d2a4443..0000000
--- a/home/config
+++ /dev/null
@@ -1,231 +0,0 @@
-# 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 foot
-# 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 dmenu_path | wmenu | xargs swaymsg exec --
-
-### Output configuration
-#
-# Default wallpaper (more resolutions are available in /run/current-system/sw/share/backgrounds/sway/)
-output * bg ~/tmp/51761494940_7f9d6ab0e3_o.jpg fill
-
-### Idle configuration
-#
-# Example configuration:
-#
-exec swayidle -w \
-         timeout 300 'swaylock -f -c 000000' \
-         timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
-         before-sleep 'swaylock -f -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 * {
-	xkb_layout eu
-	xkb_model pc105+inet
-	xkb_options caps:escape
-    drag_lock enabled
-    drag enabled
-    dwt enabled
-    tap enabled
-    tap_button_map lrm
-    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
-
-# Lock the screen
-bindsym XF86Sleep exec 'swaylock -f -c 000000'
-
-# 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'
-
-# Brightness
-bindsym --locked XF86MonBrightnessDown exec light -U 10
-bindsym --locked XF86MonBrightnessUp exec light -A 10
-
-# Volume
-bindsym --locked XF86AudioRaiseVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%'
-bindsym --locked XF86AudioLowerVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%'
-bindsym --locked XF86AudioMute exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle'
-
-#
-# 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 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
-
-#
-# Font
-#
-font "pango:Jetbrains Mono 8"
-
-#
-# 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 ~/.config/sway/status
-
-    colors {
-        statusline #ffffff
-        background #323232
-        inactive_workspace #32323200 #32323200 #5c5c5c
-    }
-}
-
-bindsym $mod+grave exec busctl --user call org.keepassxc.KeePassXC.MainWindow /keepassxc org.keepassxc.KeePassXC.MainWindow lockAllDatabases && swaylock -c 000000
-
-include /etc/sway/config.d/*
-
-exec sleep 5; systemctl --user start kanshi.service
diff --git a/home/default.nix b/home/default.nix
index 15514f9..457d7ad 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -1,6 +1,7 @@
-{ pkgs
-, lib
-, ...
+{
+  pkgs,
+  lib,
+  ...
 }:
 let
   useFeatures = [
@@ -17,6 +18,26 @@ let
     "zsh"
     "helix"
   ];
+  colors = {
+    background = "fdf6e3";
+    foreground = "657b83";
+    regular0 = "eee8d5"; # background darker
+    regular1 = "dc322f"; # red
+    regular2 = "859900"; # green
+    regular3 = "b58900"; # dark orange
+    regular4 = "268bd2"; # azure blue
+    regular5 = "d33682"; # hot pink
+    regular6 = "2aa198"; # petrol
+    regular7 = "073642"; # navy
+    bright0 = "cb4b16"; # orange
+    bright1 = "fdf6e3"; # foreground
+    bright2 = "93a1a1"; # grey
+    bright3 = "839496"; # slightly darker grey
+    bright4 = "657b83"; # even slightly darker grey
+    bright5 = "6c71c4"; # purple
+    bright6 = "586e75"; # pretty dark grey
+    bright7 = "002b36"; # dark navy blue
+  };
 in
 {
   imports = [
@@ -28,7 +49,9 @@ in
   programs.gpg.settings.default-key = "99658A3EB5CD7C13";
 
   dadada.home =
-    lib.attrsets.genAttrs useFeatures (useFeatures: { enable = true; })
+    lib.attrsets.genAttrs useFeatures (useFeatures: {
+      enable = true;
+    })
     // {
       session = {
         enable = true;
@@ -56,7 +79,9 @@ in
       Restart = "always";
     };
 
-    Install = { WantedBy = [ "graphical-session.target" ]; };
+    Install = {
+      WantedBy = [ "graphical-session.target" ];
+    };
   };
 
   programs.offlineimap.enable = false;
@@ -131,6 +156,7 @@ in
     enable = true;
     server.enable = false;
     settings = {
+      inherit colors;
       main = {
         shell = "tmux";
         font = "Jetbrains Mono:size=8";
@@ -139,31 +165,266 @@ in
       mouse.hide-when-typing = true;
       csd.preferred = "none";
       cursor.color = "fdf6e3 586e75";
-      colors = {
-        background = "fdf6e3";
-        foreground = "657b83";
-        regular0 = "eee8d5";
-        regular1 = "dc322f";
-        regular2 = "859900";
-        regular3 = "b58900";
-        regular4 = "268bd2";
-        regular5 = "d33682";
-        regular6 = "2aa198";
-        regular7 = "073642";
-        bright0 = "cb4b16";
-        bright1 = "fdf6e3";
-        bright2 = "93a1a1";
-        bright3 = "839496";
-        bright4 = "657b83";
-        bright5 = "6c71c4";
-        bright6 = "586e75";
-        bright7 = "002b36";
+      bell = {
+        urgent = true;
+        visual = false;
       };
     };
   };
 
-  home.file.".config/sway/config".source = ./config;
+  home.file.".config/sway/config".text = with colors; ''
+    # 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 foot
+    # 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 dmenu_path | wmenu | xargs swaymsg exec --
+
+    ### Idle configuration
+    #
+    # Example configuration:
+    #
+    exec swayidle -w \
+             timeout 300 'swaylock -f -c ${background}' \
+             timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
+             before-sleep 'swaylock -f -c ${background}'
+    #
+    # 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 * {
+      xkb_layout eu
+      xkb_model pc105+inet
+      xkb_options caps:escape
+        drag_lock enabled
+        drag enabled
+        dwt enabled
+        tap enabled
+        tap_button_map lrm
+        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
+
+    # Lock the screen
+    bindsym XF86Sleep exec 'swaylock -f -c ${background}'
+
+    # 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'
+
+    # Brightness
+    bindsym --locked XF86MonBrightnessDown exec light -U 10
+    bindsym --locked XF86MonBrightnessUp exec light -A 10
+
+    # Volume
+    bindsym --locked XF86AudioRaiseVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%'
+    bindsym --locked XF86AudioLowerVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%'
+    bindsym --locked XF86AudioMute exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle'
+
+    #
+    # 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 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
+
+    #
+    # Font
+    #
+    font "pango:Jetbrains Mono 8"
+
+    #
+    # 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 ~/.config/sway/status
+
+        colors {
+            statusline ${foreground}
+            background ${background}
+            inactive_workspace ${background}ee ${background}ee ${foreground}ee
+        }
+    }
+
+    bindsym $mod+grave exec busctl --user call org.keepassxc.KeePassXC.MainWindow /keepassxc org.keepassxc.KeePassXC.MainWindow lockAllDatabases && swaylock -c #fdf6e3
+
+    # class                 border         backgr.        text           indicator      child_border
+    client.focused          #${bright6}    #${foreground} #${background} #${bright5}    #${regular4}
+    client.focused_inactive #${regular0}   #${regular0}   #${foreground} #${bright5}    #${regular0}
+    client.unfocused        #${regular0}   #${background} #${bright2}    #${bright5}    #${regular0}
+    client.urgent           #${bright1}    #${bright0}    #${regular4}   #${background} #${bright0}
+    client.placeholder      #${background} #${bright2}    #${foreground} #${background} #${bright2}
+
+    client.background       #${foreground}
+
+    include /etc/sway/config.d/*
+
+    exec sleep 5; systemctl --user restart kanshi.service
+    exec sleep 5; output * bg ~/tmp/51761494940_7f9d6ab0e3_o.jpg fill
+  '';
   home.file.".config/sway/status".source = ./status;
+  home.file.".config/kanshi/config".text = ''
+    profile Laptop {
+      output eDP-1 enable
+    }
+
+    profile Docked {
+      output eDP-1 disable
+      output "LG Electronics LG HDR 4K 0x000354D1" {
+      enable
+      scale 1.2
+      position 0,0
+      }
+    }
+  '';
 
   # Let Home Manager install and manage itself.
   programs.home-manager.enable = true;