diff options
| author | Alexander Kassouni <alex@kassouni.net> | 2026-09-02 21:20:10 -0700 |
|---|---|---|
| committer | Alexander Kassouni <alex@kassouni.net> | 2026-09-02 21:20:10 -0700 |
| commit | 47dde98fd2cf11ea544bb1c8d8d548ee0bda0f54 (patch) | |
| tree | fb79c45ef1c0f0016e480e06dff625cf3fc1c91a /users/kassouni/desktop | |
| parent | 1c5fa1c205f2bb78f8e1179b0576f3c3578dad69 (diff) | |
some sway stuff
Diffstat (limited to 'users/kassouni/desktop')
| -rw-r--r-- | users/kassouni/desktop/sway/default.nix | 8 | ||||
| -rw-r--r-- | users/kassouni/desktop/sway/fuzzel.nix | 37 | ||||
| -rw-r--r-- | users/kassouni/desktop/sway/sway.nix | 42 | ||||
| -rw-r--r-- | users/kassouni/desktop/sway/waybar.nix | 141 | ||||
| -rw-r--r-- | users/kassouni/desktop/xmonad/default.nix | 7 | ||||
| -rw-r--r-- | users/kassouni/desktop/xmonad/rofi.nix | 79 | ||||
| -rw-r--r-- | users/kassouni/desktop/xmonad/xbindkeys.nix | 32 | ||||
| -rw-r--r-- | users/kassouni/desktop/xmonad/xmonad.nix | 9 |
8 files changed, 355 insertions, 0 deletions
diff --git a/users/kassouni/desktop/sway/default.nix b/users/kassouni/desktop/sway/default.nix new file mode 100644 index 0000000..947924a --- /dev/null +++ b/users/kassouni/desktop/sway/default.nix @@ -0,0 +1,8 @@ +{...}: { + imports = [ + ./waybar.nix + ./sway.nix + ./fuzzel.nix + ]; +} + diff --git a/users/kassouni/desktop/sway/fuzzel.nix b/users/kassouni/desktop/sway/fuzzel.nix new file mode 100644 index 0000000..d6d294b --- /dev/null +++ b/users/kassouni/desktop/sway/fuzzel.nix @@ -0,0 +1,37 @@ +{ + pkgs, + lib, + config, + ... +}: +let + inherit (config.colorScheme) ui editor common; + + # fuzzel wants RRGGBBAA with no leading '#'. + rgba = c: lib.toLower (lib.removePrefix "#" c) + "ff"; +in +{ + programs.fuzzel = { + enable = true; + settings = { + main = { + font = lib.mkForce "${config.theme.font.family}:size=${toString config.theme.font.size}"; + }; + + colors = { + background = rgba ui.bg; + text = rgba editor.fg; + match = rgba common.accent.tint; + selection = rgba ui.panel.bg; + selection-text = rgba editor.fg; + selection-match = rgba common.accent.tint; + border = rgba ui.line; + }; + + border = { + radius = 0; + }; + }; + }; + +} diff --git a/users/kassouni/desktop/sway/sway.nix b/users/kassouni/desktop/sway/sway.nix new file mode 100644 index 0000000..2e73d5f --- /dev/null +++ b/users/kassouni/desktop/sway/sway.nix @@ -0,0 +1,42 @@ +{ + pkgs, + config, + ... +}: +{ + programs.swaylock.enable = true; + wayland.windowManager.sway = { + enable = true; + wrapperFeatures.gtk = true; # Fixes common issues with GTK 3 apps + + config = { + window.titlebar = false; + menu = "fuzzel"; + modifier = "Mod4"; + # Use kitty as default terminal + terminal = "ghostty"; + }; + extraConfig = let + incr = "5"; + brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl"; + in '' + # home-manager inlines these values instead of emitting `set` lines + output * scale 1.75 + output * bg ${config.theme.desktop.wallpaper} fill + bindsym XF86MonBrightnessDown exec ${brightnessctl} set -e ${incr}%- + bindsym XF86MonBrightnessUp exec ${brightnessctl} set -e +${incr}% + bindsym XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_SINK@ ${incr}%+ + bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_SINK@ ${incr}%- + input "type:keyboard" { + xkb_options caps:escape + } + + input "type:touchpad" { + natural_scroll enabled + dwt disabled + } + ''; + + }; +} + diff --git a/users/kassouni/desktop/sway/waybar.nix b/users/kassouni/desktop/sway/waybar.nix new file mode 100644 index 0000000..7cb37a0 --- /dev/null +++ b/users/kassouni/desktop/sway/waybar.nix @@ -0,0 +1,141 @@ +{ pkgs, inputs, config, ... }: +let + inherit (config.colorScheme) ui editor common; +in +{ + programs.waybar = { + enable = true; + settings = { + mainBar = + let + gap = 0; + in + { + layer = "top"; + position = "top"; + + margin-top = gap; + margin-left = gap; + margin-right = gap; + + modules-left = [ "sway/workspaces" ]; + modules-center = [ ]; + modules-right = [ + "cpu" + "wireplumber" + "battery" + "clock" + ]; + + clock = { + format = "{:%a %b %d %I:%M:%S}"; + interval = 1; + tooltip-format = "<tt>{calendar}</tt>"; + }; + + cpu = { + format = " {usage}%"; + }; + + battery = { + format = "{icon} {capacity}%"; + format-icons = { + default = [ + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ]; + + charging = [ + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ]; + }; + + + states = { + low = 20; + }; + }; + + wireplumber = { + format = " {volume}%"; + format-muted = " {volume}%"; + on-click = "wpctl set-mute @DEFAULT_SINK@ toggle"; + max-volume = 150; + scroll-step = 1; + }; + + }; + }; + style = '' + * { + /* waybar's css font-size is px, but theme.font.size is points like + ghostty and fuzzel take. 1pt = 4/3px. */ + font-family: ${config.theme.font.family}; + font-size: ${builtins.toString (config.theme.font.size * 4 / 3)}px; + } + + window#waybar { + background: ${ui.bg}; + color: ${editor.fg}; + } + + .module { + padding: 0px 15px 0px; + } + + #workspaces button { + font-weight: normal; + color: ${ui.fg}; + background: none; + border: none; + } + + #workspaces button.focused { + color: ${common.accent.tint}; + } + + #workspaces button.urgent { + color: ${common.error}; + } + + #workspaces button:hover { + font-weight: bold; + color: ${editor.fg}; + box-shadow: none; + text-shadow: inherit; + background: none; + transition: none; + } + + /* matches the `states.low = 20` threshold on the battery module */ + #battery.low { + color: ${common.error}; + } + ''; + }; + + wayland.windowManager.sway.config.bars = [ + { + command = "waybar"; + } + ]; +} + diff --git a/users/kassouni/desktop/xmonad/default.nix b/users/kassouni/desktop/xmonad/default.nix new file mode 100644 index 0000000..d62dbe4 --- /dev/null +++ b/users/kassouni/desktop/xmonad/default.nix @@ -0,0 +1,7 @@ +{...}: { + imports = [ + ./xmonad.nix + ./rofi.nix + ./xbindkeys.nix + ]; +} diff --git a/users/kassouni/desktop/xmonad/rofi.nix b/users/kassouni/desktop/xmonad/rofi.nix new file mode 100644 index 0000000..740047b --- /dev/null +++ b/users/kassouni/desktop/xmonad/rofi.nix @@ -0,0 +1,79 @@ +{ config, ... }: + +let + inherit (config.lib.formats.rasi) mkLiteral; + colors = config.colorScheme; +in +{ + programs.rofi = { + enable = true; + font = "${config.theme.font.family} ${builtins.toString config.theme.font.size}"; + + theme = { + "*" = { + background-color = mkLiteral "transparent"; + text-color = mkLiteral colors.editor.fg; + }; + + window = { + background-color = mkLiteral colors.ui.popup.bg; + border = mkLiteral "2px"; + border-color = mkLiteral colors.ui.line; + border-radius = mkLiteral "8px"; + padding = mkLiteral "16px"; + width = mkLiteral "40%"; + }; + + inputbar = { + children = map mkLiteral [ "prompt" "entry" ]; + background-color = mkLiteral colors.ui.panel.bg; + border-radius = mkLiteral "4px"; + padding = mkLiteral "8px"; + spacing = mkLiteral "8px"; + }; + + prompt = { + text-color = mkLiteral colors.common.accent.tint; + }; + + entry = { + placeholder = "Search"; + placeholder-color = mkLiteral colors.ui.fg; + }; + + listview = { + lines = 8; + scrollbar = false; + spacing = mkLiteral "2px"; + margin = mkLiteral "12px 0px 0px 0px"; + }; + + element = { + padding = mkLiteral "8px"; + border-radius = mkLiteral "4px"; + spacing = mkLiteral "8px"; + }; + + "element normal urgent" = { + text-color = mkLiteral colors.common.error; + }; + + "element normal active" = { + text-color = mkLiteral colors.common.accent.tint; + }; + + "element selected normal" = { + background-color = mkLiteral colors.common.accent.tint; + text-color = mkLiteral colors.surface.base; + }; + + element-icon = { + size = mkLiteral "1em"; + }; + + element-text = { + text-color = mkLiteral "inherit"; + }; + }; + }; +} diff --git a/users/kassouni/desktop/xmonad/xbindkeys.nix b/users/kassouni/desktop/xmonad/xbindkeys.nix new file mode 100644 index 0000000..41ef7ed --- /dev/null +++ b/users/kassouni/desktop/xmonad/xbindkeys.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +let + wpctl = "${pkgs.wireplumber}/bin/wpctl"; + + xbindkeysrc = pkgs.writeText "xbindkeysrc" '' + "${wpctl} set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+" + XF86AudioRaiseVolume + + "${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 5%-" + XF86AudioLowerVolume + + "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle" + XF86AudioMute + ''; +in +{ + systemd.user.services.xbindkeys = { + Unit = { + Description = "xbindkeys"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + + Service = { + # -n keeps it in the foreground so systemd can supervise it + ExecStart = "${pkgs.xbindkeys}/bin/xbindkeys -n -f ${xbindkeysrc}"; + Restart = "on-failure"; + }; + + Install.WantedBy = [ "graphical-session.target" ]; + }; +} diff --git a/users/kassouni/desktop/xmonad/xmonad.nix b/users/kassouni/desktop/xmonad/xmonad.nix new file mode 100644 index 0000000..d49dcc1 --- /dev/null +++ b/users/kassouni/desktop/xmonad/xmonad.nix @@ -0,0 +1,9 @@ +{pkgs, config, ...}: { + xmonad-config = { + launcher = "rofi -show drun -show-icons"; + terminal = "ghostty"; + wallpaper = config.theme.desktop.wallpaper; + xmobar.font = config.theme.font; + }; +} + |
