Skip to content

Commit

Permalink
feat!: start moving darwin to snowfall
Browse files Browse the repository at this point in the history
  • Loading branch information
sbulav committed Feb 9, 2024
1 parent 26bab16 commit ece60d8
Show file tree
Hide file tree
Showing 14 changed files with 732 additions and 0 deletions.
23 changes: 23 additions & 0 deletions nix/modules/darwin/cli-apps/neovim/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
inputs @ {
options,
config,
lib,
pkgs,
...
}:
with lib;
with lib.custom; let
cfg = config.custom.cli-apps.neovim;
in {
options.custom.cli-apps.neovim = with types; {
enable = mkBoolOpt false "Whether or not to enable neovim.";
};

config = mkIf cfg.enable {
programs.neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
};
};
}
153 changes: 153 additions & 0 deletions nix/modules/darwin/desktop/addons/skhd/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
{
lib,
pkgs,
config,
...
}:
with lib;
with lib.custom; let
cfg = config.custom.desktop.addons.skhd;
in {
options.custom.desktop.addons.skhd = {
enable = mkEnableOption "skhd";
};

config = mkIf cfg.enable {
launchd.user.agents.skhd.serviceConfig = {
StandardOutPath = "/tmp/skhd.log";
StandardErrorPath = "/tmp/skhd.log";
};
services.skhd = {
enable = true;
skhdConfig = ''
# Default mode
:: default
# Workspace focus
alt - 1 : yabai -m space --focus 1
alt - 2 : yabai -m space --focus 2
alt - 3 : yabai -m space --focus 3
alt - 4 : yabai -m space --focus 4
alt - 5 : yabai -m space --focus 5
alt - 6 : yabai -m space --focus 6
alt - 7 : yabai -m space --focus 7
alt - 8 : yabai -m space --focus 8
alt - 9 : yabai -m space --focus 9
alt - 0 : yabai -m space --focus 10
alt - up : yabai -m space --focus 2
alt - down : yabai -m space --focus (yabai -m query --spaces --display | jq 'map(select(."is-native-fullscreen" == true))[-1].index')
# change focus between external displays (left and right)
ctrl + alt - left : yabai -m display --focus west
ctrl + alt - right : yabai -m display --focus east
# Move windows to another workspace
ctrl + shift - 1 : yabai -m window --space 1
ctrl + shift - 2 : yabai -m window --space 2
ctrl + shift - 3 : yabai -m window --space 3
ctrl + shift - 4 : yabai -m window --space 4
ctrl + shift - 5 : yabai -m window --space 5
ctrl + shift - 6 : yabai -m window --space 6
ctrl + shift - 7 : yabai -m window --space 7
ctrl + shift - 8 : yabai -m window --space 8
ctrl + shift - 9 : yabai -m window --space 9
ctrl + shift - 0 : yabai -m window --space 10
# Navigation
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east
alt - left : yabai -m window --focus west
alt - down : yabai -m window --focus south
alt - up : yabai -m window --focus north
alt - right : yabai -m window --focus east
# Close current window
alt - q : yabai -m window --close
# Moving windows
shift + alt - h : yabai -m window --warp west
shift + alt - j : yabai -m window --warp south
shift + alt - k : yabai -m window --warp north
shift + alt - l : yabai -m window --warp east
# Move floating window
shift + alt - h : yabai -m window --move rel:-20:0
shift + alt - j : yabai -m window --move rel:0:20
shift + alt - k : yabai -m window --move rel:0:-20
shift + alt - l : yabai -m window --move rel:20:0
# Float/unfloat windows
shift + alt - space : yabai -m window --toggle float; \
yabai -m window --grid 4:4:1:1:2:2
# Fullscreen
alt - f : yabai -m window --toggle zoom-fullscreen
ctrl + shift - f : yabai -m window --toggle native-fullscreen
# Resize mode
:: resize @
## Enter resize mode
alt - r ; resize
## Leave resize mode
resize < escape ; default
## Resize mode key bindings
resize < h : \
yabai -m window --resize left:-20:0 ; \
yabai -m window --resize right:-20:0
resize < j : \
yabai -m window --resize bottom:0:20 ; \
yabai -m window --resize top:0:20
resize < k : \
yabai -m window --resize top:0:-20 ; \
yabai -m window --resize bottom:0:-20
resize < l : \
yabai -m window --resize right:20:0 ; \
yabai -m window --resize left:20:0
# Resize windows
ctrl + alt - h : \
yabai -m window --resize left:-20:0 ; \
yabai -m window --resize right:-20:0
ctrl + alt - j : \
yabai -m window --resize bottom:0:20 ; \
yabai -m window --resize top:0:20
ctrl + alt - k : \
yabai -m window --resize top:0:-20 ; \
yabai -m window --resize bottom:0:-20
ctrl + alt - l : \
yabai -m window --resize right:20:0 ; \
yabai -m window --resize left:20:0
# Toggle window split type with semicolon
ctrl + alt - e : yabai -m window --toggle split
# Balance size of windows
ctrl + alt - 0 : yabai -m space --balance
# Workspace init
ctrl + shift - n : yabai -m space --create
ctrl + shift - d : yabai -m space --destroy
# Applications
alt - x : /Users/sab/.nix-profile/bin/kitty
ctrl + alt - b: /Applications/Firefox.App/Contents/MacOS/firefox
# -- Starting/Stopping/Restarting Yabai --
# stop/start/restart yabai + skhd
ctrl + alt - q : launchctl stop org.nixos.yabai; launchctl stop org.nixos.skhd
ctrl + alt - s : launchctl start org.nixos.yabai; launchctl start org.nixos.skhd
ctrl + alt - r : launchctl stop org.nixos.yabai; launchctl stop org.nixos.skhd; launchctl start org.nixos.yabai; launchctl start org.nixos.skhd
'';
};
};
}
49 changes: 49 additions & 0 deletions nix/modules/darwin/desktop/addons/spacebar/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
lib,
pkgs,
config,
...
}:
with lib;
with lib.custom; let
cfg = config.custom.desktop.addons.spacebar;
in {
options.custom.desktop.addons.spacebar = {
enable = mkEnableOption "Spacebar";
};

config = mkIf cfg.enable {
services.spacebar = {
enable = true;
package = pkgs.spacebar;

config = {
position = "top";
display = "all";
height = 32;
title = "on";
spaces = "on";
clock = "on";
power = "off";

padding_left = 10;
padding_right = 10;

spacing_left = 10;
spacing_right = 10;

foreground_color = "0xffeceff4";
background_color = "0xff1d2128";

text_font = ''"Hack Nerd Font Mono:Regular:14.0"'';
icon_font = ''"Hack Nerd Font Mono:Regular:20.0"'';

# Shell entries apparently break the whole bar...
# https://github.com/cmacrae/spacebar/issues/104
# right_shell_icon = "";
# right_shell_command = ''"whoami"'';
# right_shell = "on";
};
};
};
}
104 changes: 104 additions & 0 deletions nix/modules/darwin/desktop/yabai/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
lib,
pkgs,
config,
...
}: let
cfg = config.custom.desktop.yabai;

