6LLASGTJ4B7K56WVLPOANOC3BOXOZICFDM7XQYNBC233D4PLLNSAC
RSJTCAOB6WUJLPHNTT2JJWRZ6YOL3X2ZIOWYGNBC7Z5VQG5DQ5OAC
SDLAY4CEC2M5KRY2Z2QTQKVQJUSB77IOLXU6RD7QOMUK6GYZBZDQC
4JMWYDTIY2D2HOC4JTGXMGGAFB56LW2VMK4FT4V4XXNHQJWQT5MAC
4U4HTFCQ7XZCSUGDF4BG2SL22K5HAFRGP5DFV6IL3MK2MOW6ZESQC
I4EGHW6GGBXNEW5CDRH7UB6QYUHHUXB6FJNPDQ3YBBUEI22SQNOAC
ZRQ5HIXJLGSAI5M4KOC7I3QNEXGBPUQE7V4MSY7WLV3DBIGULERQC
IPBSEPO6VM4TEPOL2MN47EINIPMHJB63XUBZRCXO5EN3STGBNNVAC
2DOHF7YTTNCYHVAW6TY6AQVQZ3TV3JK4SCF7LZQTLBILP3K5NIWAC
EKNR3UNTAR2MCROCKAYF3UUJBG56ZV2AUJD4BMQYGQJ3KUZT4GKQC
QF7VMCPGQIVJI2CPGJOEWS3ROVCB2CB7STNZ4N55UHMGWOZAHJIAC
T47INCMZO5G24CHPJ3JACA3JJKADMPBZRAHAZPQRP4MOJFNXTWCQC
JDPDRPPDSMGQSNUUIALW5ZJEUI4IUYOBBTIHQHURK36BVQFBF2WAC
BX2EXA45RHKBK4ZFZYUMHYDYKRVIUQJZDW6O643XUHKI5LVNDSJAC
BYCLZBRJTN2ZIINK42SBGJHKCPVXECL632SYTV6EEQROEUNZJFHAC
A32NGEIBDOOKELILD6YPAGDCEDVVSYBSNJNS4RDXB7SHBQNIVNPQC
3OAFCHK7EIRUD3ZLAGZ3MAXVYOGFAJVDOF63ZIGNU7I3RWIPMAOQC
N7DHDONTAB6UEU4PHQR7BNSUQFAA4JBIVSTKDQ7V7OF3CLOEWXOQC
6DZO6E3ALZ477IYSCGVKASDYM54CZEDON55NR2UTUGOCZR3BMTAAC
T4B2IJ4JIWX4C4QJI2S5TQHBO4U4ZFCIWR2VNIH6MGAOPMIAVHAQC
LW7EMVOBZAG5K4QXAKPM46IV2U2U7EWKFKY4S3AR2SJESHJ7YJ3AC
SYTPYTMXWHIFHN3ENTDGOGSXWSXPKQUURXJTHSDUGOYA5QPGC45QC
VBIKNV64COAFFZXT2MWPUFAZPSPFIIK2TOPGBXKIOU7XCVQ4LJ6AC
WJXAODNJYL54BUFSRF3G2AEBWEI6Q4YH5DXYLK3UYC6JRJYGG7TQC
WVAJNAJ4EVTTIREWQDTBMGASLMWJUVBHIM2MKKOFTFYVIIMR6CBAC
2DCSBI5WHA34B5NDE27MLEFQALF3O2MN4W75E5Y6EIVBY5C3JM6QC
4PEXC6EE4FNTPUYT64XDSOD6X5IVDY3Y2QDKYTSHEBOYS4JATQTQC
CL7RP3ZICLJT7YUI3O54IB2GZY7QMKK7ZC6GZPDXFYQKOOM64CHQC
UGB75SJDEEIESGIBHGNFNLBXDRVG5RTSQGXCPX6YALFUOGDKWZHQC
GLQKXNKF6VOLND7MTAYARMRLMDGRZHPYLNMOIRWC7IYVZ3FD77EQC
IWXQRSNIUR6NGULYQZ2AJA6T254TWEDOOQJGTLLVT6LAFOFWRTBAC
INKINKWN6MRRH4CGUVTWI5TQ7VSCHA6ODXMLHVVFCHYPM27AYNNQC
SNOBOIQJMXWVINDV7N23CPNGPGH2RCSY3FR4SES4I2KFIDIJ577AC
5TV7PKKVOU5ZI54V25KW4GSHHF4SJUDOV6TODQ7FKKSJZGXY2IQAC
ROMB2RDGX2LJ4U2XAWJ5S7YANTEY7ICEHIV3FJCPXTTHM5DOYFHQC
EAV6XCAV7SQXSOO3UX3UYKEPNCNQ26BCFJ64ALU646ZZELDJ2ALQC
V5HNZGTFYNRMKUU2HXDGKAPVZ35JZAQZKXSGZ337HKTDYJLQ6D2QC
UIUV6ER2W7XTLBOLPPZWVW4UOZ4KQWKFOYAEBUGSSCZ7BMSZRP3AC
KUTBHT3LPAECGVN2NRJHGKBQP2WEPYO6BCG3RCH4YFHPL3MWVWXAC
IKVV4XDUTXIEYX6G3GRZEVXK5IWGKZOMG76BO25GS6K3JOUTXK4AC
2AA2CTPIDRVJ4TRA5UK2IS4W6EKSIB3UBZWXPOVLX4FMJLSBOLPAC
A5LLNGHQYNL2EOXRIAH4VR6AGBEYYKX4AMWYXS4T2SKS2EKZK3VAC
NJ5ENURMCBSNFQPNXXNUBMUXVJEBIGNH2T7EWGB63F3FV723BUWAC
TXU55BEHKBJLAFQATXNK36M3CM2KNH3YCQCVF54NK7O2CO4LHM4QC
ZH5LGJE4YAOHG5UP6P4X3NPIUROJWHEXR3PX56PATR5KNIMQL35QC
RXICO42ORY5LDWQRI7RQ6GVKB2W32BFCZ62J4KZFHBGPBKPP77AQC
PKUQNGARQTNWOZNQYHXVQH2UEXORRVKZZUYGXPQB3AAS6QXAWXBQC
PS2VFJMZVN77RHZFVUVD2DA3MZNMXYPHT6XRHW2EUTZRGLAXF4YQC
WDE4LLYP24YKDAV6PW62DFNWV3WZWQUUPA7CZH6STDZFYU7ARERQC
LMNZL55P3Z7IS2W7ZJTPGFEBSA5J2OHELRV7IWSCES5MNPSH6Q2QC
IEQ3LC3LCWZGWJ6I2L2NHBIHMY5RQECYFSUOX4J3DJX2WUFOIVNQC
TIAN54QWQA6YCIYL6C7YXXELA3SKBSMP2Y3ET2YLRWHHOPDE3Y3AC
CUFEZOOL3ITGUC2NOLN3WFVWTETYM7L5QU3UNVXVOH6GQYI4R5FQC
TEJLAHEG6JYVPWBHUHIO6NTSB7HO62RJ6G5J2B6UNPDVG7XK4XIAC
M42H5HLDPW5VN6H7PAXZQ5QILN4ZOCVIKZVCWZ5T26VEW4UZRN7AC
YCLCLKWHFN47MFXOEAUAMLI7STJ5O734C5ZHFA65NYR4QEDAAH6AC
WHTEZBXRS7R3AM44LJZFR2YE6RP4IWE3AB5V3DYGO4YJU7PBTMQAC
V35VSNOB6RFO6F3GDIVMZVNTUCZPYCNA4LGDBGW4HYGLFMIIOB4AC
HH6WAMVTZDJY4VHUQOTEAWVFOXYRLFK6LZTAPY53UZYDSCOJFSFQC
ZH6EAGFIDERASR6IRHMOHY3RFYDIXB6SXBQZHA36X6NOENM6W43QC
COUSBBHL5XPZC5KWCYFFAE554D4VFFO55QOD726ODWIRZGWOUSUAC
5PKY2AL3ELY7NERTVH2K2SNF64ZINHWKSOJCUQTL25RJHUXSTLBQC
HUGEVM5JE52YM6XEQFPLVVZ6XAGS6DUTE4WD4ECQO2XUAWFCRPFQC
TG3BV5E5KFMDDZQUFFRUQPGWEJTQ2D3SMKDAQYDQIU3W4LHCGARAC
QWCRX3X3GK54RQ6FWNNFBIRCSORLNRP25U6B622VFA3UXFJCOJQAC
ISTJKNJXBXQUSRXCILUOFWNDHC4N7VM2BJ4IGFGYCBBFXGDEVSQQC
MLRHVC6KVWGVDIQMAUMNAGWYBB6AQAJCEJY7MKDGN72JRC74VT6AC
7UWOMG432IHX7BGGN7PPQUGSSUP6CCQNBXOO7TKNMKMK2R2WFOGAC
# we want the config of ff, but we don't install it from nix cause the nix package
# does not support macos, we instead use nix-darwin's homebrew integration to install
# firefox for us
programs.firefox.enable = false;
programs.firefox.package = pkgs.hello; # hack cause we install ff w/ nix-darwin.homebrew
programs.firefox.package = pkgs.firefox-devedition-bin;
programs.zoom.enable = false;
programs.darktable.enable = false;
programs.signal.enable = false;
launchd.user.agents.mbsync =
if config.home-manager.users."${pii.userName}".accounts.email.accounts != {}
then {
command = "${pkgs.isync}/bin/mbsync -a && mu ${pkgs.mu}/bin/mu index";
serviceConfig.StartInterval = 60 * 5;
}
else {};
modules = [
hostPath
hmModule
{
home-manager.extraSpecialArgs = specialArgs system;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "hm.bak";
}
];
modules =
[
hostPath
hmModule
{
home-manager.extraSpecialArgs = specialArgs system;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "hm.bak";
}
]
++ (
if system == "aarch64-darwin"
then [inputs.mac-app-util.darwinModules.default]
else []
);
{
config,
lib,
pkgs,
dotfiles_lib,
...
}: let
cfg = config.dotfiles.shell.ranger;
in {
options.dotfiles.shell.ranger = with dotfiles_lib.options; {
enable = mkDefaultEnabledOption "enables ranger, the tui file manager.";
};
config = lib.mkIf cfg.enable {
home.packages = [pkgs.ranger];
xdg.configFile = lib.mkIf cfg.enable {
"ranger/rc.conf".text = ''
map l display_file
map <A-n> scroll_preview 1
map <A-e> scroll_preview -1
copymap <UP> e
copymap <DOWN> n
copymap <LEFT> m
copymap <RIGHT> i
map N move down=0.5 pages=True
map E move up=0.5 pages=True
copymap N <C-D>
copymap E <C-U>
map M history_go -1
map I history_go 1
map ] move_parent 1
map L eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
map <C-n> search_next
map <C-N> search_next forward=False
tmap N eval -q fm.ui.taskview.task_move(-1)
tmap E eval -q fm.ui.taskview.task_move(0)
'';
};
};
}
{pkgs, ...}: {
programs.waybar = {
systemd = {
enable = false;
target = "sway-session.target";
};
style = builtins.readFile ./waybar_style.css;
settings = [
{
layer = "top";
position = "top";
height = 24;
modules-left = ["clock" "custom/media"];
modules-center = ["sway/mode" "sway/workspaces"];
modules-right = ["idle_inhibitor" "pulseaudio" "network" "bluetooth" "battery" "tray"];
"sway/workspaces" = {
disable-scroll = true;
all-outputs = false;
format = "{icon}";
format-icons = {
urgent = "🔥";
focused = "";
default = "";
};
{
pkgs,
lib,
config,
...
}: {
config = lib.mkIf config.dotfiles.gui.enable {
programs.waybar = {
systemd = {
enable = false;
target = "sway-session.target";
};
style = builtins.readFile ./waybar_style.css;
settings = [
{
layer = "top";
position = "top";
height = 24;
modules-left = ["clock" "custom/media"];
modules-center = ["sway/mode" "sway/workspaces"];
modules-right = ["idle_inhibitor" "pulseaudio" "network" "bluetooth" "battery" "tray"];
"sway/workspaces" = {
disable-scroll = true;
all-outputs = false;
format = "{icon}";
format-icons = {
urgent = "🔥";
focused = "";
default = "";
};
clock = {
format = "{:%I:%M %p}";
format-alt = "{:%Y-%m-%d}";
};
battery = {
bat = "BAT0";
states = {
good = 95;
warning = 25;
critical = 10;
clock = {
format = "{:%I:%M %p}";
format-alt = "{:%Y-%m-%d}";
};
battery = {
bat = "BAT0";
states = {
good = 95;
warning = 25;
critical = 10;
};
format = "{icon}";
format-icons = ["" "" "" "" ""];
tooltip-format = ''
{capacity}%
{timeTo}
'';
};
network = {
# interface = "wlp2s0"; # (Optional) To force the use of this interface
format-wifi = "";
format-ethernet = "";
format-disconnected = "⚠";
tooltip-format-wifi = "{essid} ({signalStrength}%) ";
tooltip-format-ethernet = "ethernet: {ifname}: {ipaddr}/{cidr}";
tooltip-format-disconnected = "Disconnected";
format = "{icon}";
format-icons = ["" "" "" "" ""];
tooltip-format = ''
{capacity}%
{timeTo}
'';
};
network = {
# interface = "wlp2s0"; # (Optional) To force the use of this interface
format-wifi = "";
format-ethernet = "";
format-disconnected = "⚠";
tooltip-format-wifi = "{essid} ({signalStrength}%) ";
tooltip-format-ethernet = "ethernet: {ifname}: {ipaddr}/{cidr}";
tooltip-format-disconnected = "Disconnected";
};
pulseaudio = {
format = "{volume}% {icon}";
format-bluetooth = "{volume}% {icon}";
format-muted = "";
format-icons = {
headphones = "";
handsfree = "";
headset = "";
phone = "";
portable = "";
car = "";
default = ["" ""];
pulseaudio = {
format = "{volume}% {icon}";
format-bluetooth = "{volume}% {icon}";
format-muted = "";
format-icons = {
headphones = "";
handsfree = "";
headset = "";
phone = "";
portable = "";
car = "";
default = ["" ""];
};
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
};
"custom/media" = {
on-click = "${pkgs.playerctl}/bin/playerctl play-pause";
format = "🎵 {}";
max-length = 40;
interval = 30; # Remove this if your script is endless and write in loop
exec = with pkgs; let
name = "waybar_media_play_pause_toggler";
in "${writeShellApplication {
inherit name;
runtimeInputs = [playerctl];
text = ''
player_status=$(playerctl status 2>/dev/null)
"custom/media" = {
on-click = "${pkgs.playerctl}/bin/playerctl play-pause";
format = "🎵 {}";
max-length = 40;
interval = 30; # Remove this if your script is endless and write in loop
exec = with pkgs; let
name = "waybar_media_play_pause_toggler";
in "${writeShellApplication {
inherit name;
runtimeInputs = [playerctl];
text = ''
player_status=$(playerctl status 2>/dev/null)
wayland.windowManager.sway = {
config.fonts.names = ["DejaVu Sans Mono" "FontAwesome5Free"]; # TODO don't hardcode
config.bars = [{command = "waybar";}];
config.floating.criteria = [
{app_id = "pavucontrol";}
{app_id = "zenity";}
{
app_id = "org.keepassxc.KeePassXC";
}
{class = ".zoom";}
];
config.floating.titlebar = false;
config.focus.mouseWarping = true;
config.gaps.inner = 3;
config.gaps.outer = 3;
config.gaps.smartGaps = true;
config.input."*".natural_scroll = "enabled";
config.input."type:touchpad" = {
tap = lib.mkDefault "enabled";
tap_button_map = lib.mkDefault "lrm";
accel_profile = lib.mkDefault "adaptive";
config = lib.mkIf config.dotfiles.gui.sway.enable {
wayland.windowManager.sway = {
config.fonts.names = ["DejaVu Sans Mono" "FontAwesome5Free"]; # TODO don't hardcode
config.bars = [{command = "waybar";}];
config.floating.criteria = [
{app_id = "pavucontrol";}
{app_id = "zenity";}
{
app_id = "org.keepassxc.KeePassXC";
}
{class = ".zoom";}
];
config.floating.titlebar = false;
config.focus.mouseWarping = true;
config.gaps.inner = 3;
config.gaps.outer = 3;
config.gaps.smartGaps = true;
config.input."*".natural_scroll = "enabled";
config.input."type:touchpad" = {
tap = lib.mkDefault "enabled";
tap_button_map = lib.mkDefault "lrm";
accel_profile = lib.mkDefault "adaptive";
};
config.output."*".bg = "${../wallpapers}/1.jpg fill";
config.startup = [
{
command = "${pkgs.kanshi}/bin/kanshi";
always = true;
}
];
config.window.titlebar = false;
config.workspaceAutoBackAndForth = true;
wrapperFeatures.base = true;
wrapperFeatures.gtk = true;
extraConfig = ''
seat seat0 xcursor_theme breeze 62
for_window [app_id="scratch_terminal"] move scratchpad, resize set 800 610
exec ${pkgs.alacritty}/bin/alacritty --title=scratch_terminal
'';
config.output."*".bg = "${../wallpapers}/1.jpg fill";
config.startup = [
{
command = "${pkgs.kanshi}/bin/kanshi";
always = true;
}
];
config.window.titlebar = false;
config.workspaceAutoBackAndForth = true;
wrapperFeatures.base = true;
wrapperFeatures.gtk = true;
extraConfig = ''
seat seat0 xcursor_theme breeze 62
for_window [app_id="scratch_terminal"] move scratchpad, resize set 800 610
exec ${pkgs.alacritty}/bin/alacritty --title=scratch_terminal
'';
config.wayland.windowManager.sway.config.modes = {
disabled_mode = {
# a mode for ignoring all keybindings until the compose mode keys are
# repeated.
"Shift+space" = "mode default";
config = lib.mkIf config.dotfiles.gui.sway.enable {
wayland.windowManager.sway.config.modes = {
disabled_mode = {
# a mode for ignoring all keybindings until the compose mode keys are
# repeated.
"Shift+space" = "mode default";
};
compose_mode =
{
# a mode for entering other modes, or inserting commands based on
# sequential key presses
# e.g. Shift+space -> k -> s == bemenu_try_restart_systemd_user_services
f = "fullscreen toggle; mode default;";
k = "mode kill_mode";
r = "mode resize_mode";
t = ''exec swaymsg [app_id="scratch_terminal"] scratchpad show; mode default;'';
w = "mode workspace_mode";
v = "mode volume_mode";
"Shift+space" = "mode disabled_mode";
}
// leaveModeKeys;
kill_mode =
{
"Shift+q" = "exec logout";
q = "${execNwgBar}";
r = "exec systemctl reboot -i";
s = "exec bemenu_try_restart_systemd_user_services; mode default;";
}
// leaveModeKeys;
resize_mode =
{
"${cfg.up}" = "resize grow height 15 px";
"${cfg.down}" = "resize shrink height 15 px";
"${cfg.left}" = "resize shrink width 15 px";
"${cfg.right}" = "resize grow width 15 px";
"Shift+${cfg.up}" = "resize grow height 45 px";
"Shift+${cfg.down}" = "resize shrink height 45 px";
"Shift+${cfg.left}" = "resize shrink width 45 px";
"Shift+${cfg.right}" = "resize grow width 45 px";
}
// leaveModeKeys;
volume_mode =
{
"${cfg.up}" = "${setVolume} +1%";
"Shift+${cfg.up}" = "${setVolume} +10%";
"${cfg.down}" = "${setVolume} -1%";
"Shift+${cfg.down}" = "${setVolume} -10%";
}
// leaveModeKeys;
workspace_mode =
{
"0" = "workspace 0";
"1" = "workspace 1";
"2" = "workspace 2";
"3" = "workspace 3";
"4" = "workspace 4";
"5" = "workspace 5";
"6" = "workspace 6";
"7" = "workspace 7";
"8" = "workspace 8";
"9" = "workspace 9";
"${cfg.right}" = "workspace next";
"${cfg.left}" = "workspace prev";
}
// leaveModeKeys;
compose_mode =
{
# a mode for entering other modes, or inserting commands based on
# sequential key presses
# e.g. Shift+space -> k -> s == bemenu_try_restart_systemd_user_services
f = "fullscreen toggle; mode default;";
k = "mode kill_mode";
r = "mode resize_mode";
t = ''exec swaymsg [app_id="scratch_terminal"] scratchpad show; mode default;'';
w = "mode workspace_mode";
v = "mode volume_mode";
"Shift+space" = "mode disabled_mode";
}
// leaveModeKeys;
kill_mode =
{
"Shift+q" = "exec logout";
q = "${execNwgBar}";
r = "exec systemctl reboot -i";
s = "exec bemenu_try_restart_systemd_user_services; mode default;";
}
// leaveModeKeys;
resize_mode =
{
"${cfg.up}" = "resize grow height 15 px";
"${cfg.down}" = "resize shrink height 15 px";
"${cfg.left}" = "resize shrink width 15 px";
"${cfg.right}" = "resize grow width 15 px";
"Shift+${cfg.up}" = "resize grow height 45 px";
"Shift+${cfg.down}" = "resize shrink height 45 px";
"Shift+${cfg.left}" = "resize shrink width 45 px";
"Shift+${cfg.right}" = "resize grow width 45 px";
}
// leaveModeKeys;
volume_mode =
{
"${cfg.up}" = "${setVolume} +1%";
"Shift+${cfg.up}" = "${setVolume} +10%";
"${cfg.down}" = "${setVolume} -1%";
"Shift+${cfg.down}" = "${setVolume} -10%";
}
// leaveModeKeys;
workspace_mode =
{
"0" = "workspace 0";
"1" = "workspace 1";
"2" = "workspace 2";
"3" = "workspace 3";
"4" = "workspace 4";
"5" = "workspace 5";
"6" = "workspace 6";
"7" = "workspace 7";
"8" = "workspace 8";
"9" = "workspace 9";
"${cfg.right}" = "workspace next";
"${cfg.left}" = "workspace prev";
}
// leaveModeKeys;
};
config.wayland.windowManager.sway.config.keybindings = {
"${cfg.modifier}+t" = "exec ${cfg.terminal}";
"${cfg.modifier}+q" = "kill";
"${cfg.modifier}+space" = ''exec ${j4-dmenu-desktop}/bin/j4-dmenu-desktop'';
"${cfg.modifier}+Shift+q" = "${execNwgBar}";
wayland.windowManager.sway.config.keybindings = {
"${cfg.modifier}+t" = "exec ${cfg.terminal}";
"${cfg.modifier}+q" = "kill";
"${cfg.modifier}+space" = ''exec ${j4-dmenu-desktop}/bin/j4-dmenu-desktop'';
"${cfg.modifier}+Shift+q" = "${execNwgBar}";
XF86LaunchB = "exec ${pkgs.nwg-drawer}/bin/nwg-drawer";
XF86AudioPlay = "${execPlayerctl} play-pause";
XF86AudioNext = "${execPlayerctl} next";
XF86AudioPrev = "${execPlayerctl} previous";
XF86AudioLowerVolume = "${setVolume} -5%";
XF86AudioRaiseVolume = "${setVolume} +5%";
XF86AudioMute = "${setVolume} 0%";
XF86MonBrightnessDown = "exec ${brightnessctl} set 5%-";
XF86MonBrightnessUp = "exec ${brightnessctl} set +5%";
XF86LaunchB = "exec ${pkgs.nwg-drawer}/bin/nwg-drawer";
XF86AudioPlay = "${execPlayerctl} play-pause";
XF86AudioNext = "${execPlayerctl} next";
XF86AudioPrev = "${execPlayerctl} previous";
XF86AudioLowerVolume = "${setVolume} -5%";
XF86AudioRaiseVolume = "${setVolume} +5%";
XF86AudioMute = "${setVolume} 0%";
XF86MonBrightnessDown = "exec ${brightnessctl} set 5%-";
XF86MonBrightnessUp = "exec ${brightnessctl} set +5%";
"${cfg.modifier}+${cfg.left}" = "focus left";
"${cfg.modifier}+${cfg.down}" = "focus down";
"${cfg.modifier}+${cfg.up}" = "focus up";
"${cfg.modifier}+${cfg.right}" = "focus right";
"${cfg.modifier}+${cfg.left}" = "focus left";
"${cfg.modifier}+${cfg.down}" = "focus down";
"${cfg.modifier}+${cfg.up}" = "focus up";
"${cfg.modifier}+${cfg.right}" = "focus right";
"${cfg.modifier}+Shift+${cfg.left}" = "move left";
"${cfg.modifier}+Shift+${cfg.down}" = "move down";
"${cfg.modifier}+Shift+${cfg.up}" = "move up";
"${cfg.modifier}+Shift+${cfg.right}" = "move right";
"${cfg.modifier}+Shift+${cfg.left}" = "move left";
"${cfg.modifier}+Shift+${cfg.down}" = "move down";
"${cfg.modifier}+Shift+${cfg.up}" = "move up";
"${cfg.modifier}+Shift+${cfg.right}" = "move right";
"${cfg.modifier}+ctrl+s" = "layout stacking";
"${cfg.modifier}+ctrl+w" = "layout tabbed";
"${cfg.modifier}+ctrl+e" = "layout toggle split";
"${cfg.modifier}+ctrl+s" = "layout stacking";
"${cfg.modifier}+ctrl+w" = "layout tabbed";
"${cfg.modifier}+ctrl+e" = "layout toggle split";
"${cfg.modifier}+1" = "workspace number 1";
"${cfg.modifier}+2" = "workspace number 2";
"${cfg.modifier}+3" = "workspace number 3";
"${cfg.modifier}+4" = "workspace number 4";
"${cfg.modifier}+5" = "workspace number 5";
"${cfg.modifier}+6" = "workspace number 6";
"${cfg.modifier}+7" = "workspace number 7";
"${cfg.modifier}+8" = "workspace number 8";
"${cfg.modifier}+9" = "workspace number 9";
"${cfg.modifier}+ctrl+${cfg.right}" = "workspace next";
"${cfg.modifier}+ctrl+${cfg.left}" = "workspace prev";
"${cfg.modifier}+ctrl+${cfg.down}" = "workspace back_and_forth";
"${cfg.modifier}+ctrl+${cfg.up}" = "workspace back_and_forth";
"${cfg.modifier}+1" = "workspace number 1";
"${cfg.modifier}+2" = "workspace number 2";
"${cfg.modifier}+3" = "workspace number 3";
"${cfg.modifier}+4" = "workspace number 4";
"${cfg.modifier}+5" = "workspace number 5";
"${cfg.modifier}+6" = "workspace number 6";
"${cfg.modifier}+7" = "workspace number 7";
"${cfg.modifier}+8" = "workspace number 8";
"${cfg.modifier}+9" = "workspace number 9";
"${cfg.modifier}+ctrl+${cfg.right}" = "workspace next";
"${cfg.modifier}+ctrl+${cfg.left}" = "workspace prev";
"${cfg.modifier}+ctrl+${cfg.down}" = "workspace back_and_forth";
"${cfg.modifier}+ctrl+${cfg.up}" = "workspace back_and_forth";
"${cfg.modifier}+Shift+1" = "move container to workspace number 1";
"${cfg.modifier}+Shift+2" = "move container to workspace number 2";
"${cfg.modifier}+Shift+3" = "move container to workspace number 3";
"${cfg.modifier}+Shift+4" = "move container to workspace number 4";
"${cfg.modifier}+Shift+5" = "move container to workspace number 5";
"${cfg.modifier}+Shift+6" = "move container to workspace number 6";
"${cfg.modifier}+Shift+7" = "move container to workspace number 7";
"${cfg.modifier}+Shift+8" = "move container to workspace number 8";
"${cfg.modifier}+Shift+9" = "move container to workspace number 9";
"${cfg.modifier}+Shift+1" = "move container to workspace number 1";
"${cfg.modifier}+Shift+2" = "move container to workspace number 2";
"${cfg.modifier}+Shift+3" = "move container to workspace number 3";
"${cfg.modifier}+Shift+4" = "move container to workspace number 4";
"${cfg.modifier}+Shift+5" = "move container to workspace number 5";
"${cfg.modifier}+Shift+6" = "move container to workspace number 6";
"${cfg.modifier}+Shift+7" = "move container to workspace number 7";
"${cfg.modifier}+Shift+8" = "move container to workspace number 8";
"${cfg.modifier}+Shift+9" = "move container to workspace number 9";
"${cfg.modifier}+Shift+minus" = "move scratchpad";
"${cfg.modifier}+minus" = "scratchpad show";
# NOTE: to remove a window from scratch pad toggle floating
# https://i3wm.org/docs/userguide.html#_scratchpad
"${cfg.modifier}+Shift+minus" = "move scratchpad";
"${cfg.modifier}+minus" = "scratchpad show";
# NOTE: to remove a window from scratch pad toggle floating
# https://i3wm.org/docs/userguide.html#_scratchpad
"${cfg.modifier}+Shift+space" = "mode compose_mode";
"${cfg.modifier}+Shift+space" = "mode compose_mode";
};
wayland.windowManager.sway.extraConfig = ''
bindgesture swipe:3:right workspace prev
bindgesture swipe:3:left workspace next
'';
home.packages =
if config.wayland.windowManager.sway.enable
then
with pkgs; [
nwg-drawer
nwg-bar
]
else [];
config.wayland.windowManager.sway.extraConfig = ''
bindgesture swipe:3:right workspace prev
bindgesture swipe:3:left workspace next
'';
config.home.packages =
if config.wayland.windowManager.sway.enable
then
with pkgs; [
nwg-drawer
nwg-bar
]
else [];
services.kanshi = {
profiles = {
laptop-unplugged = {
outputs = [
scrnXps13
];
};
laptop-home-office = {
exec = [
"${pkgs.sway}/bin/swaymsg workspace 1, move workspace to ${scrnXps13.criteria}"
];
outputs = [
(scrnXps13 // {status = "disable";})
scrnDell43
scrnDell27
];
};
home-office = {
outputs = [
# TODO: is full res not supported via HDMI for some reason?
# Dell27's max res available is only 1080 wide, so we have to adjust the position
# of Dell43 to match
(scrnDell43 // {position = "1080,0";})
(scrnDell27 // {mode = "1920x1080@60.000Hz";})
];
config = lib.mkIf cfg.enable {
services.kanshi = {
profiles = {
laptop-unplugged = {
outputs = [
scrnXps13
];
};
laptop-home-office = {
exec = [
"${pkgs.sway}/bin/swaymsg workspace 1, move workspace to ${scrnXps13.criteria}"
];
outputs = [
(scrnXps13 // {status = "disable";})
scrnDell43
scrnDell27
];
};
home-office = {
outputs = [
# TODO: is full res not supported via HDMI for some reason?
# Dell27's max res available is only 1080 wide, so we have to adjust the position
# of Dell43 to match
(scrnDell43 // {position = "1080,0";})
(scrnDell27 // {mode = "1920x1080@60.000Hz";})
];
};
"cl-nix-lite": {
"locked": {
"lastModified": 1698901928,
"narHash": "sha256-gMHZybEVA3uMOBu1483gXfvUqpv4Qn7GJs3ZfCQYxpc=",
"owner": "hraban",
"repo": "cl-nix-lite",
"rev": "9ad861b45bda7f59eba5ad1b43565a03c7c58553",
"type": "github"
},
"original": {
"owner": "hraban",
"repo": "cl-nix-lite",
"type": "github"
}
},
"flake": false,
"locked": {
"lastModified": 1697816753,
"narHash": "sha256-40to80AEIyKCQI0xMKCeF5ePoIKTYgjVVCZeu4CnTxM=",
"owner": "hraban",
"repo": "flake-compat",
"rev": "6025bade1336a36014639bc3f67eacc853dab78f",
"type": "github"
},
"original": {
"owner": "hraban",
"ref": "fixed-output",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"mac-app-util": {
"inputs": {
"cl-nix-lite": "cl-nix-lite",
"flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1700594708,
"narHash": "sha256-STgLw72YbdZTUQDp/ZPJLUmrbvUzBQeMgLsUKQoI1lw=",
"owner": "hraban",
"repo": "mac-app-util",
"rev": "f48ce3fe87dbbca4d95edb7d93e676a4abdd0a46",
"type": "github"
},
"original": {
"owner": "hraban",
"repo": "mac-app-util",
"type": "github"
}
},
"rev": "e4ad989506ec7d71f7302cc3067abd82730a4beb",
"rev": "90e85bc7c1a6fc0760a94ace129d3a1c61c3d035",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs-firefox-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1701132216,
"narHash": "sha256-wN/c7788jyCmDAFA+hDekRyaDqpzfSm1FWIC2CTBtJ4=",
"owner": "bandithedoge",
"repo": "nixpkgs-firefox-darwin",
"rev": "492fbfdb15b22b9f5ff65b04dc18c5aa6b5beed6",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"owner": "bandithedoge",
"repo": "nixpkgs-firefox-darwin",
"locked": {
"lastModified": 1700390070,
"narHash": "sha256-de9KYi8rSJpqvBfNwscWdalIJXPo8NjdIZcEJum1mH0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e4ad989506ec7d71f7302cc3067abd82730a4beb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_5": {