From d2d403fef827d42aafa440d1c1d5c761156616b0 Mon Sep 17 00:00:00 2001 From: Kat Inskip Date: Mon, 20 Feb 2023 14:24:36 -0800 Subject: [PATCH] [SUMIREKO] Make sumireko bearable. --- common/fonts.nix | 9 ++++ darwin/common/overlay.nix | 13 +++++ darwin/wm/skhd.nix | 87 +++++++++++++++++++++++++++++++++ darwin/wm/spacebar.nix | 35 +++++++++++++ darwin/wm/yabai.nix | 50 +++++++++++++++++++ flake.lock | 73 ++++++++++++++++++--------- flake.nix | 8 +++ kat/common/docs.nix | 8 +++ kat/default.nix | 1 + kat/gui/waybar.nix | 25 ++++++---- kat/shell/starship.nix | 8 ++- kat/vscodium.nix | 28 +++++++++++ modules/home/waybar.nix | 4 +- nixos/roles/graphical/fonts.nix | 5 -- outputs.nix | 6 ++- overlays.nix | 12 +++-- shells/repo.nix | 2 +- systems/default.nix | 21 +++++--- systems/renko.nix | 2 +- systems/sumireko.nix | 29 ++++++----- 20 files changed, 359 insertions(+), 67 deletions(-) create mode 100644 common/fonts.nix create mode 100644 darwin/common/overlay.nix create mode 100644 darwin/wm/skhd.nix create mode 100644 darwin/wm/spacebar.nix create mode 100644 darwin/wm/yabai.nix create mode 100644 kat/common/docs.nix create mode 100644 kat/vscodium.nix diff --git a/common/fonts.nix b/common/fonts.nix new file mode 100644 index 00000000..46a2d4be --- /dev/null +++ b/common/fonts.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: { + fonts = { + fonts = with pkgs; [ + font-awesome + twitter-color-emoji + iosevka-bin + ]; + }; +} diff --git a/darwin/common/overlay.nix b/darwin/common/overlay.nix new file mode 100644 index 00000000..69284a16 --- /dev/null +++ b/darwin/common/overlay.nix @@ -0,0 +1,13 @@ +{ + inputs, + pkgs, + tree, + system, + ... +}: { + nixpkgs = { + overlays = [ + inputs.spacebar.overlay.${system} + ]; + }; +} diff --git a/darwin/wm/skhd.nix b/darwin/wm/skhd.nix new file mode 100644 index 00000000..41f079ea --- /dev/null +++ b/darwin/wm/skhd.nix @@ -0,0 +1,87 @@ +{std, ...}: let + inherit (std) string list; +in { + services.skhd = { + enable = true; + skhdConfig = let + bindWorkspace = key: workspace: '' + alt - ${key} : yabai -m space --focus ${workspace} + shift + alt - ${key} : yabai -m window --space ${workspace} + ''; + workspaceBindings = string.concat (list.map (v: bindWorkspace v "${v}") (list.map builtins.toString (list.range 1 9)) + ++ [ + ( + bindWorkspace "0" "10" + ) + ] + ++ list.imap (i: v: bindWorkspace v "${toString (10 + i + 1)}") (list.map (n: "f${builtins.toString n}") (std.list.range 1 12))); + in + workspaceBindings + + '' + # focus windows - ESDF + alt - s : yabai -m window --focus west + alt - d : yabai -m window --focus south + alt - e : yabai -m window --focus north + alt - f : yabai -m window --focus east + + # focus windows - arrows + 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 + + # move windows - ESDF + shift + alt - s : yabai -m window --swap west + shift + alt - d : yabai -m window --swap south + shift + alt - e : yabai -m window --swap north + shift + alt - f : yabai -m window --swap east + + # move windows - arrows + shift + alt - left : yabai -m window --swap west + shift + alt - down : yabai -m window --swap south + shift + alt - up : yabai -m window --swap north + shift + alt - right : yabai -m window --swap east + + # warp windows - ESDF + ctrl + alt - s : yabai -m window --warp west + ctrl + alt - d : yabai -m window --warp south + ctrl + alt - e : yabai -m window --warp north + ctrl + alt - f : yabai -m window --warp east + + # warp windows - arrows + ctrl + alt - left : yabai -m window --warp west + ctrl + alt - down : yabai -m window --warp south + ctrl + alt - up : yabai -m window --warp north + ctrl + alt - right : yabai -m window --warp east + + # process management - q + # unused base -> spotlight exists (cmd+space) + alt + shift - q : yabai -m window --close + alt + ctrl - q : wezterm + + # workspace prev/next - w + alt - w : yabai -m space --focus prev + alt + shift - w : yabai -m space --focus next + alt + ctrl - w : yabai -m window --display next + ctrl + shift - w : yabai -m window --display prev + + # split managent - a + alt - a : yabai -m window --toggle split + + # resizing, reloading - r + alt - r : yabai -m space --balance + + # layout handling (spaces) - t + alt - t : yabai -m space -- layout stack + alt + shift - t : yabai -m space -- layout bsp + alt + ctrl - t : yabai -m space -- layout float + + # layout handling (windows) - p + alt - p : yabai -m window --toggle float + alt + shift - p : yabai -m window --toggle stack + + # workspace history switching - tab + alt + ctrl - tab: yabai -m space --focus recent + ''; + }; +} diff --git a/darwin/wm/spacebar.nix b/darwin/wm/spacebar.nix new file mode 100644 index 00000000..ffac22cf --- /dev/null +++ b/darwin/wm/spacebar.nix @@ -0,0 +1,35 @@ +{pkgs, ...}: { + services.spacebar = { + enable = true; + package = pkgs.spacebar; + config = { + # bar characteristics + position = "top"; + display = "main"; + height = "26"; + + # modules + spaces = "on"; + space_icon_strip = "       8 9 10 11 12 13 14 15 16 17 18 19 20 21 22"; + spaces_for_all_displays = "on"; + title = "off"; + clock = "on"; + clock_icon = ""; + clock_format = ''"%F %R %Z"''; + power = "on"; + dnd = "on"; + dnd_icon = ""; + power_icon_strip = " "; + + # display + padding_left = 20; + padding_right = 20; + spacing_left = 15; + spacing_right = 15; + + # text + text_font = ''"Iosevka:Regular:12.0"''; + icon_font = ''"Font Awesome 6 Free:Solid:12.0"''; + }; + }; +} diff --git a/darwin/wm/yabai.nix b/darwin/wm/yabai.nix new file mode 100644 index 00000000..2efd2c61 --- /dev/null +++ b/darwin/wm/yabai.nix @@ -0,0 +1,50 @@ +_: { + services.yabai = { + enable = true; + enableScriptingAddition = true; + config = { + # layout + layout = "bsp"; + window_origin_display = "focused"; + split_ratio = "0.50"; + mouse_modifier = "alt"; + mouse_action1 = "move"; + mouse_action2 = "resize"; + mouse_drop_action = "stack"; + external_bar = "main:26:0"; + + # window border + window_border = "on"; + window_border_width = 3; + window_border_hidpi = "on"; + + # focus + focus_follows_mouse = "autoraise"; + mouse_follows_focus = "off"; + + # window + window_placement = "second_child"; + window_border_blur = "on"; + + # paddings + top_padding = 10; + bottom_padding = 10; + left_padding = 10; + right_padding = 10; + window_gap = 10; + }; + + extraConfig = '' + # rules + yabai -m rule --add app='System Preferences' manage=off + yabai -m rule --add app='Yubico Authenticator' manage=off + yabai -m rule --add app='YubiKey Manager' manage=off + yabai -m rule --add app='YubiKey Personalization Tool' manage=off + + # signals + yabai -m signal --add event=window_focused action="sketchybar --trigger window_focus" + yabai -m signal --add event=window_created action="sketchybar --trigger windows_on_spaces" + yabai -m signal --add event=window_destroyed action="sketchybar --trigger windows_on_spaces" + ''; + }; +} diff --git a/flake.lock b/flake.lock index fd1a17fe..9b110e24 100644 --- a/flake.lock +++ b/flake.lock @@ -24,11 +24,11 @@ "arcexprs": { "flake": false, "locked": { - "lastModified": 1676227420, - "narHash": "sha256-7l3pbbRRYZAhj5/g8pmtaRg37299KDkyni5YykQn+fw=", + "lastModified": 1675450557, + "narHash": "sha256-0Syp+pnuTCjAM9aJAX3DIt6qbAvp/wNeoaGeBn5zmEM=", "owner": "arcnmx", "repo": "nixexprs", - "rev": "3e12ce19adbe3c5e1d87d07bc05abad46877a84e", + "rev": "4d4f3a24770be3e60b69cfc191b67f7a1ecbd6a8", "type": "github" }, "original": { @@ -126,11 +126,11 @@ ] }, "locked": { - "lastModified": 1675935446, - "narHash": "sha256-WajulTn7QdwC7QuXRBavrANuIXE5z+08EdxdRw1qsNs=", + "lastModified": 1675462931, + "narHash": "sha256-JiOUSERBtA1lN/s9YTKGZoZ3XUicHDwr+C8swaPSh3M=", "owner": "nix-community", "repo": "home-manager", - "rev": "2dce7f1a55e785a22d61668516df62899278c9e4", + "rev": "e2c1756e3ae001ca8696912016dd31cb1503ccf3", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1676172252, - "narHash": "sha256-Q5yJPpgbvOTgB0NQTJmlx3di1Sj5QQhSrjv38u6MzsQ=", + "lastModified": 1674962474, + "narHash": "sha256-qEXdgW5fnMSdQwP1zQYa0fVtI0f3G1f2qNRjUEherCs=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "89e3b689e0ae9bac4c6cdc24d1085d81baeebde4", + "rev": "a385f6192f5471c4cebeeb0d2e966b5ccf123df5", "type": "github" }, "original": { @@ -188,11 +188,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1675933606, - "narHash": "sha256-y427VhPQHOKkYvkc9MMsL/2R7M11rQxzsRdRLM3htx8=", + "lastModified": 1676908974, + "narHash": "sha256-o7sJTBeumorVIM/b1b/Q4q+WJn8Rou5kx8DEBbKOZJI=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "44ae00e02e8036a66c08f4decdece7e3bbbefee2", + "rev": "157e1e4b127b5cb37822be247e8ec37a7f475270", "type": "github" }, "original": { @@ -203,11 +203,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1676300157, - "narHash": "sha256-1HjRzfp6LOLfcj/HJHdVKWAkX9QRAouoh6AjzJiIerU=", + "lastModified": 1675454231, + "narHash": "sha256-5rgcWq1nFWlbR3NsLqY7i/7358uhkSeMQJ/LEHk3BWA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "545c7a31e5dedea4a6d372712a18e00ce097d462", + "rev": "06999209d7a0043d4372e38f57cffae00223d592", "type": "github" }, "original": { @@ -220,11 +220,11 @@ "pypi-deps-db": { "flake": false, "locked": { - "lastModified": 1676367706, - "narHash": "sha256-FY7MKi/Q6IO4hlYiGqVCrXAg+/VJ/pIVS+ZfqeonOx8=", + "lastModified": 1675544670, + "narHash": "sha256-CV3qfT4CdMR9CbyPmbJXMHNgLK0p+62nwM2/yF8QHS0=", "owner": "DavHau", "repo": "pypi-deps-db", - "rev": "1974e03fe3ee9d7246e9af3bedbea72e3ea0535c", + "rev": "f822ecb6e8e27ac4e1c34218536658d6be0da51f", "type": "github" }, "original": { @@ -273,6 +273,7 @@ "pypi-deps-db": "pypi-deps-db", "ragenix": "ragenix", "scalpel": "scalpel", + "spacebar": "spacebar", "std": "std", "tree": "tree", "utils": "utils", @@ -327,6 +328,30 @@ "type": "github" } }, + "spacebar": { + "inputs": { + "flake-utils": [ + "utils" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1644858436, + "narHash": "sha256-4LiG43kPZtsm7SQ/28RaGMpYsDshCaGvc1mouPG3jFM=", + "owner": "cmacrae", + "repo": "spacebar", + "rev": "79257bae525059be5230e86df96b3b3f1a3ed0a7", + "type": "github" + }, + "original": { + "owner": "cmacrae", + "ref": "v1.4.0", + "repo": "spacebar", + "type": "github" + } + }, "std": { "locked": { "lastModified": 1671250799, @@ -367,11 +392,11 @@ }, "utils": { "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "type": "github" }, "original": { @@ -393,11 +418,11 @@ ] }, "locked": { - "lastModified": 1676381420, - "narHash": "sha256-aDRnfGrk/xi7zkuterN78p8/wdM5Iy6vz74uqd/JFWw=", + "lastModified": 1675351082, + "narHash": "sha256-4Oi4k4Qp1vOvKoACHDcz0xiVj7DuMaCL57fP3W77eA0=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "4640199aeafcbb63cfbe8318bdf06f4402134f66", + "rev": "52cadf92e1bfdef235d5cd77b9a4b2ab848baa8a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 73536520..3683b4e6 100644 --- a/flake.nix +++ b/flake.nix @@ -36,6 +36,14 @@ url = "github:lnl7/nix-darwin/master"; inputs.nixpkgs.follows = "nixpkgs"; }; + # status bar + spacebar = { + url = "github:cmacrae/spacebar/v1.4.0"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "utils"; + }; + }; # WSL host wsl = { url = "github:nix-community/NixOS-WSL"; diff --git a/kat/common/docs.nix b/kat/common/docs.nix new file mode 100644 index 00000000..a5be1a52 --- /dev/null +++ b/kat/common/docs.nix @@ -0,0 +1,8 @@ +_: { + manual = { + html.enable = false; + json.enable = false; + manpages.enable = false; + manual.manpages.enable = false; + }; +} diff --git a/kat/default.nix b/kat/default.nix index f3c6c11a..8c5f532f 100644 --- a/kat/default.nix +++ b/kat/default.nix @@ -33,6 +33,7 @@ in work = { imports = with dirImports; [ wezterm + vscodium gpg ]; }; diff --git a/kat/gui/waybar.nix b/kat/gui/waybar.nix index 879ef836..c1d300e2 100644 --- a/kat/gui/waybar.nix +++ b/kat/gui/waybar.nix @@ -1,11 +1,17 @@ -{ kittywitch, pkgs, ... }: - { + kittywitch, + pkgs, + ... +}: { programs.waybar = { enable = true; style = let - template = kittywitch.sassTemplate { name = "waybar-style"; src = ./waybar.sass; }; - in template.source; + template = kittywitch.sassTemplate { + name = "waybar-style"; + src = ./waybar.sass; + }; + in + template.source; systemd.enable = true; settings.main = { layer = "top"; @@ -33,11 +39,12 @@ "sway/workspaces" = { format = "{icon}"; format-icons = { - "1" = ""; - "2" = ""; - "3" = ""; - "4" = ""; - "5" = ""; + # https://fontawesome.com/v5/cheatsheet + "1" = ""; # chats + "2" = ""; # cloud (browser) + "3" = ""; # music + "4" = ""; # brain + "5" = ""; # terminal >_ }; }; "sway/window" = { diff --git a/kat/shell/starship.nix b/kat/shell/starship.nix index bc08f023..64007060 100644 --- a/kat/shell/starship.nix +++ b/kat/shell/starship.nix @@ -1,6 +1,12 @@ -_: { +{pkgs, ...}: { programs.starship = { enable = true; enableZshIntegration = true; + settings = { + "custom.kubeprompt" = { + command = ''${pkgs.kubeprompt}/bin/kubeprompt -f default''; + when = ''test "$KUBECONFIG" ''; + }; + }; }; } diff --git a/kat/vscodium.nix b/kat/vscodium.nix new file mode 100644 index 00000000..45903fb7 --- /dev/null +++ b/kat/vscodium.nix @@ -0,0 +1,28 @@ +{pkgs, ...}: { + programs.vscode = { + enable = true; + package = pkgs.vscodium; + extensions = with pkgs.vscode-extensions; [ + kamadorueda.alejandra + mkhl.direnv + mhutchie.git-graph + golang.go + hashicorp.terraform + arrterian.nix-env-selector + jnoortheen.nix-ide + ]; + userSettings = { + "nix.enableLanguageServer" = true; + "workbench.colorTheme" = "Quiet Light"; + "[nix]" = { + "editor.defaultFormatter" = "kamadorueda.alejandra"; + "editor.formatOnPaste" = true; + "editor.formatOnSave" = true; + "editor.formatOnType" = false; + }; + "alejandra.program" = "${pkgs.alejandra}/bin/alejandra"; + "editor.fontFamily" = ''"Iosevka", "Font Awesome 6 Free", "Font Awesome 6 Brands"''; + "editor.fontLigatures" = true; + }; + }; +} diff --git a/modules/home/waybar.nix b/modules/home/waybar.nix index 8fc6677b..d1dc6613 100644 --- a/modules/home/waybar.nix +++ b/modules/home/waybar.nix @@ -1,4 +1,6 @@ -{ config, ... }: { +{ config, lib, ... }: let + inherit (lib.modules) mkIf; +in mkIf (config.programs.waybar.enable) { systemd.user.services.waybar.Unit.X-Restart-Triggers = [ (builtins.toString config.programs.waybar.style) ]; diff --git a/nixos/roles/graphical/fonts.nix b/nixos/roles/graphical/fonts.nix index 14e9951f..bb1e77b0 100644 --- a/nixos/roles/graphical/fonts.nix +++ b/nixos/roles/graphical/fonts.nix @@ -1,10 +1,5 @@ { pkgs, ... }: { fonts = { - fonts = with pkgs; [ - font-awesome - twitter-color-emoji - iosevka-bin - ]; enableDefaultFonts = true; fontDir.enable = true; fontconfig = { diff --git a/outputs.nix b/outputs.nix index 52d3e999..8cf84025 100644 --- a/outputs.nix +++ b/outputs.nix @@ -2,7 +2,7 @@ std = import ./std.nix {inherit inputs;}; tree = import ./tree.nix {inherit inputs pkgs;}; inherit (inputs.nixpkgs) lib; - overlay = import ./packages {inherit inputs tree lib std;}; + overlay = import ./packages {inherit inputs tree;}; systems = import ./systems {inherit inputs tree lib std;}; shells = import ./shells {inherit inputs tree lib std pkgs;}; inherit (import ./pkgs.nix {inherit inputs tree overlay;}) pkgs; @@ -13,4 +13,6 @@ in { inherit inputs tree std pkgs checks formatter lib; legacyPackages = pkgs; - } // systems // shells + } + // systems + // shells diff --git a/overlays.nix b/overlays.nix index 1fa1deb5..f11d4f6c 100644 --- a/overlays.nix +++ b/overlays.nix @@ -1,6 +1,12 @@ -{inputs, tree, ...}: [ +{ + inputs, + tree, + ... +}: +[ inputs.deploy-rs.overlay - (import tree.packages.default { inherit inputs tree; }) -] ++ map (path: import "${path}/overlay.nix") [ + (import tree.packages.default {inherit inputs tree;}) +] +++ map (path: import "${path}/overlay.nix") [ inputs.arcexprs ] diff --git a/shells/repo.nix b/shells/repo.nix index 1e3cd25c..508d7153 100644 --- a/shells/repo.nix +++ b/shells/repo.nix @@ -20,7 +20,7 @@ with pkgs; let deploy-rs.deploy-rs # deployment system ] ++ set.values (set.map (name: _: (pkgs.writeShellScriptBin "${name}-rebuild" '' - darwin-rebuild switch --flake $REPO_ROOT#${name} + darwin-rebuild switch --flake $REPO_ROOT#${name} $@ '')) repo.darwinConfigurations); shellHook = '' diff --git a/systems/default.nix b/systems/default.nix index c3ea808c..7258e117 100644 --- a/systems/default.nix +++ b/systems/default.nix @@ -79,14 +79,18 @@ builder = { nixos = let - lib = inputs.nixpkgs.lib.extend (self: super: import (inputs.arcexprs + "/lib") { - inherit super; - lib = self; - isOverlayLib = true; - }); - in args: lib.nixosSystem ({ - inherit lib; - } // args); + lib = inputs.nixpkgs.lib.extend (self: super: + import (inputs.arcexprs + "/lib") { + inherit super; + lib = self; + isOverlayLib = true; + }); + in + args: + lib.nixosSystem ({ + inherit lib; + } + // args); darwin = inputs.darwin.lib.darwinSystem; macos = inputs.darwin.lib.darwinSystem; } @@ -95,6 +99,7 @@ { inherit machine; systemType = config.folder; + system = config.system; } // defaultSpecialArgs; }; diff --git a/systems/renko.nix b/systems/renko.nix index 97bd8497..ddbf670a 100644 --- a/systems/renko.nix +++ b/systems/renko.nix @@ -4,7 +4,7 @@ _: let in { imports = with tree; [ nixos.rosetta - nixos.bootable + nixos.roles.bootable ]; boot = { diff --git a/systems/sumireko.nix b/systems/sumireko.nix index 727fdbf3..60ad4c3b 100644 --- a/systems/sumireko.nix +++ b/systems/sumireko.nix @@ -1,7 +1,12 @@ _: let - hostConfig = {tree, pkgs, ...}: { + hostConfig = { + tree, + pkgs, + ... + }: { imports = with tree; [ kat.work + darwin.wm darwin.distributed ]; @@ -10,16 +15,16 @@ _: let distributed.systems.renko.preference = 5; environment.systemPackages = with pkgs; [ - fd # fd, better fine! - ripgrep # rg, better grep! - go # Required for pulumi - pulumi-bin # Infrastructure as code - deadnix # dead-code scanner - alejandra # code formatter - statix # anti-pattern finder - deploy-rs.deploy-rs # deployment system - rnix-lsp # vscode nix extensions - terraform # terraform + fd # fd, better fine! + ripgrep # rg, better grep! + go # Required for pulumi + pulumi-bin # Infrastructure as code + deadnix # dead-code scanner + alejandra # code formatter + statix # anti-pattern finder + deploy-rs.deploy-rs # deployment system + rnix-lsp # vscode nix extensions + terraform # terraform ]; homebrew = { @@ -28,6 +33,7 @@ _: let "gnupg" "pinentry-mac" "awscurl" + "helm" ]; casks = [ "utm" @@ -48,7 +54,6 @@ _: let "cyberduck" "docker" "pycharm-ce" - "vscodium" "slack" "boop" "obsidian"