aboutsummaryrefslogtreecommitdiff
path: root/home-manager/i3
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/i3')
-rw-r--r--home-manager/i3/config332
-rw-r--r--home-manager/i3/default.nix41
-rw-r--r--home-manager/i3/i3-commands.nix16
-rwxr-xr-xhome-manager/i3/scripts/exit.sh20
-rwxr-xr-xhome-manager/i3/scripts/image_upload.sh7
-rwxr-xr-xhome-manager/i3/scripts/monitor-config.sh23
-rwxr-xr-xhome-manager/i3/scripts/workspaces.sh7
-rw-r--r--home-manager/i3/scripts/workspaces.txt11
8 files changed, 457 insertions, 0 deletions
diff --git a/home-manager/i3/config b/home-manager/i3/config
new file mode 100644
index 0000000..dafa928
--- /dev/null
+++ b/home-manager/i3/config
@@ -0,0 +1,332 @@
+# i3 config file (v4)
+#
+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
+#
+# This config file uses keycodes (bindsym) and was written for the QWERTY
+# layout.
+#
+# To get a config file with the same key positions, but for your current
+# layout, use the i3-config-wizard
+#
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font pango:Ubuntu 10
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+#font pango:DejaVu Sans Mono 8
+
+# The combination of xss-lock, nm-applet and pactl is a popular choice, so
+# they are included here as an example. Modify as you see fit.
+
+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
+# screen before suspend. Use loginctl lock-session to lock your screen.
+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -eti ~/Documents/lockscreen.png --nofork
+
+# NetworkManager is the most popular way to manage wireless networks on Linux,
+# and nm-applet is a desktop environment-independent system tray GUI for it.
+exec_always --no-startup-id nm-applet
+
+# Use pactl to adjust volume in PulseAudio.
+#set $refresh_i3status killall -SIGUSR1 i3status
+#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
+#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
+#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
+#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
+
+bindsym XF86AudioRaiseVolume exec --no-startup-id pamixer -i 5
+bindsym XF86AudioLowerVolume exec --no-startup-id pamixer -d 5
+
+# use these keys for focus, movement, and resize directions when reaching for
+# the arrows is not convenient
+
+set $up k
+set $down j
+set $left h
+set $right l
+
+##STARTUP
+#exec_always --no-startup-id "feh --bg-scale ~/Wallpapers/val.png"
+#exec_always --no-startup-id nitrogen --restore
+#exec_always --no-startup-id "picom --backend glx -fD 3 --vsync"
+exec_always --no-startup-id "~/.config/polybar/launch.sh"
+# Bind caps to super
+#exec_always --no-startup-id "setxkbmap -option caps:super"
+# Bind caps to control
+# exec --no-startup-id "setxkbmap -option ctrl:nocaps"
+# exec --no-startup-id "systemctl --user start dunst"
+exec_always --no-startup-id xinput set-prop "ELAN1203:00 04F3:307A Touchpad" "libinput Tapping Enabled" 1
+exec_always --no-startup-id xinput set-prop "ELAN1203:00 04F3:307A Touchpad" "libinput Natural Scrolling Enabled" 1
+exec --no-startup-id flameshot
+exec --no-startup-id rog-control-center
+# Using systemd instead
+#exec --no-startup-id "emacs --daemon"
+exec --no-startup-id "emacsclient -c --eval '(start-scratch)'"
+for_window [title="scratch-emacs"] , move scratchpad
+
+set $mod Mod4
+
+
+#GAPS
+
+for_window[class="-*"] border pixel 0
+
+gaps inner 6
+
+
+#My keybinds
+bindsym $mod+Control+$right workspace next
+bindsym $mod+Control+Right workspace next
+
+#Special workspaces
+bindsym $mod+p exec --no-startup-id "workspaces.sh"
+bindsym $mod+Shift+p exec --no-startup-id "workspaces.sh move"
+
+bindsym $mod+Control+$left workspace prev
+bindsym $mod+Control+Left workspace prev
+
+set $i3lock-cmd i3lock -eti ~/Documents/lockscreen.png
+
+bindsym $mod+Shift+s exec --no-startup-id flameshot gui
+
+bindsym $mod+x exec --no-startup-id "loginctl lock-session"
+bindsym $mod+Shift+x exec --no-startup-id "loginctl lock-session; systemctl suspend"
+# bindsym $mod+Shift+c exec --no-startup-id "~/.i3_commands/open-qb.sh"
+bindsym $mod+c exec --no-startup-id "firefox"
+bindsym $mod+Shift+minus exec --no-startup-id "emacsclient -c"
+
+bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl s +5
+bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl s 5-
+
+bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause
+bindsym XF86AudioNext exec --no-startup-id playerctl next
+bindsym XF86AudioPrev exec --no-startup-id playerctl previous
+bindxym XF86AudioStop exec --no-startup-id playerctl stop
+
+bindsym $mod+bracketleft exec --no-startup-id playerctl -p firefox play-pause
+bindsym $mod+bracketright exec --no-startup-id playerctl -p spotify play-pause
+
+#Emoji picker
+#bindsym $mod+comma exec --no-startup-id "emojis.sh"
+
+#Monitor config
+bindsym $mod+m exec --no-startup-id "monitor-config.sh"
+
+# use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# start a terminal
+bindsym $mod+Return exec --no-startup-id kitty
+
+# Start emacs with vterm
+bindsym $mod+Shift+Return exec --no-startup-id "emacsclient -c --eval '(start-terminal)'"
+
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# start dmenu (a program launcher)
+bindsym $mod+d exec --no-startup-id rofi -i -show drun -disable-history
+bindsym $mod+Shift+d exec --no-startup-id "prime-run rofi -i -show drun -disable-history"
+#bindsym $mod+Shift+c exec --no-startup-id "rofi -i -lines 0 -dmenu -p 'Search:' | xargs -I{} ~/.i3_commands/browser-open.sh '{}'"
+#bindsym $mod+d exec dmenu_run -i -nb '#303239' -nf '#f3f4f5' -sb '#bf00f6' -sf '#f3f4f5'
+
+# Password menu
+bindsym $mod+g exec --no-startup-id "~/bin/rofi-passmenu"
+
+# i3 command runner
+bindsym $mod+Shift+semicolon exec --no-startup-id "i3-msg $(echo | rofi -l 0 -dmenu -p 'i3 command')"
+
+# There also is the (new) i3-dmenu-desktop which only displays applications
+# shipping a .desktop file. It is a wrapper around dmenu, so you need that
+# installed.
+# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+
+# change focus
+bindsym $mod+$left focus left
+bindsym $mod+$down focus down
+bindsym $mod+$up focus up
+bindsym $mod+$right focus right
+
+bindsym Mod1+Tab focus output left
+
+# 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+g split h
+
+# split in vertical orientation
+# bindsym $mod+v split v
+
+# split toggle
+bindsym $mod+t split toggle
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e 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+d 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.
+# If there are multiple scratchpad windows, this command cycles through them.
+for_window [title="scratch-emacs"] , floating_minimum_size 1600 x 900
+bindsym $mod+minus scratchpad show
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+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: "
+
+# make workspaces go on correct monitors
+workspace $ws1 output eDP eDP-1 eDP-1-1
+workspace $ws2 output eDP eDP-1 eDP-1-1
+workspace $ws3 output eDP eDP-1 eDP-1-1
+workspace $ws4 output eDP eDP-1 eDP-1-1
+workspace $ws5 output eDP eDP-1 eDP-1-1
+workspace $ws6 output HDMI-A-0 HDMI-1 HDMI-1-1 eDP eDP-1 eDP-1-1
+workspace $ws7 output HDMI-A-0 HDMI-1 HDMI-1-1 eDP eDP-1 eDP-1-1
+workspace $ws8 output HDMI-A-0 HDMI-1 HDMI-1-1 eDP eDP-1 eDP-1-1
+workspace $ws9 output HDMI-A-0 HDMI-1 HDMI-1-1 eDP eDP-1 eDP-1-1
+workspace $ws10 output HDMI-A-0 HDMI-1 HDMI-1-1 eDP eDP-1 eDP-1-1
+
+# switch to workspace
+bindsym $mod+1 workspace number $ws1
+bindsym $mod+2 workspace number $ws2
+bindsym $mod+3 workspace number $ws3
+bindsym $mod+4 workspace number $ws4
+bindsym $mod+5 workspace number $ws5
+bindsym $mod+6 workspace number $ws6
+bindsym $mod+7 workspace number $ws7
+bindsym $mod+8 workspace number $ws8
+bindsym $mod+9 workspace number $ws9
+bindsym $mod+0 workspace number $ws10
+
+
+bindsym $mod+Control+1 workspace number $ws6; workspace number $ws1
+bindsym $mod+Control+2 workspace number $ws7; workspace number $ws2
+bindsym $mod+Control+3 workspace number $ws8; workspace number $ws3
+bindsym $mod+Control+4 workspace number $ws9; workspace number $ws4
+bindsym $mod+Control+5 workspace number $ws10; workspace number $ws5
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number $ws1
+bindsym $mod+Shift+2 move container to workspace number $ws2
+bindsym $mod+Shift+3 move container to workspace number $ws3
+bindsym $mod+Shift+4 move container to workspace number $ws4
+bindsym $mod+Shift+5 move container to workspace number $ws5
+bindsym $mod+Shift+6 move container to workspace number $ws6
+bindsym $mod+Shift+7 move container to workspace number $ws7
+bindsym $mod+Shift+8 move container to workspace number $ws8
+bindsym $mod+Shift+9 move container to workspace number $ws9
+bindsym $mod+Shift+0 move container to workspace number $ws10
+
+# reload the configuration file
+# bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+e exec "exit.sh"
+#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s 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 Escape or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+set $bg-color #303239
+set $inactive-bg-color #303239
+set $text-color #f3f4f5
+set $inactive-text-color #676E7D
+set $urgent-bg-color #bf00f6
+
+set $focused-border #ffcb6b
+
+# window colors
+# border background text indicator
+client.focused $bg-color $focused-border $text-color $bg-color
+client.unfocused $inactive-bg-color $inactive-bg-color $inactive-text-color $inactive-bg-color
+client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color $inactive-bg-color
+client.urgent $urgent-bg-color $urgent-bg-color $text-color $urgent-bg-color
+
+
+hide_edge_borders none
+
+# bar
+bar {
+ i3bar_command none
+ tray_output primary
+ font pango: Sauce Code Pro Nerd Font, Powerline 10
+ height 19
+ #status_command i3status
+ status_command "i3status-rs"
+ colors {
+ background $bg-color
+ # border background text
+ focused_workspace $bg-color $bg-color $text-color
+ inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
+ urgent_workspace $urgent-bg-color $urgent-bg-color $text-color
+ }
+}
diff --git a/home-manager/i3/default.nix b/home-manager/i3/default.nix
new file mode 100644
index 0000000..087415c
--- /dev/null
+++ b/home-manager/i3/default.nix
@@ -0,0 +1,41 @@
+# let
+# nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.11";
+# pkgs = import nixpkgs { config = {}; overlays = []; };
+# in
+# {
+# i3-commands = pkgs.callPackage ./i3-commands.nix { };
+# }
+
+
+{
+ config,
+ pkgs,
+ ...
+} : {
+ imports = [
+ ../polybar
+ ../rofi
+ ../kitty
+ ../picom
+ ];
+ xsession.enable = true;
+ xsession.windowManager.i3 = {
+ enable = true;
+ package = pkgs.i3-gaps;
+ };
+ xdg.configFile."i3/config".enable = false;
+ home.file.".config/i3/config" = {
+ source = ./config;
+ onChange = "${pkgs.i3-gaps}/bin/i3-msg restart";
+ };
+ home.packages = with pkgs; [
+ i3lock
+ xss-lock
+ networkmanagerapplet
+ flameshot
+ picom
+ nitrogen
+ pamixer
+ (pkgs.callPackage ./i3-commands.nix { })
+ ];
+}
diff --git a/home-manager/i3/i3-commands.nix b/home-manager/i3/i3-commands.nix
new file mode 100644
index 0000000..9b8705d
--- /dev/null
+++ b/home-manager/i3/i3-commands.nix
@@ -0,0 +1,16 @@
+{
+ stdenv
+}:
+stdenv.mkDerivation {
+ pname = "i3-commands";
+ version = "0.0.1";
+
+ srcs = builtins.path { name = "scripts"; path = ./scripts/.; };
+
+ installPhase = ''
+runHook preInstall
+mkdir -p $out/bin
+install -D -m 755 ./* $out/bin
+runHook postInstall
+'';
+}
diff --git a/home-manager/i3/scripts/exit.sh b/home-manager/i3/scripts/exit.sh
new file mode 100755
index 0000000..6e1f492
--- /dev/null
+++ b/home-manager/i3/scripts/exit.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+choice=$(echo -e "Sleep\nLock\nLock and sleep\nExit i3" | rofi -dmenu -i -p "What do you want to do")
+case $choice in
+ "Sleep")
+ systemctl suspend
+ ;;
+ "Lock")
+ i3lock -eti /usr/share/backgrounds/lockscreen.png
+ ;;
+ "Lock and sleep")
+ i3lock -eti /usr/share/backgrounds/lockscreen.png
+ systemctl suspend
+ ;;
+ "Exit i3")
+ i3-msg exit
+ ;;
+ *)
+ notify-send "Canceling"
+ ;;
+esac
diff --git a/home-manager/i3/scripts/image_upload.sh b/home-manager/i3/scripts/image_upload.sh
new file mode 100755
index 0000000..896f23f
--- /dev/null
+++ b/home-manager/i3/scripts/image_upload.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+image_name=$(rofi -dmenu -l 0 -p "Image name")
+xclip -selection clipboard -t image/png -o > ~/Documents/tehbox-files/$image_name
+eval $(ssh-agent)
+rsync ~/Documents/tehbox-files/$image_name files@tehbox.org:/srv/files
+notify-send "uploaded https://files.tehbox.org/$image_name"
+echo -n "https://files.tehbox.org/$image_name" | xclip -i -selection clipboard
diff --git a/home-manager/i3/scripts/monitor-config.sh b/home-manager/i3/scripts/monitor-config.sh
new file mode 100755
index 0000000..8f17660
--- /dev/null
+++ b/home-manager/i3/scripts/monitor-config.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+choice=$(echo -e "One monitor\nTwo monitors" | rofi -dmenu -i -p "What monitor setup to use")
+
+monitor1=$(xrandr | grep -E "eDP(-1(-1)?)?" | awk '{print $1 }')
+monitor2=$(xrandr | grep -E "HDMI(-A-0)?(-1(-1)?)?" | awk '{print $1 }')
+
+case $choice in
+ "One monitor")
+ xrandr --output $monitor1 --primary --mode 1920x1080 --rate 144 --pos 0x0 --rotate normal --output $monitor2 --off
+ sleep 1
+ i3-msg restart
+ ;;
+ "Two monitors")
+ xrandr --output $monitor1 --primary --mode 1920x1080 --rate 144 --pos 0x0 --rotate normal --output $monitor2 --mode 1920x1080 --rate 144 --pos 1920x0 --rotate normal
+ sleep 1
+ i3-msg restart
+ ;;
+ *)
+ notify-send "Invalid response, canceling"
+ ;;
+esac
+
diff --git a/home-manager/i3/scripts/workspaces.sh b/home-manager/i3/scripts/workspaces.sh
new file mode 100755
index 0000000..3ad68ef
--- /dev/null
+++ b/home-manager/i3/scripts/workspaces.sh
@@ -0,0 +1,7 @@
+choice=$(cat ~/.i3_commands/workspaces.txt | rofi -dmenu -i -p "Which workspace to switch to")
+if [[ $1 == "move" ]]
+then
+ i3-msg move container to workspace \"$choice\"
+else
+ i3-msg workspace \"$choice\"
+fi
diff --git a/home-manager/i3/scripts/workspaces.txt b/home-manager/i3/scripts/workspaces.txt
new file mode 100644
index 0000000..84b3bf0
--- /dev/null
+++ b/home-manager/i3/scripts/workspaces.txt
@@ -0,0 +1,11 @@
+1: 
+2: 󰑴
+3: 
+4: 
+5: 
+6: 
+7: 󰑴
+8: 
+9: 
+10: 
+S: 