feat: i3!

This commit is contained in:
Kat Inskip 2025-02-27 12:29:13 -08:00
parent add8b013a4
commit d463824ef1
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
35 changed files with 2150 additions and 156 deletions

View file

@ -0,0 +1,10 @@
{ config, lib, ... }: let
inherit (config.catppuccin) sources;
inherit (lib) mkBefore;
cfg = config.catppuccin.sway;
theme = "${sources.sway}/catppuccin-${cfg.flavor}";
in {
xsession.windowManager.i3.extraConfigEarly = ''
${builtins.readFile theme}
'';
}

View file

@ -0,0 +1,5 @@
_: {
services.dunst = {
enable = true;
};
}

157
home/environments/i3/i3.nix Normal file
View file

@ -0,0 +1,157 @@
{
pkgs,
lib,
std,
config,
...
}:
let
inherit (std) list;
inherit (lib.modules) mkMerge;
inherit (lib) mkOptionDefault mkDefault mapAttrs;
in {
home.packages = with pkgs; [
maim
pcmanfm
pavucontrol
xclip
];
services.i3gopher.enable = true;
xsession.windowManager.i3 = {
enable = true;
package = pkgs.i3-gaps;
extraConfig = ''
workspace 1 output DP-2
workspace 11 output HDMI-0
'';
config = let
modifier = "Mod4";
other_modifier = "Mod1";
mod = modifier;
mod2 = other_modifier;
in {
inherit modifier;
fonts = [
"Monaspace Krypton"
"FontAwesome 6"
];
startup = [
{ command = "~/.screenlayout/main.sh"; }
{ command = "blueman-applet"; }
];
keybindings = let
bindWorkspace = key: workspace: {
"${mod}+${key}" = "workspace number ${workspace}";
"${mod}+shift+${key}" = "move container to workspace number ${workspace}";
};
mapDefaultAttrs = e: mapAttrs (_: mkDefault) e;
workspaceBindings =
list.map (v: bindWorkspace v "${v}") (list.map builtins.toString (list.range 1 9))
++ [
(
bindWorkspace "0" "10"
)
]
++ list.imap (i: v: bindWorkspace v "${toString (11 + i)}") (list.map (n: "F${builtins.toString n}") (std.list.range 1 12));
normalBindings = {
"Print" = "exec --no-startup-id maim \"/home/$USER/Pictures/$(date)\"";
"${mod2}+Print" = "exec --no-startup-id maim --window $(xdotool getactivewindow) \"/home/$USER/Pictures/$(date)\"";
"Shift+Print" = "exec --no-startup-id maim --select \"/home/$USER/Pictures/$(date)\"";
"Ctrl+Print" = "exec --no-startup-id maim | xclip -selection clipboard -t image/png";
"Ctrl+${mod2}+Print" = "exec --no-startup-id maim --window $(xdotool getactivewindow) | xclip -selection clipboard -t image/png";
"Ctrl+Shift+Print" = "exec --no-startup-id maim --select | xclip -selection clipboard -t image/png";
"${mod}+p" = "exec ${pkgs.dmenu}/bin/dmenu_run";
"${mod}+x" = "exec sh -c '${pkgs.maim}/bin/maim -s | xclip -selection clipboard -t image/png'";
"${mod}+Shift+x" = "exec sh -c '${pkgs.i3lock}/bin/i3lock -c 222222 & sleep 5 && xset dpms force of'";
"${mod}+Return" = "exec ${config.programs.wezterm.package}/bin/wezterm";
"${mod}+Tab" = "workspace back_and_forth";
"${mod}+Shift+Tab" = "exec ${config.services.i3gopher.focus-last}";
};
in mkMerge (map mapDefaultAttrs ([ normalBindings ] ++ workspaceBindings));
workspaceAutoBackAndForth = true;
colors = {
focused = {
border = "$lavender";
background = "$base";
text = "$text";
indicator = "$rosewater";
childBorder = "$lavender";
};
focusedInactive = {
border = "$overlay0";
background = "$base";
text = "$text";
indicator = "$rosewater";
childBorder = "$overlay0";
};
unfocused = {
border = "$overlay0";
background = "$base";
text = "$text";
indicator = "$rosewater";
childBorder = "$overlay0";
};
urgent = {
border = "$peach";
background = "$base";
text = "$peach";
indicator = "$overlay0";
childBorder = "$peach";
};
placeholder = {
border = "$overlay0";
background = "$base";
text = "$text";
indicator = "$overlay0";
childBorder = "$overlay0";
};
background = "$base";
};
bars = [
{
# as if anyone was questioning that,
position = "bottom";
fonts = {
names = [
"Monaspace Krypton"
"FontAwesome 6 Free"
"FontAwesome 6 Brands"
];
size = "8";
};
colors = {
background = "$base";
statusline = "$text";
separator = "$text";
focusedBackground = "$base";
focusedStatusline = "$text";
focusedSeparator = "$base";
focusedWorkspace = {
border ="$base";
background = "$mauve";
text = "$crust";
};
activeWorkspace = {
border = "$base";
background = "$surface2";
text = "$text";
};
inactiveWorkspace = {
border = "$base";
background = "$base";
text = "$text";
};
urgentWorkspace = {
border = "$base";
background = "$red";
text = "$crust";
};
};
trayOutput = "primary";
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${config.xdg.configHome}/i3status-rust/config-gaybar.toml";
}
];
};
};
}

