nixos/hosts/little-lightning/configuration.nix

197 lines
5.9 KiB
Nix

{ pkgs, lib, self, ... }: {
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages = [ ];
nix.settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
};
environment.shells = with pkgs; [ bashInteractive zsh fish ];
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
# Enable alternative shell support in nix-darwin.
# programs.fish.enable = true;
services.yabai =
let
gap = 10;
gapListParts = builtins.map
(x: lib.attrsets.nameValuePair (x + "_padding") gap)
[ "top" "bottom" "left" "right" ];
gapSettings = (builtins.listToAttrs gapListParts) // { window_gap = gap; };
in
{
enable = true;
enableScriptingAddition = true;
config = {
layout = "bsp";
window_shadow = "float";
mouse_modifier = "fn";
mouse_action1 = "move";
mouse_action2 = "resize";
focus_follows_mouse = "autoraise";
mouse_follows_focus = "off";
window_topmost = "off";
} // gapSettings;
extraConfig = ''
yabai -m rule --add app="^System Settings$" manage=off
yabai -m rule --add app="Python" manage=off
yabai -m rule --add app="macroquad_playground" manage=off
yabai -m rule --add app="^coreautha$" manage=off
'';
};
services.skhd =
let
yabaiSwapToFullscreen = pkgs.writeShellApplication {
name = "yabai-swap-to-fullscreen";
runtimeInputs = [ pkgs.jq pkgs.yabai ];
text = ''
focus() {
yabai -m space --focus "$1"
}
get_fs_displays() {
yabai -m query --spaces | jq -c 'map(select(."is-native-fullscreen" == true))'
}
get_visible() {
printf '%s' "$1" | jq -c 'map(select(."is-visible" == true))'
}
is_empty() {
length="$(printf '%s' "$1" | jq 'length')"
[ "$length" -le 0 ]
}
first() {
printf '%s' "$1" | jq 'sort_by(.index) | .[0].index'
}
try_focus_visible() {
# This should be at max length 1. Though this may likely break in a multimonitor environment
visible_fullscreen_displays=$(get_visible "$1")
if ! is_empty "$visible_fullscreen_displays"; then
visible_index=$(printf '%s' "$visible_fullscreen_displays" | jq -c '.[0].index')
next_index=$((visible_index + 1))
if [ "$(printf '%s' "$fullscreen_displays" | jq "map(select(.index == $next_index)) | length")" -gt "0" ]; then
focus "$next_index"
return 0
fi
fi
return 1
}
main() {
fullscreen_displays="$(get_fs_displays)"
is_empty "$fullscreen_displays" && focus 1 && return 1
try_focus_visible "$fullscreen_displays" && return 1
focus "$(first "$fullscreen_displays")"
}
main
'';
};
# Idk if macos' 'open' is something I can find in nixpkgs lmfao
newAlacrityWindow = pkgs.writeShellApplication {
name = "new-alacritty-window";
runtimeInputs = [ pkgs.alacritty ];
text = ''
alacritty_output=$(alacritty msg create-window 2>/dev/null)
if [ -z "$alacritty_output" ]; then
open /Applications/Alacritty.app
fi
'';
};
session = pkgs.writeText "main-kitty-session" ''
cd /Users/zynh
'';
yabai = lib.getExe pkgs.yabai;
kitty = lib.getExe pkgs.kitty;
in
{
enable = true;
skhdConfig = ''
# float / unfloat window and center on screen
alt - t : ${yabai} -m window --toggle float --grid 4:4:1:1:2:2
# open terminal window using shell script
cmd - return : ${kitty} --session ${session} --single-instance
# rebind space switching
ctrl - left : ${yabai} -m space --focus prev || ${yabai} -m space --focus last
ctrl - right : ${yabai} -m space --focus next || ${yabai} -m space --focus first
# focusing specific spaces
cmd - 1 : ${yabai} -m space --focus 1
cmd - 2 : ${yabai} -m space --focus 2
cmd - 3 : ${yabai} -m space --focus 3
cmd - 4 : ${yabai} -m space --focus 4
cmd - 5 : ${yabai} -m space --focus 5
cmd - 6 : ${yabai} -m space --focus 6
cmd - 7 : ${yabai} -m space --focus 7
cmd - 8 : ${yabai} -m space --focus 8
cmd - 9 : ${yabai} -m space --focus 9
cmd - 0x32 : ${lib.getExe yabaiSwapToFullscreen}
# moving windows
cmd + shift - 1 : ${yabai} -m window --space 1
cmd + shift - 2 : ${yabai} -m window --space 2
cmd + shift - 3 : ${yabai} -m window --space 3
# cmd + shift - 4 : ${yabai} -m window --space 4
cmd + shift - 5 : ${yabai} -m window --space 5
cmd + shift - 6 : ${yabai} -m window --space 6
cmd + shift - 7 : ${yabai} -m window --space 7
cmd + shift - 8 : ${yabai} -m window --space 8
cmd + shift - 9 : ${yabai} -m window --space 9
cmd + shift - 0x32 : ${yabai} -m window --toggle native-fullscreen
# cmd + alt - 4 : "cmd + shift - 4"
'';
};
home-manager.sharedModules = [
{
home.file.".config/yabai/yabaiExe".source = lib.getExe pkgs.yabai;
home.packages = with pkgs; [ yabai ];
}
];
security.pam.enableSudoTouchIdAuth = true;
users.users.zynh = {
name = "zynh";
home = "/Users/zynh";
};
home-manager = {
users = { "zynh" = import ./home.nix; };
backupFileExtension = "backup";
};
fonts.packages = with pkgs; [
(nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
];
# Set Git commit hash for darwin-version.
system.configurationRevision = self.rev or self.dirtyRev or null;
# $ darwin-rebuild changelog
system.stateVersion = 5;
}