diff options
| author | Quentin Aristote <quentin@aristote.fr> | 2023-02-28 17:50:16 +0100 |
|---|---|---|
| committer | Quentin Aristote <quentin@aristote.fr> | 2023-02-28 17:50:16 +0100 |
| commit | 52c53ee7055cd5876112543c28ff6b5626a99313 (patch) | |
| tree | 6fe6815fda0e81bf00013ffcad4db6e115b933a6 /home/config/i3 | |
| parent | 1f349513ad5079e9f07ea524fd7039261e942ba4 (diff) | |
| parent | b0214d50e9a728d77d98d791e92dfe3747f27e23 (diff) | |
Merge branch 'flake-home-manager' into flake
Diffstat (limited to 'home/config/i3')
| -rw-r--r-- | home/config/i3/bar/.envrc | 1 | ||||
| -rw-r--r-- | home/config/i3/bar/default.nix | 18 | ||||
| -rw-r--r-- | home/config/i3/bar/i3status.go | 289 | ||||
| -rw-r--r-- | home/config/i3/bar/shell.nix | 4 | ||||
| -rw-r--r-- | home/config/i3/default.nix | 40 | ||||
| -rw-r--r-- | home/config/i3/keybindings.nix | 49 | ||||
| -rw-r--r-- | home/config/i3/startup.nix | 24 |
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"''; }) - ]; -} |
