From 7e183e38d8ac3d0fc0d5ab257b63771e5badaa31 Mon Sep 17 00:00:00 2001 From: Debian Live user Date: Fri, 28 Apr 2023 17:02:20 -0400 Subject: package installer that auto-backports i3-wm --- Makefile | 8 +++ dot/config/i3/config | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++ eschew-unstable.pref | 8 +++ install-packages.bash | 105 +++++++++++++++++++++++++++++ 4 files changed, 299 insertions(+) create mode 100644 dot/config/i3/config create mode 100644 eschew-unstable.pref create mode 100644 install-packages.bash diff --git a/Makefile b/Makefile index 0d6259b..b8bea18 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,14 @@ endif install: $(DESTINATIONS) +install-packages: +ifeq ($(shell id -u),0) + install -m0644 eschew-unstable.pref /etc/apt/preferences.d/ + bash install-packages.bash +else + sudo -- $(MAKE) -$(MAKEFLAGS) $@ +endif + simulate-install: @echo @echo \#\# SIMULATED INSTALL \#\# diff --git a/dot/config/i3/config b/dot/config/i3/config new file mode 100644 index 0000000..9d27da4 --- /dev/null +++ b/dot/config/i3/config @@ -0,0 +1,178 @@ +# i3 config file (v4) +# Please see https://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + +# These require a newer i3 than available in Debian bullseye. +# The version in Debian sid backports without issue (but isn't in +# bullseye-backports). +hide_edge_borders smart_no_gaps +smart_borders no_gaps + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:monospace 8 + +# 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 --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 --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@ +10% && $refresh_i3status +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec i3-sensible-terminal + +# kill focused window +bindsym $mod+Shift+q kill +bindsym $mod+Shift+c kill + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id dmenu_run +bindsym $mod+p exec --no-startup-id dmenu_run +# A more modern dmenu replacement is rofi: +# bindcode $mod+40 exec "rofi -modi drun,run -show drun" +# There also is i3-dmenu-desktop which only displays applications shipping a +# .desktop file. It is a wrapper around dmenu, so you need that installed. +# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop + +# change focus +# it would be nicer if jk and hl were interchangeable in vsplit and hsplit modes. +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l 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+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l 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 + +# 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+t floating toggle + +# change focus between tiling / floating windows +bindsym $mod+Shift+space fullscreen toggle +bindsym $mod+space layout toggle stacking tabbed splitv splith + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# 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" + +# 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 + +# 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 "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 h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l 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" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + status_command i3status +} diff --git a/eschew-unstable.pref b/eschew-unstable.pref new file mode 100644 index 0000000..1aa87e8 --- /dev/null +++ b/eschew-unstable.pref @@ -0,0 +1,8 @@ + + +Package: * +Pin: release a=unstable +Pin-Priority: 50 + + + diff --git a/install-packages.bash b/install-packages.bash new file mode 100644 index 0000000..3363353 --- /dev/null +++ b/install-packages.bash @@ -0,0 +1,105 @@ +#!/bin/bash +set -e + +apt() +{ + (set -x; command apt "$@") +} + +[ "$(id -u)" = 0 ] || exec sudo bash "$0" "$@" + +basics='etckeeper git par ssh tmux vim w3m' +#xorg='xorg xterm i3' +xorg='xorg xterm' +media='libdbus-glib-1-2 mpv pulseaudio' +apt install --no-upgrade $basics $xorg $media + +apt_backport() +{ + ( + set -e + apt install --no-upgrade debhelper + SOURCES_DIR=$1 + TARGET_URL=$2 + TARGET_PKG=$3 + case "$TARGET_PKG" in + '' | */*) exit 1 ;; + esac + mkdir -p "$SOURCES_DIR" + cd "$SOURCES_DIR" + + if [ -e "$TARGET_PKG" ] + then + cd "$TARGET_PKG" + git pull --ff-only + else + rm -rf "$TARGET_PKG"~tmp + git clone --depth=1 "$TARGET_URL" "$TARGET_PKG"~tmp + mv -T "$TARGET_PKG"~tmp "$TARGET_PKG" + cd "$TARGET_PKG" + fi + + arch=$(dpkg-architecture -q DEB_BUILD_ARCH) + version=$(dpkg-parsechangelog --show-field Version) + pkgs=$(dh_listpackages) + debs= + for pkg in $pkgs + do + debs="$debs ${pkg}_${version}_${arch}.deb" + done + + set -x + pwd + for deb in $debs + do + [ -e ../"$deb" ] && continue || true + # We are missing a deb, therefore build. + + if command -v mk-build-deps >/dev/null + then + mk-build-deps "$TARGET_PKG" --install + else + # We could 'apt install devscripts' but it pulls + # in like 50MB of perl deps, possibly nullifying + # the savings from removing unneeded build deps. + + # However, we cannot simply use 'apt build-dep' + # because that would use the build-deps from the + # version of the package in the repo, which may + # differ from the source version. + + # Arguably we do want to try that though, since + # it's a backport... + + if [ "$try_newer_build_deps" ] + then + build_deps=$(get_build_deps) + apt install $build_deps + else + apt build-dep "$TARGET_PKG" + fi + fi + fakeroot ./debian/rules binary + break + done + + set -- + for deb in $debs + do + set -- "$@" ../"$deb" + done + apt install "$@" + ) +} + +get_build_deps() +{ + # credit: Archemar @ https://unix.stackexchange.com/a/648927 + build_deps=$(dpkg-checkbuilddeps 2>&1 | + sed -n -e 's/dpkg-checkbuilddeps:\serror:\sUnmet build dependencies: //gp' \ + -e 's/[\(][^)]*[\)] //g') +} + +try_newer_build_deps=y +apt_backport /usr/local/src https://salsa.debian.org/i3-team/i3-wm.git i3-wm + -- cgit v1.2.3