View file

@ -0,0 +1,55 @@
_: {
programs.i3status-rust = {
enable = true;
bars = {
# YOU! I WANNA TAKE YOU TO A
gaybar = {
blocks = [
{
block = "cpu";
interval = 1;
}
{
block = "load";
interval = 1;
format = " $icon $1m ";
}
{
block = "memory";
format = " $icon $mem_total_used_percents.eng(w:2) ";
}
{
block = "memory";
format = " $icon_swap $swap_used_percents.eng(w:2) ";
}
{
block = "nvidia_gpu";
format = " $icon $utilization $memory $temperature ";
}
{
block = "hueshift";
}
{
block = "music";
format = " $icon {$combo.str(max_w:60) $play |}";
}
{
block = "sound";
format = " $icon {$volume.eng(w:2) |}";
}
{
block = "notify";
format = " $icon {($notification_count.eng(w:1)) |}";
}
{
block = "time";
interval = 1;
format = " $icon $timestamp.datetime(f:'%F %T %Z') ";
}
];
theme = "ctp-latte";
icons = "awesome6";
};
};
};
}

View file

@ -0,0 +1,42 @@
{
inputs,
pkgs,
config,
...
}: let
konawallConfig = {
interval = 30 * 60;
rotate = true;
source = "konachan";
tags = [
#"rating:s"
"touhou"
"score:>=50"
"width:>=1500"
];
logging = {
file = "INFO";
console = "DEBUG";
};
};
in {
home.packages = [
inputs.konawall-py.packages.${pkgs.system}.konawall-py
];
xdg.configFile = {
"konawall/config.toml".source = (pkgs.formats.toml {}).generate "konawall-config" konawallConfig;
};
systemd.user.services.konawall-py-gnome = {
Unit = {
Description = "konawall-py";
X-Restart-Triggers = [(toString config.xdg.configFile."konawall/config.toml".source)];
After = ["graphical-session.target" "network-online.target"];
};
Service = {
ExecStart = "${inputs.konawall-py.packages.${pkgs.system}.konawall-py}/bin/konawall";
Restart = "on-failure";
RestartSec = "1s";
};
Install = {WantedBy = ["graphical-session.target"];};
};
}

View file

@ -0,0 +1,5 @@
_: {
services.picom = {
enable = true;
};
}

View file

@ -0,0 +1,6 @@
_: {
services.gammastep = {
enable = true;
provider = "geoclue2";
};
}