summaryrefslogtreecommitdiff
path: root/home/config/i3
diff options
context:
space:
mode:
authorQuentin Aristote <quentin@aristote.fr>2023-02-21 22:34:46 +0100
committerQuentin Aristote <quentin@aristote.fr>2023-02-28 17:48:23 +0100
commitb0214d50e9a728d77d98d791e92dfe3747f27e23 (patch)
tree95810c2d5c7af41d0e3e85570e60c2fb6658291c /home/config/i3
parente761ac4b2c69f8ac267e53fa437c6978b207d743 (diff)
factor out common home-manager configuration
Diffstat (limited to 'home/config/i3')
-rw-r--r--home/config/i3/bar/.envrc1
-rw-r--r--home/config/i3/bar/default.nix18
-rw-r--r--home/config/i3/bar/i3status.go289
-rw-r--r--home/config/i3/bar/shell.nix4
-rw-r--r--home/config/i3/default.nix40
-rw-r--r--home/config/i3/keybindings.nix49
-rw-r--r--home/config/i3/startup.nix24
7 files changed, 0 insertions, 425 deletions
diff --git a/home/config/i3/bar/.envrc b/home/config/i3/bar/.envrc
deleted file mode 100644
index 4a4726a..0000000
--- a/home/config/i3/bar/.envrc
+++ /dev/null
@@ -1 +0,0 @@
-use_nix
diff --git a/home/config/i3/bar/default.nix b/home/config/i3/bar/default.nix
deleted file mode 100644
index e43095f..0000000
--- a/home/config/i3/bar/default.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ pkgs, ... }:
-
-let
- statusPackage =
- pkgs.personal.barista.override { i3statusGo = ./i3status.go; };
-in {
- xsession.windowManager.i3.config.bars = [{
- statusCommand = "${statusPackage}/bin/i3status";
- fonts = {
- names = [ "roboto" ];
- size = 11.0;
- };
- colors.background = "#111111";
- }];
-
- # (Miscellaneous) Tray icons
- services.blueman-applet.enable = true;
-}
diff --git a/home/config/i3/bar/i3status.go b/home/config/i3/bar/i3status.go
deleted file mode 100644
index 196e6cc..0000000
--- a/home/config/i3/bar/i3status.go
+++ /dev/null
@@ -1,289 +0,0 @@
-package main
-
-import (
- "io"
- "net/http"
- "os"
- "regexp"
- "strconv"
- "time"
-
- "barista.run"
- "barista.run/bar"
- "barista.run/colors"
- "barista.run/group"
- "barista.run/modules/battery"
- "barista.run/modules/clock"
- "barista.run/modules/diskspace"
- "barista.run/modules/funcs"
- "barista.run/modules/netinfo"
- "barista.run/modules/systemd"
- "barista.run/modules/volume"
- "barista.run/modules/volume/pulseaudio"
- "barista.run/modules/wlan"
- "barista.run/outputs"
- "barista.run/pango"
- "barista.run/pango/icons/mdi"
-)
-
-func main() {
- // Constants
- colors.LoadFromMap(map[string]string{
- // Color palette of Cezanne's Vue de la Baie de Marseille
- "good": "#C5D294",
- "degraded": "#E9CC67",
- "bad": "#FFBC88",
- })
- mdi.Load() // repo path will be inserted at build time
-
- // Display status of several services
- updateSuccessIcon := pango.Icon("mdi-reload")
- updatingIcon := pango.Icon("mdi-update")
- updateFailIcon := pango.Icon("mdi-reload-alert")
- garbageFullIcon := pango.Icon("mdi-delete")
- garbageEmptyingIcon := pango.Icon("mdi-delete-restore")
- garbageEmptyIcon := pango.Icon("mdi-delete-outline")
- barista.Add(group.Simple(systemd.Service("nixos-upgrade").Output(func(i systemd.ServiceInfo) bar.Output {
- state := i.UnitInfo.State
- var colorScheme string
- var output *pango.Node
- switch {
- case state == systemd.StateInactive:
- colorScheme = "good"
- output = updateSuccessIcon
- case state == systemd.StateActivating:
- colorScheme = "degraded"
- output = updatingIcon
- default:
- colorScheme = "bad"
- output = updateFailIcon
- }
- return outputs.Pango(output).Color(colors.Scheme(colorScheme))
- }),
- systemd.Service("nix-gc").Output(func(i systemd.ServiceInfo) bar.Output {
- state := i.UnitInfo.State
- var colorScheme string
- var output *pango.Node
- switch {
- case state == systemd.StateInactive:
- colorScheme = "good"
- output = garbageEmptyIcon
- case state == systemd.StateActivating:
- colorScheme = "degraded"
- output = garbageEmptyingIcon
- default:
- colorScheme = "bad"
- output = garbageFullIcon
- }
- return outputs.Pango(output).Color(colors.Scheme(colorScheme))
- })))
-
- // Display space left on /
- storageIcon := pango.Icon("mdi-database")
- barista.Add(diskspace.New("/").Output(func(i diskspace.Info) bar.Output {
- used := i.UsedPct()
- var colorScheme string
- if used >= 90 {
- colorScheme = "bad"
- } else if used >= 50 {
- colorScheme = "degraded"
- } else {
- colorScheme = "good"
- }
- return outputs.Pango(storageIcon, pango.Textf(" %d%%", used)).Color(colors.Scheme(colorScheme))
- }))
-
- // Check connection to the Mullvad VPN
- mullvadIsUpRe := regexp.MustCompile(`^You are connected to Mullvad`)
- mullvadServerRe := regexp.MustCompile(`\(server (.*)\)`)
- mullvadIpRe := regexp.MustCompile(`Your IP address is (.*)`)
- client := &http.Client{Timeout: 3 * time.Second}
- incognitoIcon := pango.Icon("mdi-incognito")
- incognitoOffIcon := pango.Icon("mdi-incognito-off")
- barista.Add(funcs.Every(5*time.Second, func(s bar.Sink) {
- icon := incognitoOffIcon
- message := pango.Text("")
- colorScheme := "bad"
- res, err := client.Get("https://am.i.mullvad.net/connected")
- if !s.Error(err) {
- status, err := io.ReadAll(res.Body)
- res.Body.Close()
- if !s.Error(err) {
- var re *regexp.Regexp
- if mullvadIsUpRe.Match(status) {
- re = mullvadServerRe
- colorScheme = "good"
- icon = incognitoIcon
- } else {
- re = mullvadIpRe
- colorScheme = "degraded"
- }
- result := re.FindSubmatch(status)
- if len(result) >= 2 {
- message = pango.Textf(" %s", result[1])
- }
- }
- }
- client.CloseIdleConnections()
- s.Output(outputs.Pango(icon, message).Color(colors.Scheme(colorScheme)))
- }))
-
- // Display the wifi status
- wifiOffIcon := pango.Icon("mdi-wifi-off")
- wifiRefreshIcon := pango.Icon("mdi-wifi-refresh")
- wifiOnIcon := pango.Icon("mdi-wifi")
- barista.Add(wlan.Named("wlp2s0").Output(func(w wlan.Info) bar.Output {
- var output *pango.Node
- var colorScheme string
- switch {
- case w.Connected():
- output = pango.New(wifiOnIcon, pango.Textf(" %s", w.SSID))
- colorScheme = "good"
- case w.Connecting():
- output = wifiRefreshIcon
- colorScheme = "degraded"
- default:
- output = wifiOffIcon
- colorScheme = "bad"
- }
- return outputs.Pango(output).Color(colors.Scheme(colorScheme))
- }))
-
- // Display the ethernet status
- ethernetCableOnIcon := pango.Icon("mdi-ethernet-cable")
- ethernetCableOffIcon := pango.Icon("mdi-ethernet-cable-off")
- barista.Add(netinfo.Prefix("e").Output(func(s netinfo.State) bar.Output {
- var output *pango.Node
- var colorScheme string
- switch {
- case s.Connected():
- ip := "<no ip>"
- if len(s.IPs) > 0 {
- ip = s.IPs[0].String()
- }
- output = pango.New(ethernetCableOnIcon, pango.Textf(" %s", ip))
- colorScheme = "good"
- case s.Connecting():
- output = ethernetCableOnIcon
- colorScheme = "degraded"
- default:
- output = ethernetCableOffIcon
- colorScheme = "bad"
- }
- return outputs.Pango(output).Color(colors.Scheme(colorScheme))
- }))
-
- // Display the battery status
- batteryIcons := [11]*pango.Node{pango.Icon("mdi-battery-outline"),
- pango.Icon("mdi-battery-10"),
- pango.Icon("mdi-battery-20"),
- pango.Icon("mdi-battery-30"),
- pango.Icon("mdi-battery-40"),
- pango.Icon("mdi-battery-50"),
- pango.Icon("mdi-battery-60"),
- pango.Icon("mdi-battery-70"),
- pango.Icon("mdi-battery-80"),
- pango.Icon("mdi-battery-90"),
- pango.Icon("mdi-battery")}
- batteryChargingIcons := [11]*pango.Node{pango.Icon("mdi-battery-charging-outline"),
- pango.Icon("mdi-battery-charging-10"),
- pango.Icon("mdi-battery-charging-20"),
- pango.Icon("mdi-battery-charging-30"),
- pango.Icon("mdi-battery-charging-40"),
- pango.Icon("mdi-battery-charging-50"),
- pango.Icon("mdi-battery-charging-60"),
- pango.Icon("mdi-battery-charging-70"),
- pango.Icon("mdi-battery-charging-80"),
- pango.Icon("mdi-battery-charging-90"),
- pango.Icon("mdi-battery-charging-100")}
- barista.Add(battery.All().Output(func(b battery.Info) bar.Output {
- switch b.Status {
- case battery.Disconnected, battery.Unknown:
- return nil
- default:
- var icons [11]*pango.Node
- var colorScheme string
- if b.Status == battery.Charging {
- icons = batteryChargingIcons
- colorScheme = "good"
- } else {
- icons = batteryIcons
- if b.RemainingPct() <= 10 {
- colorScheme = "bad"
- } else if b.RemainingPct() <= 20 {
- colorScheme = "degraded"
- } else {
- colorScheme = "good"
- }
- }
- icon := icons[b.RemainingPct()/10]
- return outputs.Pango(icon, pango.Textf(" %d%%", b.RemainingPct())).Color(colors.Scheme(colorScheme))
- }
- }))
-
- // Display brightness
- brightnessHighIcon := pango.Icon("mdi-lightbulb-on")
- brightnessMidIcon := pango.Icon("mdi-lightbulb-on-outline")
- brightnessLowIcon := pango.Icon("mdi-lightbulb-outline")
- ReadBrightness := func(name string) (int, error) {
- valueStr, err := os.ReadFile("/sys/class/backlight/intel_backlight/" + name)
- if err != nil {
- return 0, err
- }
- return strconv.Atoi(string(valueStr[:len(valueStr)-1]))
- }
- brightnessMax, _ := ReadBrightness("max_brightness") // always non-zero, unless there's an error
- barista.Add(funcs.Every(time.Second, func(s bar.Sink) {
- brightness, err := ReadBrightness("brightness")
- if !s.Error(err) {
- value := (brightness * 100) / brightnessMax
- var icon *pango.Node
- if value <= 30 {
- icon = brightnessLowIcon
- } else if value < 70 {
- icon = brightnessMidIcon
- } else {
- icon = brightnessHighIcon
- }
- s.Output(outputs.Pango(icon, pango.Textf(" %d%%", value)))
- }
- }))
-
- // Display output volume
- volumeOffIcon := pango.Icon("mdi-volume-variant-off")
- volumeLowIcon := pango.Icon("mdi-volume-low")
- volumeMidIcon := pango.Icon("mdi-volume-medium")
- volumeHighIcon := pango.Icon("mdi-volume-high")
- barista.Add(volume.New(pulseaudio.DefaultSink()).Output(func(v volume.Volume) bar.Output {
- volume := v.Pct()
- var icon *pango.Node
- if volume == 0 || v.Mute {
- icon = volumeOffIcon
- } else if volume <= 30 {
- icon = volumeLowIcon
- } else if volume <= 70 {
- icon = volumeMidIcon
- } else {
- icon = volumeHighIcon
- }
- return outputs.Pango(icon, pango.Textf(" %d%%", volume))
- }))
-
- // Display microphone volume
- microphoneOffIcon := pango.Icon("mdi-microphone-off")
- microphoneIcon := pango.Icon("mdi-microphone")
- barista.Add(volume.New(pulseaudio.DefaultSource()).Output(func(v volume.Volume) bar.Output {
- volume := v.Pct() // the value returned by pulseaudio may be weird
- var icon *pango.Node
- if volume == 0 || v.Mute {
- icon = microphoneOffIcon
- } else {
- icon = microphoneIcon
- }
- return outputs.Pango(icon, pango.Textf(" %d%%", volume))
- }))
-
- barista.Add(clock.Local().OutputFormat("2006-01-02 15:04:05"))
-
- panic(barista.Run())
-}
diff --git a/home/config/i3/bar/shell.nix b/home/config/i3/bar/shell.nix
deleted file mode 100644
index 794d774..0000000
--- a/home/config/i3/bar/shell.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{ pkgs ? import <nixpkgs> { } }:
-
-let settings = { golang.enable = true; };
-in import ~/.config/venv-manager { inherit pkgs settings; }
diff --git a/home/config/i3/default.nix b/home/config/i3/default.nix
deleted file mode 100644
index 8b613a1..0000000
--- a/home/config/i3/default.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ config, pkgs, lib, ... }:
-
-{
- imports = [ ./bar ./keybindings.nix ./startup.nix ];
-
- xsession.windowManager.i3 = {
- enable = true;
- package = pkgs.i3-gaps;
-
- config = rec {
- assigns = {
- "8: media" = [{ class = "^Steam$"; }];
- "9: social" = [
- { class = "^Mail$"; }
- { class = "^thunderbird$"; }
- { class = "^Signal$"; }
- ];
- };
-
- window.border = 0;
- gaps = {
- inner = 15;
- outer = 5;
- };
- };
- };
-
- home.file.".config/i3/i3status.sh" = {
- text = ''
- #!${pkgs.bash}/bin/sh
- ${pkgs.i3status}/bin/i3status | while :
- do
- read line
- echo "☼ $(${pkgs.brightnessctl}/bin/brightnessctl -m | cut -d',' -f4) |\
- $line" || exit 1
- done
- '';
- executable = true;
- };
-}
diff --git a/home/config/i3/keybindings.nix b/home/config/i3/keybindings.nix
deleted file mode 100644
index cfbcb2a..0000000
--- a/home/config/i3/keybindings.nix
+++ /dev/null
@@ -1,49 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-let
- backgroundImage = config.home.wallpaper;
- lockscreen = pkgs.personal.lockscreen.override { inherit backgroundImage; };
-in {
- xsession.windowManager.i3.config = rec {
- modifier = "Mod4";
-
- keybindings = lib.mkOptionDefault (let
- brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
- brightnessctlKbd = "${brightnessctl} --device dell:kbd_backlight";
- pactl = "${pkgs.pulseaudio}/bin/pactl";
- rofi = "${pkgs.rofi}/bin/rofi";
- in {
- "${modifier}+Shift+Return" = "exec firefox";
- "${modifier}+Control+Return" = "exec $EDITOR";
- "${modifier}+Shift+e" = "exec i3-msg exit";
- "${modifier}+p" = "move workspace to output right";
- "XF86MonBrightnessUp" = "exec ${brightnessctl} set 5%+";
- "XF86MonBrightnessDown" = "exec ${brightnessctl} set 5%-";
- "XF86AudioRaiseVolume" =
- "exec ${pactl} set-sink-volume @DEFAULT_SINK@ +5%";
- "XF86AudioLowerVolume" =
- "exec ${pactl} set-sink-volume @DEFAULT_SINK@ -5%";
- "XF86AudioMute" = "exec ${pactl} set-sink-mute @DEFAULT_SINK@ toggle";
- "Shift+XF86AudioRaiseVolume" =
- "exec ${pactl} set-source-volume @DEFAULT_SOURCE@ +5%";
- "Shift+XF86AudioLowerVolume" =
- "exec ${pactl} set-source-volume @DEFAULT_SOURCE@ -5%";
- "XF86AudioMicMute" =
- "exec ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle";
- "XF86KbdBrightnessUp" = ''
- exec ${brightnessctlKbd} set \
- $(( $(${brightnessctlKbd} max) - $(${brightnessctlKbd} get) ))
- '';
- "Print" = "exec xfce4-screenshooter";
- } // (lib.optionalAttrs (backgroundImage != null) {
- "${modifier}+l" = "exec ${lockscreen}/bin/lockscreen.sh";
- }) // (lib.optionalAttrs config.programs.alacritty.enable {
- "${modifier}+Return" = "exec ${pkgs.alacritty}/bin/alacritty";
- }) // (lib.optionalAttrs config.programs.rofi.enable {
- "${modifier}+d" = ''exec "${rofi} -modi drun,filebrowser,run,window -show drun"'';
- "${modifier}+Shift+d" = "exec ${rofi} -show window";
- }) // (lib.optionalAttrs config.services.emacs.client.enable {
- "${modifier}+Control+r" = "exec systemctl --user restart emacs.service";
- }));
- };
-}
diff --git a/home/config/i3/startup.nix b/home/config/i3/startup.nix
deleted file mode 100644
index fe3056e..0000000
--- a/home/config/i3/startup.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-let background-image = config.home.wallpaper;
-in {
- xsession.windowManager.i3.config.startup = let
- autostart = { command, always ? false, notification ? false }: {
- inherit command always notification;
- };
- in (lib.optional config.services.redshift.enable
- (autostart { command = "systemctl --user start redshift"; }))
- ++ (lib.optional (background-image != null) (autostart {
- command = "${pkgs.feh}/bin/feh --bg-scale ${background-image}";
- })) ++ (lib.optional config.services.xidlehook.enable
- (autostart { command = "systemctl --user xidlehook.service"; }))
- ++ (lib.optional config.services.emacs.enable
- (autostart { command = "systemctl --user start emacs.service"; })) ++ [
- (autostart { command = "xfce4-power-manager --daemon"; })
- (autostart { command = "rfkill block bluetooth"; })
- # Launch frequently used apps
- (autostart { command = "thunderbird"; })
- (autostart { command = "signal-desktop"; })
- (autostart { command = ''i3-msg "workspace 10; exec keepassxc"''; })
- ];
-}