inherit (lib) types mkEnableOption mkIf;
inherit (lib.custom) mkOpt enabled;
in {
options.custom.desktop.yabai = {
enable = mkEnableOption "Yabai";
enable-scripting-addition = mkOpt types.bool true "Whether to enable the scripting addition for Yabai. (Requires SIP to be disabled)";
};

config = mkIf cfg.enable {
custom.desktop.addons = {
skhd = enabled;
spacebar = disabled;
};
launchd.user.agents.yabai.serviceConfig = {
StandardOutPath = "/tmp/yabai.log";
StandardErrorPath = "/tmp/yabai.log";
};

services.yabai = {
enable = true;
enableScriptingAddition = true;
config = {
# Binary space partitioning layout
layout = "bsp";
# When focusing a window, put the mouse at its center
mouse_follows_focus = "on";
# Automatically focus the window under the mouse
focus_follows_mouse = "autoraise";
# New window spawns to the right if vertical split, or bottom if
# horizontal split
window_placement = "second_child";
# Disable opacity for windows
window_opacity = "off";
# Padding added around the sides of a space
top_padding = 6;
bottom_padding = 6;
left_padding = 6;
right_padding = 6;
# Size of the gap that separates windows
window_gap = 6;
# Draw shadow for windows, window_border has been removed
window_shadow = "on";
# Add padding for external status bar
external_bar = "all:0:26";
};

extraConfig = ''
for _ in $(yabai -m query --spaces | jq '.[].index | select(. > 6)'); do
yabai -m space --destroy 7
done
function setup_space {
local idx="$1"
local name="$2"
local space=
echo "setup space $idx : $name"
space=$(yabai -m query --spaces --space "$idx")
if [ -z "$space" ]; then
yabai -m space --create
fi
yabai -m space "$idx" --label "$name"
}
setup_space 1 main
setup_space 2 web
setup_space 3 code
setup_space 4 social
setup_space 5 media
setup_space 6 other
yabai -m rule --add app="^Safari$" space=2
yabai -m rule --add app="^Firefox$" space=2
yabai -m rule --add app="^Kitty$" space=3
yabai -m rule --add app="^kitty$" space=3
yabai -m rule --add app="^Telegram$" space=1
yabai -m rule --add app="^Slack$" space=1
yabai -m rule --add app="^Teams$" space=1
yabai -m rule --add app="^Mail$" space=4
yabai -m rule --add app="^Calendar$" space=4
yabai -m rule --add app="^Music$" space=5
# Float system settings
yabai -m rule --add app="^(Terminal|Calculator|Software Update|Dictionary|VLC|System Preferences|System Settings|zoom.us|Photo Booth|Archive Utility)$" manage=off
yabai -m rule --add label="Finder" app="^Finder$" title="(Co(py|nnect)|Move|Info|Pref)" manage=off
yabai -m rule --add app="^System Information$" label="^About This Mac$" manage=off
yabai -m rule --add app="^Cisco AnyConnect Secure Mobility Client$" manage=off
yabai -m rule --add app="^Cisco$" manage=off
# Load scripting addition
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
sudo yabai --load-sa
'';
};
};
}
46 changes: 46 additions & 0 deletions nix/modules/darwin/home/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
options,
config,
pkgs,
lib,
inputs,
...
}:
with lib;
with lib.custom; let
cfg = config.custom.home;
in {
# imports = with inputs; [
# home-manager.darwinModules.home-manager
# ];

options.custom.home = with types; {
file =
mkOpt attrs {}
"A set of files to be managed by home-manager's <option>home.file</option>.";
configFile =
mkOpt attrs {}
"A set of files to be managed by home-manager's <option>xdg.configFile</option>.";
extraOptions = mkOpt attrs {} "Options to pass directly to home-manager.";
homeConfig = mkOpt attrs {} "Final config for home-manager.";
};

config = {
custom.home.extraOptions = {
home.stateVersion = mkDefault "22.11";
home.file = mkAliasDefinitions options.custom.home.file;
xdg.enable = true;
xdg.configFile = mkAliasDefinitions options.custom.home.configFile;
};

snowfallorg.user.${config.custom.user.name}.home.config = mkAliasDefinitions options.custom.home.extraOptions;

home-manager = {
useUserPackages = true;
useGlobalPkgs = true;

# users.${config.custom.user.name} = args:
# mkAliasDefinitions options.custom.home.extraOptions;
};
};
}
Loading

0 comments on commit ece60d8

Please sign in to comment.