From d702e2cb240f6274ce6077024ed8bead4f86345e Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Thu, 5 Oct 2023 01:02:31 -0500 Subject: [PATCH] Theming --- flake.lock | 51 -- flake.nix | 126 ++- home/default.nix | 1853 ++++++++++++++++++++++++---------------- home/linux.nix | 1409 ++++++++++++++++++------------ modules/nixos/sway.nix | 30 +- 5 files changed, 2066 insertions(+), 1403 deletions(-) diff --git a/flake.lock b/flake.lock index d9a0cf7..d307931 100644 --- a/flake.lock +++ b/flake.lock @@ -19,22 +19,6 @@ "url": "ssh://gitea@git.lyte.dev/lytedev/api.lyte.dev.git" } }, - "base16-schemes": { - "flake": false, - "locked": { - "lastModified": 1689473676, - "narHash": "sha256-L0RhUr9+W5EPWBpLcmkKpUeCEWRs/kLzVMF3Vao2ZU0=", - "owner": "tinted-theming", - "repo": "base16-schemes", - "rev": "d95123ca6377cd849cfdce92c0a24406b0c6a789", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-schemes", - "type": "github" - } - }, "crane": { "inputs": { "flake-compat": "flake-compat", @@ -239,25 +223,6 @@ "type": "github" } }, - "nix-colors": { - "inputs": { - "base16-schemes": "base16-schemes", - "nixpkgs-lib": "nixpkgs-lib" - }, - "locked": { - "lastModified": 1695388192, - "narHash": "sha256-2jelpE7xK+4M7jZNyWL7QYOYegQLYBDQS5bvdo8XRUQ=", - "owner": "misterio77", - "repo": "nix-colors", - "rev": "37227f274b34a3b51649166deb94ce7fec2c6a4c", - "type": "github" - }, - "original": { - "owner": "misterio77", - "repo": "nix-colors", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1690026219, @@ -274,21 +239,6 @@ "type": "github" } }, - "nixpkgs-lib": { - "locked": { - "lastModified": 1694911725, - "narHash": "sha256-8YqI+YU1DGclEjHsnrrGfqsQg3Wyga1DfTbJrN3Ud0c=", - "owner": "nix-community", - "repo": "nixpkgs.lib", - "rev": "819180647f428a3826bfc917a54449da1e532ce0", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixpkgs.lib", - "type": "github" - } - }, "nixpkgs-stable": { "locked": { "lastModified": 1696039360, @@ -425,7 +375,6 @@ "helix": "helix", "home-manager": "home-manager", "hyprland": "hyprland", - "nix-colors": "nix-colors", "nixpkgs-stable": "nixpkgs-stable", "nixpkgs-unstable": "nixpkgs-unstable", "sops-nix": "sops-nix" diff --git a/flake.nix b/flake.nix index 36b050f..0679478 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,6 @@ sops-nix.url = "github:Mic92/sops-nix"; hardware.url = "github:nixos/nixos-hardware"; hyprland.url = "github:hyprwm/Hyprland"; - nix-colors.url = "github:misterio77/nix-colors"; api-lyte-dev.url = "git+ssh://gitea@git.lyte.dev/lytedev/api.lyte.dev.git"; @@ -25,7 +24,6 @@ nixpkgs-stable, nixpkgs-unstable, home-manager, - nix-colors, ... } @ inputs: let inherit (self) outputs; @@ -38,8 +36,120 @@ "x86_64-darwin" ]; + color-schemes = let + mkColorScheme = scheme @ { + scheme-name, + bg, + bg2, + bg3, + bg4, + bg5, + fg, + fg2, + fg3, + fgdim, + # pink, + purple, + red, + # orange, + yellow, + green, + teal, + blue, + ... + }: let + base = + { + # aliases? + text = fg; + primary = blue; + urgent = red; + + # blacks + "0" = bg4; + "8" = bg5; + + "1" = red; + "9" = red; + "2" = green; + "10" = green; + "3" = yellow; + "11" = yellow; + "4" = blue; + "12" = blue; + "5" = purple; + "13" = purple; + "6" = teal; + "14" = teal; + + # whites + "7" = fg2; + "15" = fg3; + } + // scheme; + in + { + withHashPrefix = inputs.nixpkgs-unstable.lib.mapAttrs (_: value: "#${value}") base; + } + // base; + in { + donokai = mkColorScheme { + scheme-name = "donokai"; + bg = "111111"; + bg2 = "181818"; + bg3 = "222222"; + bg4 = "292929"; + bg5 = "333333"; + + fg = "f8f8f8"; + fg2 = "d8d8d8"; + fg3 = "c8c8c8"; + fgdim = "666666"; + + red = "f92672"; + green = "a6e22e"; + yellow = "f4bf75"; + blue = "66d9ef"; + purple = "ae81ff"; + teal = "a1efe4"; + # orange = "fab387"; + }; + catppuccin-mocha-sapphire = mkColorScheme { + scheme-name = "catppuccin-mocha-sapphire"; + bg = "1e1e2e"; + bg2 = "181825"; + bg3 = "313244"; + bg4 = "45475a"; + bg5 = "585b70"; + + fg = "cdd6f4"; + fg2 = "bac2de"; + fg3 = "a6adc8"; + fgdim = "6c7086"; + + # pink = "f5e0dc"; + purple = "cba6f7"; + red = "f38ba8"; + # orange = "fab387"; + # yellow = "f9e2af"; + yellow = "fab387"; + green = "a6e3a1"; + teal = "94e2d5"; + blue = "74c7ec"; + }; + }; + + colors = color-schemes.catppuccin-mocha-sapphire; + font = { + name = "IosevkaLyteTerm"; + size = 12; + }; + + linuxHomeManagerModules = [./home ./home/linux.nix]; + forAllSystems = nixpkgs-stable.lib.genAttrs systems; in { + # TODO: nix-color integration? # Your custom packages # Acessible through 'nix build', 'nix shell', etc packages = forAllSystems (system: import ./pkgs nixpkgs-stable.legacyPackages.${system}); @@ -66,7 +176,7 @@ cb { system = system; specialArgs = { - inherit inputs outputs system nix-colors; + inherit inputs outputs system colors font; flake = self; }; modules = @@ -76,14 +186,12 @@ ] ++ modules ++ [ - # all nixos hosts should use our home manager config - # TODO: unify with the module list in outputs.homeConfigurations.daniel inputs.home-manager.nixosModules.home-manager { home-manager = { - extraSpecialArgs = {inherit inputs outputs system nix-colors;}; + extraSpecialArgs = {inherit inputs outputs system colors font;}; users.daniel = { - imports = [./home ./home/linux.nix]; + imports = linuxHomeManagerModules; }; }; } @@ -108,11 +216,11 @@ mkHome = system: modules: home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs-unstable.legacyPackages.${system}; - extraSpecialArgs = {inherit inputs outputs system nix-colors;}; + extraSpecialArgs = {inherit inputs outputs system colors font;}; modules = modules; }; in { - "daniel" = mkHome "x86_64-linux" [./home ./home/linux.nix]; + "daniel" = mkHome "x86_64-linux" linuxHomeManagerModules; "daniel.flanagan" = mkHome "aarch64-darwin" [./home]; }; diff --git a/home/default.nix b/home/default.nix index f280409..121d1fa 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,48 +1,52 @@ { + font, pkgs, lib, system, inputs, - nix-colors, + colors, ... }: let email = "daniel@lyte.dev"; name = "Daniel Flanagan"; in { # TODO: email access? - # accounts.email.accounts = { - # google = { - # address = "wraithx2@gmail.com"; - # }; - # }; + /* + accounts.email.accounts = { + google = { + address = "wraithx2@gmail.com"; + }; + }; + */ # TODO: fonts? right now they are only handled at the nixos-level (desktop-usage module) # TODO: wallpaper? imports = [ - nix-colors.homeManagerModules.default + # nix-colors.homeManagerModules.default ]; - colorScheme = nix-colors.colorSchemes.catppuccin-mocha; # copied here for easy lookups: # https://github.com/tinted-theming/base16-schemes/blob/main/catppuccin-mocha.yaml - # base00: "1e1e2e" # base - # base01: "181825" # mantle - # base02: "313244" # surface0 - # base03: "45475a" # surface1 - # base04: "585b70" # surface2 - # base05: "cdd6f4" # text - # base06: "f5e0dc" # rosewater - # base07: "b4befe" # lavender - # base08: "f38ba8" # red - # base09: "fab387" # peach - # base0A: "f9e2af" # yellow - # base0B: "a6e3a1" # green - # base0C: "94e2d5" # teal - # base0D: "89b4fa" # blue - # base0E: "cba6f7" # mauve - # base0F: "f2cdcd" # flamingo + /* + base00: "1e1e2e" # base + base01: "181825" # mantle + base02: "313244" # surface0 + base03: "45475a" # surface1 + base04: "585b70" # surface2 + base05: "cdd6f4" # text + base06: "f5e0dc" # rosewater + base07: "b4befe" # lavender + base08: "f38ba8" # red + base09: "fab387" # peach + base0A: "f9e2af" # yellow + base0B: "a6e3a1" # green + base0C: "94e2d5" # teal + base0D: "89b4fa" # blue + base0E: "cba6f7" # mauve + base0F: "f2cdcd" # flamingo + */ home = { username = lib.mkDefault "daniel"; @@ -64,783 +68,1134 @@ in { paths = [./scripts/common]; }) ]; + }; - file = { - ".iex.exs" = { - enable = true; - text = '' - Application.put_env(:elixir, :ansi_enabled, true) + home.file.".iex.exs" = { + enable = true; + text = '' + Application.put_env(:elixir, :ansi_enabled, true) - # PROTIP: to break, `#iex:break` + # PROTIP: to break, `#iex:break` - IEx.configure( - colors: [enabled: true], - inspect: [ - pretty: true, - printable_limit: :infinity, - limit: :infinity - ], - default_prompt: - [ - # ANSI CHA, move cursor to column 1 - "\e[G", - :magenta, - # IEx prompt variable - "%prefix", - "#", + IEx.configure( + colors: [enabled: true], + inspect: [ + pretty: true, + printable_limit: :infinity, + limit: :infinity + ], + default_prompt: + [ + # ANSI CHA, move cursor to column 1 + "\e[G", + :magenta, # IEx prompt variable - "%counter", - # plain string - ">", - :reset - ] - |> IO.ANSI.format() - |> IO.chardata_to_string() - ) - ''; + "%prefix", + "#", + # IEx prompt variable + "%counter", + # plain string + ">", + :reset + ] + |> IO.ANSI.format() + |> IO.chardata_to_string() + ) + ''; + }; + + programs.password-store = { + enable = true; + package = pkgs.pass.withExtensions (exts: [exts.pass-otp]); + }; + + programs.git = { + enable = true; + + userEmail = email; + userName = name; + + delta = { + enable = true; + options = {}; + }; + + lfs = { + enable = true; + }; + + signing = { + signByDefault = true; + key = "daniel@lyte.dev"; + }; + + aliases = { + a = "add -A"; + ac = "commit -a"; + b = "rev-parse --symbolic-full-name HEAD"; + c = "commit"; + cm = "commit -m"; + cnv = "commit --no-verify"; + co = "checkout"; + d = "diff"; + ds = "diff --staged"; + dt = "difftool"; + f = "fetch"; + l = "log --graph --abbrev-commit --decorate --oneline --all"; + plainlog = " log --pretty=format:'%h %ad%x09%an%x09%s' --date=short --decorate"; + ls = "ls-files"; + mm = "merge master"; + p = "push"; + pf = "push --force-with-lease"; + pl = "pull"; + rim = "rebase -i master"; + s = "status"; + }; + + extraConfig = { + push = { + autoSetupRemote = true; + }; + + branch = { + autoSetupMerge = true; + }; + + sendemail = { + smtpserver = "smtp.mailgun.org"; + smtpuser = "daniel@lyte.dev"; + smtrpencryption = "tls"; + smtpserverport = 587; + }; + + url = { + # TODO: how to have per-machine not-in-git configuration? + "git@git.hq.bill.com:" = { + insteadOf = "https://git.hq.bill.com"; + }; }; }; }; - programs = { - password-store = { - enable = true; - package = pkgs.pass.withExtensions (exts: [exts.pass-otp]); - }; + programs.gitui = { + enable = true; + }; - git = { - enable = true; - - userEmail = email; - userName = name; - - delta = { - enable = true; - options = {}; - }; - - lfs = { - enable = true; - }; - - signing = { - signByDefault = true; - key = "daniel@lyte.dev"; - }; - - aliases = { - a = "add -A"; - ac = "commit -a"; - b = "rev-parse --symbolic-full-name HEAD"; - c = "commit"; - cm = "commit -m"; - cnv = "commit --no-verify"; - co = "checkout"; - d = "diff"; - ds = "diff --staged"; - dt = "difftool"; - f = "fetch"; - l = "log --graph --abbrev-commit --decorate --oneline --all"; - plainlog = " log --pretty=format:'%h %ad%x09%an%x09%s' --date=short --decorate"; - ls = "ls-files"; - mm = "merge master"; - p = "push"; - pf = "push --force-with-lease"; - pl = "pull"; - rim = "rebase -i master"; - s = "status"; - }; - - extraConfig = { - push = { - autoSetupRemote = true; + programs.helix = { + enable = true; + package = inputs.helix.packages.${system}.helix; + languages = { + language-server = { + lexical = { + command = "lexical"; + args = ["start"]; }; - branch = { - autoSetupMerge = true; + next-ls = { + command = "next-ls"; + args = ["--stdout"]; }; - sendemail = { - smtpserver = "smtp.mailgun.org"; - smtpuser = "daniel@lyte.dev"; - smtrpencryption = "tls"; - smtpserverport = 587; - }; - - url = { - # TODO: how to have per-machine not-in-git configuration? - "git@git.hq.bill.com:" = { - insteadOf = "https://git.hq.bill.com"; + deno = { + command = "deno"; + args = ["lsp"]; + config = { + enable = true; + lint = true; + unstable = true; }; }; }; - }; - gitui = { - enable = true; - }; - - helix = { - enable = true; - package = inputs.helix.packages.${system}.helix; - languages = { - language-server = { - lexical = { - command = "lexical"; - args = ["start"]; + language = [ + { + name = "elixir"; + language-servers = ["elixir-ls"]; # "lexical" "next-ls" + auto-format = true; + } + { + name = "html"; + auto-format = false; + } + { + name = "nix"; + auto-format = true; + formatter = { + command = "alejandra"; + args = ["-"]; }; - - next-ls = { - command = "next-ls"; - args = ["--stdout"]; + } + { + name = "fish"; + auto-format = true; + indent = { + tab-width = 2; + unit = "\t"; }; + } - deno = { + { + name = "javascript"; + language-id = "javascript"; + grammar = "javascript"; + scope = "source.js"; + injection-regex = "^(js|javascript)$"; + file-types = ["js" "mjs"]; + shebangs = ["deno"]; + language-servers = ["deno"]; + roots = ["deno.jsonc" "deno.json"]; + formatter = { command = "deno"; - args = ["lsp"]; - config = { - enable = true; - lint = true; - unstable = true; - }; + args = ["fmt"]; }; + auto-format = true; + comment-token = "//"; + indent = { + tab-width = 2; + unit = "\t"; + }; + } + + { + name = "typescript"; + language-id = "typescript"; + grammar = "typescript"; + scope = "source.ts"; + injection-regex = "^(ts|typescript)$"; + file-types = ["ts"]; + shebangs = ["deno"]; + language-servers = ["deno"]; + roots = ["deno.jsonc" "deno.json"]; + formatter = { + command = "deno"; + args = ["fmt"]; + }; + auto-format = true; + comment-token = "//"; + indent = { + tab-width = 2; + unit = "\t"; + }; + } + + { + name = "jsonc"; + language-id = "json"; + grammar = "jsonc"; + scope = "source.jsonc"; + injection-regex = "^(jsonc)$"; + roots = ["deno.jsonc" "deno.json"]; + file-types = ["jsonc"]; + language-servers = ["deno"]; + indent = { + tab-width = 2; + unit = " "; + }; + auto-format = true; + } + + /* + [[language]] + name = "jsx" + scope = "source.jsx" + injection-regex = "jsx" + file-types = ["jsx"] + shebangs = ["deno", "node"] + roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] + comment-token = "//" + config = { enable = true, lint = true, unstable = true } + language-server = { command = "deno", args = ["lsp"], language-id = "javascriptreact" } + indent = { tab-width = 2, unit = " " } + grammar = "javascript" + auto-format = true + + [[language]] + name = "tsx" + scope = "source.tsx" + injection-regex = "^(tsx)$" # |typescript + file-types = ["tsx"] + shebangs = ["deno", "node"] + roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] + config = { enable = true, lint = true, unstable = true } + language-server = { command = "deno", args = ["lsp"], language-id = "typescriptreact" } + indent = { tab-width = 2, unit = " " } + auto-format = true + + [[language]] + name = "jsonc" + scope = "source.jsonc" + injection-regex = "^(jsonc)$" + file-types = ["jsonc"] + shebangs = ["deno", "node"] + roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] + config = { enable = true, lint = true, unstable = true } + language-server = { command = "deno", args = ["lsp"], language-id = "jsonc" } + indent = { tab-width = 2, unit = " " } + auto-format = true + */ + ]; + }; + + settings = { + theme = "custom"; + + editor = { + soft-wrap.enable = true; + auto-pairs = false; + auto-save = false; + completion-trigger-len = 1; + color-modes = false; + bufferline = "multiple"; + scrolloff = 8; + rulers = [80 120]; + cursorline = true; + + cursor-shape = { + normal = "block"; + insert = "bar"; + select = "underline"; }; - language = [ - { - name = "elixir"; - language-servers = ["elixir-ls"]; # "lexical" "next-ls" - auto-format = true; - } - { - name = "html"; - auto-format = false; - } - { - name = "nix"; - auto-format = true; - formatter = { - command = "alejandra"; - args = ["-"]; - }; - } - { - name = "fish"; - auto-format = true; - indent = { - tab-width = 2; - unit = "\t"; - }; - } - - { - name = "javascript"; - language-id = "javascript"; - grammar = "javascript"; - scope = "source.js"; - injection-regex = "^(js|javascript)$"; - file-types = ["js" "mjs"]; - shebangs = ["deno"]; - language-servers = ["deno"]; - roots = ["deno.jsonc" "deno.json"]; - formatter = { - command = "deno"; - args = ["fmt"]; - }; - auto-format = true; - comment-token = "//"; - indent = { - tab-width = 2; - unit = "\t"; - }; - } - - { - name = "typescript"; - language-id = "typescript"; - grammar = "typescript"; - scope = "source.ts"; - injection-regex = "^(ts|typescript)$"; - file-types = ["ts"]; - shebangs = ["deno"]; - language-servers = ["deno"]; - roots = ["deno.jsonc" "deno.json"]; - formatter = { - command = "deno"; - args = ["fmt"]; - }; - auto-format = true; - comment-token = "//"; - indent = { - tab-width = 2; - unit = "\t"; - }; - } - - { - name = "jsonc"; - language-id = "json"; - grammar = "jsonc"; - scope = "source.jsonc"; - injection-regex = "^(jsonc)$"; - roots = ["deno.jsonc" "deno.json"]; - file-types = ["jsonc"]; - language-servers = ["deno"]; - indent = { - tab-width = 2; - unit = " "; - }; - auto-format = true; - } - - # [[language]] - # name = "jsx" - # scope = "source.jsx" - # injection-regex = "jsx" - # file-types = ["jsx"] - # shebangs = ["deno", "node"] - # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] - # comment-token = "//" - # config = { enable = true, lint = true, unstable = true } - # language-server = { command = "deno", args = ["lsp"], language-id = "javascriptreact" } - # indent = { tab-width = 2, unit = " " } - # grammar = "javascript" - # auto-format = true - - # [[language]] - # name = "tsx" - # scope = "source.tsx" - # injection-regex = "^(tsx)$" # |typescript - # file-types = ["tsx"] - # shebangs = ["deno", "node"] - # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] - # config = { enable = true, lint = true, unstable = true } - # language-server = { command = "deno", args = ["lsp"], language-id = "typescriptreact" } - # indent = { tab-width = 2, unit = " " } - # auto-format = true - - # [[language]] - # name = "jsonc" - # scope = "source.jsonc" - # injection-regex = "^(jsonc)$" - # file-types = ["jsonc"] - # shebangs = ["deno", "node"] - # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] - # config = { enable = true, lint = true, unstable = true } - # language-server = { command = "deno", args = ["lsp"], language-id = "jsonc" } - # indent = { tab-width = 2, unit = " " } - # auto-format = true - ]; - }; - - settings = { - theme = "custom"; - - editor = { - soft-wrap.enable = true; - auto-pairs = false; - auto-save = false; - completion-trigger-len = 1; - color-modes = false; - bufferline = "multiple"; - scrolloff = 8; - rulers = [80 120]; - cursorline = true; - - cursor-shape = { - normal = "block"; - insert = "bar"; - select = "underline"; - }; - - file-picker.hidden = false; - indent-guides = { - render = true; - character = "▏"; - }; - - lsp = { - display-messages = true; - display-inlay-hints = true; - }; - statusline = { - left = ["mode" "spinner" "selections" "primary-selection-length" "position" "position-percentage" "diagnostics" "workspace-diagnostics"]; - center = ["file-name"]; - right = ["version-control" "total-line-numbers" "file-encoding"]; - }; + file-picker.hidden = false; + indent-guides = { + render = true; + character = "▏"; }; - keys = { - insert = { - j = { - k = "normal_mode"; - j = "normal_mode"; - K = "normal_mode"; - J = "normal_mode"; - }; - }; - normal = { - D = "kill_to_line_end"; - "^" = "goto_line_start"; - "C-k" = "jump_view_up"; - "C-j" = "jump_view_down"; - "C-h" = "jump_view_left"; - "C-l" = "jump_view_right"; - "C-q" = ":quit-all!"; - "L" = "repeat_last_motion"; - space = { - q = ":reflow 80"; - Q = ":reflow 120"; - v = ":run-shell-command fish -c 'env > /tmp/env'"; - C = ":bc!"; - h = ":toggle lsp.display-inlay-hints"; - # O = ["select_textobject_inner WORD", ":pipe-to xargs xdg-open"]; - }; - }; - - select = { - space = { - q = ":reflow 80"; - Q = ":reflow 120"; - }; - "L" = "repeat_last_motion"; - }; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + statusline = { + left = ["mode" "spinner" "selections" "primary-selection-length" "position" "position-percentage" "diagnostics" "workspace-diagnostics"]; + center = ["file-name"]; + right = ["version-control" "total-line-numbers" "file-encoding"]; }; }; - - themes = { - custom = { - "inherits" = "catppuccin_mocha"; - - "ui.background" = "default"; - - # "ui.cursorline.primary" = { bg = "default" } - # "ui.cursorline.secondary" = { bg = "default" } - # "ui.cursorcolumn.primary" = { bg = "default" } - # "ui.cursorcolumn.secondary" = { bg = "default" } - # "ui.virtual.ruler" = { bg = "default" } - - "ui.bufferline.active" = { - fg = "sapphire"; - bg = "base"; - underline = { - color = "sapphire"; - style = ""; - }; + keys = { + insert = { + j = { + k = "normal_mode"; + j = "normal_mode"; + K = "normal_mode"; + J = "normal_mode"; }; }; + + normal = { + D = "kill_to_line_end"; + "^" = "goto_line_start"; + "C-k" = "jump_view_up"; + "C-j" = "jump_view_down"; + "C-h" = "jump_view_left"; + "C-l" = "jump_view_right"; + "C-q" = ":quit-all!"; + "L" = "repeat_last_motion"; + space = { + q = ":reflow 80"; + Q = ":reflow 120"; + v = ":run-shell-command fish -c 'env > /tmp/env'"; + C = ":bc!"; + h = ":toggle lsp.display-inlay-hints"; + # O = ["select_textobject_inner WORD", ":pipe-to xargs xdg-open"]; + }; + }; + + select = { + space = { + q = ":reflow 80"; + Q = ":reflow 120"; + }; + "L" = "repeat_last_motion"; + }; }; }; - bat = { - enable = true; - config = { - theme = "Catppuccin-mocha"; - }; - themes = { - "Catppuccin-mocha" = builtins.readFile (pkgs.fetchFromGitHub - { - owner = "catppuccin"; - repo = "bat"; - rev = "477622171ec0529505b0ca3cada68fc9433648c6"; - sha256 = "6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw="; - } - + "/Catppuccin-mocha.tmTheme"); - }; - }; + themes = with colors.withHashPrefix; { + custom = { + "type" = yellow; - kitty = { - enable = true; - darwinLaunchOptions = ["--single-instance"]; - shellIntegration = { - enableFishIntegration = true; - }; - settings = { - "font_family" = "IosevkaLyteTerm"; - "bold_font" = "IosevkaLyteTerm Heavy"; - "italic_font" = "IosevkaLyteTerm Italic"; - "bold_italic_font" = "IosevkaLyteTerm Heavy Italic"; - "font_size" = "12.5"; - "inactive_text_alpha" = "0.5"; - "copy_on_select" = true; + "constructor" = blue; - "scrollback_lines" = 500000; + "constant" = yellow; + "constant.builtin" = yellow; + "constant.character" = teal; + "constant.character.escape" = yellow; - "symbol_map" = "U+23FB-U+23FE,U+2665,U+26A1,U+2B58,U+E000-U+E00A,U+E0A0-U+E0A3,U+E0B0-U+E0D4,U+E200-U+E2A9,U+E300-U+E3E3,U+E5FA-U+E6AA,U+E700-U+E7C5,U+EA60-U+EBEB,U+F000-U+F2E0,U+F300-U+F32F,U+F400-U+F4A9,U+F500-U+F8FF,U+F0001-U+F1AF0 Symbols Nerd Font Mono"; + "string" = green; + "string.regexp" = yellow; + "string.special" = blue; - # use `kitty + list-fonts --psnames` to get the font's PostScript name - - "allow_remote_control" = true; - "listen_on" = "unix:/tmp/kitty"; - "repaint_delay" = 3; - "input_delay" = 3; - "sync_to_monitor" = true; - - "adjust_line_height" = 0; - "window_padding_width" = "10.0"; - "window_margin_width" = "0.0"; - - "confirm_os_window_close" = 0; - - "enabled_layouts" = "splits:split_axis=vertical,stack"; - - "shell_integration" = "disabled"; - - "enable_audio_bell" = true; - "visual_bell_duration" = "0.25"; - "visual_bell_color" = "#333033"; - - "url_style" = "single"; - - "strip_trailing_spaces" = "smart"; - - # open_url_modifiers ctrl - - "tab_bar_align" = "center"; - "tab_bar_style" = "separator"; - "tab_separator" = ''""''; - "tab_bar_edge" = "top"; - "tab_title_template" = ''"{fmt.fg.tab}{fmt.bg.tab} {activity_symbol}{title} "''; - "active_tab_font_style" = "normal"; - - ## name: Catppuccin Kitty Mocha - ## author: Catppuccin Org - ## license: MIT - ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf - ## blurb: Soothing pastel theme for the high-spirited! - - # The basic colors - "foreground" = "#CDD6F4"; - "background" = "#1E1E2E"; - "selection_foreground" = "#1E1E2E"; - "selection_background" = "#F5E0DC"; - - # Cursor colors - "cursor" = "#F5E0DC"; - "cursor_text_color" = "#1E1E2E"; - - # URL underline color when hovering with mouse - "url_color" = "#F5E0DC"; - - # Kitty window border colors - "active_border_color" = "#74c7ec"; - "inactive_border_color" = "#313244"; - "bell_border_color" = "#F9E2AF"; - - # OS Window titlebar colors - "wayland_titlebar_color" = "system"; - "macos_titlebar_color" = "system"; - - # Tab bar colors - "active_tab_foreground" = "#11111B"; - "active_tab_background" = "#74c7ec"; - "inactive_tab_foreground" = "#CDD6F4"; - "inactive_tab_background" = "#181825"; - "tab_bar_background" = "#11111B"; - - # Colors for marks (marked text in the terminal) - "mark1_foreground" = "#1E1E2E"; - "mark1_background" = "#B4BEFE"; - "mark2_foreground" = "#1E1E2E"; - "mark2_background" = "#74c7ec"; - "mark3_foreground" = "#1E1E2E"; - "mark3_background" = "#74C7EC"; - - # The 16 terminal colors - - # black - "color0" = "#45475A"; - "color8" = "#585B70"; - - # red - "color1" = "#F38BA8"; - "color9" = "#F38BA8"; - - # green - "color2" = "#A6E3A1"; - "color10" = "#A6E3A1"; - - # yellow - "color3" = "#F9E2AF"; - "color11" = "#F9E2AF"; - - # blue - "color4" = "#89B4FA"; - "color12" = "#89B4FA"; - - # magenta - "color5" = "#F5C2E7"; - "color13" = "#F5C2E7"; - - # cyan - "color6" = "#94E2D5"; - "color14" = "#94E2D5"; - - # white - "color7" = "#BAC2DE"; - "color15" = "#A6ADC8"; - }; - keybindings = { - "ctrl+shift+1" = "change_font_size all 12.5"; - "ctrl+shift+2" = "change_font_size all 18.5"; - "ctrl+shift+3" = "change_font_size all 26"; - "ctrl+shift+4" = "change_font_size all 32"; - "ctrl+shift+5" = "change_font_size all 48"; - "ctrl+shift+o" = "launch --type=tab --stdin-source=@screen_scrollback $EDITOR"; - - "ctrl+shift+equal" = "change_font_size all +0.5"; - "ctrl+shift+minus" = "change_font_size all -0.5"; - - "shift+insert" = "paste_from_clipboard"; - "ctrl+shift+v" = "paste_from_selection"; - "ctrl+shift+c" = "copy_to_clipboard"; - - # kill pane - "ctrl+shift+q" = "close_window"; - - # kill tab - "ctrl+alt+shift+q" = "close_tab"; - - "ctrl+shift+j" = "launch --location=hsplit --cwd=current"; - "ctrl+shift+l" = "launch --location=vsplit --cwd=current"; - - "ctrl+alt+shift+k" = "move_window up"; - "ctrl+alt+shift+h" = "move_window left"; - "ctrl+alt+shift+l" = "move_window right"; - "ctrl+alt+shift+j" = "move_window down"; - - "ctrl+h" = "neighboring_window left"; - "ctrl+l" = "neighboring_window right"; - "ctrl+k" = "neighboring_window up"; - "ctrl+j" = "neighboring_window down"; - "ctrl+shift+n" = "nth_window -1"; - "ctrl+shift+space>u" = "kitten hints --type=url --program @"; - - "ctrl+shift+z" = "toggle_layout stack"; - }; - }; - - zellij = { - # TODO: enable after port config - enable = false; - enableFishIntegration = true; - settings = { - # TODO: port config - }; - }; - - broot = { - enable = true; - enableFishIntegration = true; - settings = { - modal = true; - skin = { - # this is a crappy copy of broot's catppuccin mocha theme - input = "rgb(205, 214, 244) none"; - selected_line = "none rgb(88, 91, 112)"; - default = "rgb(205, 214, 244) none"; - tree = "rgb(108, 112, 134) none"; - parent = "rgb(116, 199, 236) none"; - file = "none none"; - - perm__ = "rgb(186, 194, 222) none"; - perm_r = "rgb(250, 179, 135) none"; - perm_w = "rgb(235, 160, 172) none"; - perm_x = "rgb(166, 227, 161) none"; - owner = "rgb(148, 226, 213) none"; - group = "rgb(137, 220, 235) none"; - - dates = "rgb(186, 194, 222) none"; - - directory = "rgb(180, 190, 254) none Bold"; - exe = "rgb(166, 227, 161) none"; - link = "rgb(249, 226, 175) none"; - pruning = "rgb(166, 173, 200) none Italic"; - - preview_title = "rgb(205, 214, 244) rgb(24, 24, 37)"; - preview = "rgb(205, 214, 244) rgb(24, 24, 37)"; - preview_line_number = "rgb(108, 112, 134) none"; - - char_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; - content_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; - preview_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; - - count = "rgb(249, 226, 175) none"; - sparse = "rgb(243, 139, 168) none"; - content_extract = "rgb(243, 139, 168) none Italic"; - - git_branch = "rgb(250, 179, 135) none"; - git_insertions = "rgb(250, 179, 135) none"; - git_deletions = "rgb(250, 179, 135) none"; - git_status_current = "rgb(250, 179, 135) none"; - git_status_modified = "rgb(250, 179, 135) none"; - git_status_new = "rgb(250, 179, 135) none Bold"; - git_status_ignored = "rgb(250, 179, 135) none"; - git_status_conflicted = "rgb(250, 179, 135) none"; - git_status_other = "rgb(250, 179, 135) none"; - staging_area_title = "rgb(250, 179, 135) none"; - - flag_label = "rgb(243, 139, 168) none"; - flag_value = "rgb(243, 139, 168) none Bold"; - - status_normal = "none rgb(24, 24, 37)"; - status_italic = "rgb(243, 139, 168) rgb(24, 24, 37) Italic"; - status_bold = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; - status_ellipsis = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; - status_error = "rgb(205, 214, 244) rgb(243, 139, 168)"; - status_job = "rgb(235, 160, 172) rgb(40, 38, 37)"; - status_code = "rgb(235, 160, 172) rgb(24, 24, 37) Italic"; - mode_command_mark = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; - - help_paragraph = "rgb(205, 214, 244) none"; - help_headers = "rgb(243, 139, 168) none Bold"; - help_bold = "rgb(250, 179, 135) none Bold"; - help_italic = "rgb(249, 226, 175) none Italic"; - help_code = "rgb(166, 227, 161) rgb(49, 50, 68)"; - help_table_border = "rgb(108, 112, 134) none"; - - hex_null = "rgb(205, 214, 244) none"; - hex_ascii_graphic = "rgb(250, 179, 135) none"; - hex_ascii_whitespace = "rgb(166, 227, 161) none"; - hex_ascii_other = "rgb(148, 226, 213) none"; - hex_non_ascii = "rgb(243, 139, 168) none"; - - file_error = "rgb(251, 73, 52) none"; - - purpose_normal = "none none"; - purpose_italic = "rgb(177, 98, 134) none Italic"; - purpose_bold = "rgb(177, 98, 134) none Bold"; - purpose_ellipsis = "none none"; - - scrollbar_track = "rgb(49, 50, 68) none"; - scrollbar_thumb = "rgb(88, 91, 112) none"; - - good_to_bad_0 = "rgb(166, 227, 161) none"; - good_to_bad_1 = "rgb(148, 226, 213) none"; - good_to_bad_2 = "rgb(137, 220, 235) none"; - good_to_bad_3 = "rgb(116, 199, 236) none"; - good_to_bad_4 = "rgb(137, 180, 250) none"; - good_to_bad_5 = "rgb(180, 190, 254) none"; - good_to_bad_6 = "rgb(203, 166, 247) none"; - good_to_bad_7 = "rgb(250, 179, 135) none"; - good_to_bad_8 = "rgb(235, 160, 172) none"; - good_to_bad_9 = "rgb(243, 139, 168) none"; + "comment" = { + fg = fgdim; + modifiers = ["italic"]; }; - verbs = [ + "variable" = text; + "variable.parameter" = { + fg = red; + modifiers = ["italic"]; + }; + "variable.builtin" = red; + "variable.other.member" = text; + + "label" = blue; + + "punctuation" = fgdim; + "punctuation.special" = blue; + + "keyword" = purple; + "keyword.storage.modifier.ref" = teal; + "keyword.control.conditional" = { + fg = purple; + modifiers = ["italic"]; + }; + + "operator" = blue; + + "function" = blue; + "function.macro" = purple; + + "tag" = purple; + "attribute" = blue; + + "namespace" = { + fg = blue; + modifiers = ["italic"]; + }; + + "special" = blue; + + "markup.heading.marker" = { + fg = yellow; + modifiers = ["bold"]; + }; + "markup.heading.1" = blue; + "markup.heading.2" = teal; + "markup.heading.3" = green; + "markup.heading.4" = yellow; + "markup.heading.5" = red; + "markup.heading.6" = fg3; + "markup.list" = purple; + "markup.bold" = {modifiers = ["bold"];}; + "markup.italic" = {modifiers = ["italic"];}; + "markup.strikethrough" = {modifiers = ["crossed_out"];}; + "markup.link.url" = { + fg = red; + modifiers = ["underlined"]; + }; + "markup.link.text" = blue; + "markup.raw" = red; + + "diff.plus" = green; + "diff.minus" = red; + "diff.delta" = blue; + + "ui.linenr" = {fg = fgdim;}; + "ui.linenr.selected" = {fg = fg2;}; + + "ui.statusline" = { + fg = fg2; + bg = bg2; + }; + "ui.statusline.inactive" = { + fg = fg3; + bg = bg; + }; + "ui.statusline.normal" = { + fg = bg; + bg = purple; + modifiers = ["bold"]; + }; + "ui.statusline.insert" = { + fg = bg; + bg = green; + modifiers = ["bold"]; + }; + "ui.statusline.select" = { + fg = bg; + bg = red; + modifiers = ["bold"]; + }; + + "ui.popup" = { + fg = text; + bg = bg2; + }; + "ui.window" = {fg = fg3;}; + "ui.help" = { + fg = fg2; + bg = bg2; + }; + + "ui.bufferline" = { + fg = fgdim; + bg = bg2; + }; + "ui.bufferline.background" = {bg = bg2;}; + + "ui.text" = text; + "ui.text.focus" = { + fg = "text"; + bg = "surface0"; + modifiers = ["bold"]; + }; + "ui.text.inactive" = {fg = fg2;}; + + "ui.virtual" = fg2; + "ui.virtual.ruler" = {bg = bg2;}; + "ui.virtual.indent-guide" = bg3; + "ui.virtual.inlay-hint" = { + fg = bg3; + bg = bg; + }; + + "ui.selection" = {bg = bg5;}; + + "ui.cursor" = { + fg = bg; + bg = text; + }; + "ui.cursor.primary" = { + fg = bg; + bg = red; + }; + "ui.cursor.match" = { + fg = yellow; + modifiers = ["bold"]; + }; + + "ui.cursor.primary.normal" = { + fg = bg; + bg = text; + }; + "ui.cursor.primary.insert" = { + fg = bg; + bg = text; + }; + "ui.cursor.primary.select" = { + fg = bg; + bg = text; + }; + + "ui.cursor.normal" = { + fg = bg; + bg = fg; + }; + "ui.cursor.insert" = { + fg = bg; + bg = fg; + }; + "ui.cursor.select" = { + fg = bg; + bg = fg; + }; + + "ui.cursorline.primary" = {bg = bg3;}; + + "ui.highlight" = { + bg = fg2; + modifiers = ["bold"]; + }; + + "ui.menu" = { + fg = fg3; + bg = bg2; + }; + "ui.menu.selected" = { + fg = text; + bg = bg4; + modifiers = ["bold"]; + }; + + "diagnostic.error" = { + underline = { + color = red; + style = "curl"; + }; + }; + "diagnostic.warning" = { + underline = { + color = yellow; + style = "curl"; + }; + }; + "diagnostic.info" = { + underline = { + color = blue; + style = "curl"; + }; + }; + "diagnostic.hint" = { + underline = { + color = blue; + style = "curl"; + }; + }; + + error = red; + warning = yellow; + info = blue; + hint = teal; + "ui.background" = bg; + + # "ui.cursorline.primary" = { bg = "default" } + # "ui.cursorline.secondary" = { bg = "default" } + # "ui.cursorcolumn.primary" = { bg = "default" } + # "ui.cursorcolumn.secondary" = { bg = "default" } + # "ui.virtual.ruler" = { bg = "default" } + + "ui.bufferline.active" = { + fg = primary; + bg = bg3; + underline = { + color = primary; + style = ""; + }; + }; + }; + }; + }; + + programs.bat = { + enable = true; + config = { + theme = "Catppuccin-mocha"; + }; + themes = { + "Catppuccin-mocha" = builtins.readFile (pkgs.fetchFromGitHub + { + owner = "catppuccin"; + repo = "bat"; + rev = "477622171ec0529505b0ca3cada68fc9433648c6"; + sha256 = "6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw="; + } + + "/Catppuccin-mocha.tmTheme"); + }; + }; + + programs.wezterm = { + enable = true; + extraConfig = '' + local wezterm = require'wezterm' + + local config = {} + + -- TODO: integrate nix colors + + if wezterm.config_builder then + config = wezterm.config_builder() + end + + local hostname = io.popen("/bin/hostname"):read("*a"):gsub("%s", "") + local font_spec = { family = '${font.name}', weight = 'Medium', italic = false } + local font_size = ${toString font.size}.0 + + if hostname == "laptop" then + font_size = 13 + end + + local font = wezterm.font_with_fallback{ + font_spec, + { family = 'Symbols Nerd Font Mono', weight = 'Regular', italic = false }, + 'Noto Color Emoji', + } + + if hostname == "laptop" then + config.font_rules = { + -- no italics { - invocation = "edit"; - shortcut = "e"; - execution = "$EDITOR {file}"; - } - ]; - }; - }; + font = font + }, + } + end - direnv = { - enable = true; - nix-direnv.enable = true; - }; + config.default_cursor_style = 'BlinkingBar' - fish = { - enable = true; - # I load long scripts from files for a better editing experience - shellInit = builtins.readFile ./fish/shellInit.fish; - interactiveShellInit = builtins.readFile ./fish/interactiveShellInit.fish; - loginShellInit = ""; - functions = { - # TODO: I think these should be loaded from fish files too for better editor experience? - d = '' - # --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files." - if count $argv > /dev/null - cd $argv - else - cd $NICE_HOME - end - la - ''; + config.font = font + config.font_size = font_size - c = '' - if count $argv > /dev/null - cd $NICE_HOME && d $argv - else - d $NICE_HOME - end - ''; + config.hide_tab_bar_if_only_one_tab = true + config.use_fancy_tab_bar = false + config.tab_bar_at_bottom = false + config.window_background_opacity = 1.0 - g = '' - if test (count $argv) -gt 0 - git $argv - else - git status - end - ''; + config.color_scheme = "Catppuccin Mocha" - ltl = '' - set d $argv[1] . - set -l l "" - for f in $d[1]/* - if test -z $l; set l $f; continue; end - if command test $f -nt $l; and test ! -d $f - set l $f - end - end - echo $l - ''; + config.window_frame.font = config.font + config.window_frame.font_size = font_size - has_command = "command --quiet --search $argv[1]"; - }; - shellAbbrs = {}; - shellAliases = { - l = "br"; - ls = "eza --group-directories-first --classify"; - la = "eza -la --group-directories-first --classify"; - lA = "eza -la --all --group-directories-first --classify"; - tree = "eza --tree --level=3"; - lt = "eza -l --sort=modified"; - lat = "eza -la --sort=modified"; - lc = "lt --sort=accessed"; - lT = "lt --reverse"; - lC = "lc --reverse"; - lD = "la --only-dirs"; - "cd.." = "d .."; - "cdc" = "d $XDG_CONFIG_HOME"; - "cdn" = "d $NOTES_PATH"; - "cdl" = "d $XDG_DOWNLOAD_DIR"; - "cdg" = "d $XDG_GAMES_DIR"; - ".." = "d .."; - "..." = "d ../.."; - "...." = "d ../../.."; - "....." = "d ../../../.."; - "......" = "d ../../../../.."; - "......." = "d ../../../../../.."; - "........" = "d ../../../../../../.."; - "........." = "d ../../../../../../../.."; - cat = "bat"; - p = "ping"; - dc = "docker compose"; - k = "kubectl"; - kg = "kubectl get"; - v = "$EDITOR"; - sv = "sudo $EDITOR"; - kssh = "kitty +kitten ssh"; - }; - }; + config.inactive_pane_hsb = { + saturation = 0.8, + brightness = 0.7, + } - eza = { - enable = true; - package = inputs.nixpkgs-unstable.legacyPackages.${system}.eza; - }; + config.keys = { + { + key = 'j', + mods = 'CTRL', + action = wezterm.action.ActivatePaneDirection'Down' + }, + { + key = 'Insert', + mods = 'SHIFT', + action = wezterm.action.PasteFrom'Clipboard' + }, + { + key = 'v', + mods = 'CTRL|SHIFT', + action = wezterm.action.PasteFrom'PrimarySelection' + }, + { + key = 'h', + mods = 'CTRL', + action = wezterm.action.ActivatePaneDirection'Left' + }, + { + key = 'l', + mods = 'CTRL', + action = wezterm.action.ActivatePaneDirection'Right' + }, + { + key = 'k', + mods = 'CTRL', + action = wezterm.action.ActivatePaneDirection'Up' + }, + { + key = 'j', + mods = 'CTRL|SHIFT', + action = wezterm.action.SplitVertical{domain='CurrentPaneDomain'} + }, + { + key = 'l', + mods = 'CTRL|SHIFT', + action = wezterm.action.SplitHorizontal{domain='CurrentPaneDomain'} + }, + { + key = 'l', + mods = 'CTRL|SHIFT|ALT', + action = wezterm.action.ShowDebugOverlay + }, + { + key = 'r', + mods = 'CTRL|SHIFT|ALT', + action = wezterm.action.RotatePanes'Clockwise' + }, + } - skim = { - enable = true; + config.unix_domains = { + { + name = 'unix', + local_echo_threshold_ms = 10, + }, + } + + -- config.default_gui_startup_args = { 'connect', 'unix' } + -- config.default_domain = 'unix' + + config.window_padding = { + top = '0.5cell', + bottom = '0.5cell', + left = '1cell', + right = '1cell', + } + + return config + ''; + }; + + programs.kitty = { + enable = true; + darwinLaunchOptions = ["--single-instance"]; + shellIntegration = { enableFishIntegration = true; }; + settings = with colors.withHashPrefix; { + "font_family" = font.name; + "bold_font" = "${font.name} Heavy"; + "italic_font" = "${font.name} Italic"; + "bold_italic_font" = "${font.name} Heavy Italic"; + "font_size" = toString font.size; + "inactive_text_alpha" = "0.5"; + "copy_on_select" = true; - nix-index = { - enable = true; - enableFishIntegration = true; + "scrollback_lines" = 500000; + + "symbol_map" = "U+23FB-U+23FE,U+2665,U+26A1,U+2B58,U+E000-U+E00A,U+E0A0-U+E0A3,U+E0B0-U+E0D4,U+E200-U+E2A9,U+E300-U+E3E3,U+E5FA-U+E6AA,U+E700-U+E7C5,U+EA60-U+EBEB,U+F000-U+F2E0,U+F300-U+F32F,U+F400-U+F4A9,U+F500-U+F8FF,U+F0001-U+F1AF0 Symbols Nerd Font Mono"; + + # use `kitty + list-fonts --psnames` to get the font's PostScript name + + "allow_remote_control" = true; + "listen_on" = "unix:/tmp/kitty"; + "repaint_delay" = 3; + "input_delay" = 3; + "sync_to_monitor" = true; + + "adjust_line_height" = 0; + "window_padding_width" = "10.0"; + "window_margin_width" = "0.0"; + + "confirm_os_window_close" = 0; + + "enabled_layouts" = "splits:split_axis=vertical,stack"; + + "shell_integration" = "disabled"; + + "enable_audio_bell" = true; + "visual_bell_duration" = "0.25"; + "visual_bell_color" = yellow; + + "url_style" = "single"; + + "strip_trailing_spaces" = "smart"; + + # open_url_modifiers ctrl + + "tab_bar_align" = "center"; + "tab_bar_style" = "separator"; + "tab_separator" = ''""''; + "tab_bar_edge" = "top"; + "tab_title_template" = ''"{fmt.fg.tab}{fmt.bg.tab} {activity_symbol}{title} "''; + "active_tab_font_style" = "normal"; + + ## name: Catppuccin Kitty Mocha + ## author: Catppuccin Org + ## license: MIT + ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf + ## blurb: Soothing pastel theme for the high-spirited! + + # The basic colors + "foreground" = text; + "background" = bg; + "selection_foreground" = bg; + "selection_background" = text; + + # Cursor colors + "cursor" = text; + "cursor_text_color" = bg; + + # URL underline color when hovering with mouse + "url_color" = primary; + + # Kitty window border colors + "active_border_color" = primary; + "inactive_border_color" = bg3; + "bell_border_color" = urgent; + + # OS Window titlebar colors + "wayland_titlebar_color" = "system"; + "macos_titlebar_color" = "system"; + + # Tab bar colors + "active_tab_foreground" = bg; + "active_tab_background" = primary; + "inactive_tab_foreground" = fgdim; + "inactive_tab_background" = bg2; + "tab_bar_background" = bg; + + # Colors for marks (marked text in the terminal) + "mark1_foreground" = bg; + "mark1_background" = blue; + "mark2_foreground" = bg; + "mark2_background" = purple; + "mark3_foreground" = bg; + "mark3_background" = blue; + + # The 16 terminal colors + + # black + "color0" = colors.withHashPrefix."0"; + "color8" = colors.withHashPrefix."8"; + + # red + "color1" = colors.withHashPrefix."1"; + "color9" = colors.withHashPrefix."9"; + + # green + "color2" = colors.withHashPrefix."2"; + "color10" = colors.withHashPrefix."10"; + + # yellow + "color3" = colors.withHashPrefix."3"; + "color11" = colors.withHashPrefix."11"; + + # blue + "color4" = colors.withHashPrefix."4"; + "color12" = colors.withHashPrefix."12"; + + # magenta + "color5" = colors.withHashPrefix."5"; + "color13" = colors.withHashPrefix."13"; + + # cyan + "color6" = colors.withHashPrefix."6"; + "color14" = colors.withHashPrefix."14"; + + # white + "color7" = colors.withHashPrefix."7"; + "color15" = colors.withHashPrefix."15"; }; + keybindings = { + "ctrl+shift+1" = "change_font_size all 12.5"; + "ctrl+shift+2" = "change_font_size all 18.5"; + "ctrl+shift+3" = "change_font_size all 26"; + "ctrl+shift+4" = "change_font_size all 32"; + "ctrl+shift+5" = "change_font_size all 48"; + "ctrl+shift+o" = "launch --type=tab --stdin-source=@screen_scrollback $EDITOR"; + + "ctrl+shift+equal" = "change_font_size all +0.5"; + "ctrl+shift+minus" = "change_font_size all -0.5"; + + "shift+insert" = "paste_from_clipboard"; + "ctrl+shift+v" = "paste_from_selection"; + "ctrl+shift+c" = "copy_to_clipboard"; + + # kill pane + "ctrl+shift+q" = "close_window"; + + # kill tab + "ctrl+alt+shift+q" = "close_tab"; + + "ctrl+shift+j" = "launch --location=hsplit --cwd=current"; + "ctrl+shift+l" = "launch --location=vsplit --cwd=current"; + + "ctrl+alt+shift+k" = "move_window up"; + "ctrl+alt+shift+h" = "move_window left"; + "ctrl+alt+shift+l" = "move_window right"; + "ctrl+alt+shift+j" = "move_window down"; + + "ctrl+h" = "neighboring_window left"; + "ctrl+l" = "neighboring_window right"; + "ctrl+k" = "neighboring_window up"; + "ctrl+j" = "neighboring_window down"; + "ctrl+shift+n" = "nth_window -1"; + "ctrl+shift+space>u" = "kitten hints --type=url --program @"; + + "ctrl+shift+z" = "toggle_layout stack"; + }; + }; + + programs.zellij = { + # TODO: enable after port config + enable = false; + enableFishIntegration = true; + settings = { + # TODO: port config + }; + }; + + programs.broot = { + enable = true; + enableFishIntegration = true; + settings = { + modal = true; + skin = { + # this is a crappy copy of broot's catppuccin mocha theme + input = "rgb(205, 214, 244) none"; + selected_line = "none rgb(88, 91, 112)"; + default = "rgb(205, 214, 244) none"; + tree = "rgb(108, 112, 134) none"; + parent = "rgb(116, 199, 236) none"; + file = "none none"; + + perm__ = "rgb(186, 194, 222) none"; + perm_r = "rgb(250, 179, 135) none"; + perm_w = "rgb(235, 160, 172) none"; + perm_x = "rgb(166, 227, 161) none"; + owner = "rgb(148, 226, 213) none"; + group = "rgb(137, 220, 235) none"; + + dates = "rgb(186, 194, 222) none"; + + directory = "rgb(180, 190, 254) none Bold"; + exe = "rgb(166, 227, 161) none"; + link = "rgb(249, 226, 175) none"; + pruning = "rgb(166, 173, 200) none Italic"; + + preview_title = "rgb(205, 214, 244) rgb(24, 24, 37)"; + preview = "rgb(205, 214, 244) rgb(24, 24, 37)"; + preview_line_number = "rgb(108, 112, 134) none"; + + char_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + content_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + preview_match = "rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic"; + + count = "rgb(249, 226, 175) none"; + sparse = "rgb(243, 139, 168) none"; + content_extract = "rgb(243, 139, 168) none Italic"; + + git_branch = "rgb(250, 179, 135) none"; + git_insertions = "rgb(250, 179, 135) none"; + git_deletions = "rgb(250, 179, 135) none"; + git_status_current = "rgb(250, 179, 135) none"; + git_status_modified = "rgb(250, 179, 135) none"; + git_status_new = "rgb(250, 179, 135) none Bold"; + git_status_ignored = "rgb(250, 179, 135) none"; + git_status_conflicted = "rgb(250, 179, 135) none"; + git_status_other = "rgb(250, 179, 135) none"; + staging_area_title = "rgb(250, 179, 135) none"; + + flag_label = "rgb(243, 139, 168) none"; + flag_value = "rgb(243, 139, 168) none Bold"; + + status_normal = "none rgb(24, 24, 37)"; + status_italic = "rgb(243, 139, 168) rgb(24, 24, 37) Italic"; + status_bold = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + status_ellipsis = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + status_error = "rgb(205, 214, 244) rgb(243, 139, 168)"; + status_job = "rgb(235, 160, 172) rgb(40, 38, 37)"; + status_code = "rgb(235, 160, 172) rgb(24, 24, 37) Italic"; + mode_command_mark = "rgb(235, 160, 172) rgb(24, 24, 37) Bold"; + + help_paragraph = "rgb(205, 214, 244) none"; + help_headers = "rgb(243, 139, 168) none Bold"; + help_bold = "rgb(250, 179, 135) none Bold"; + help_italic = "rgb(249, 226, 175) none Italic"; + help_code = "rgb(166, 227, 161) rgb(49, 50, 68)"; + help_table_border = "rgb(108, 112, 134) none"; + + hex_null = "rgb(205, 214, 244) none"; + hex_ascii_graphic = "rgb(250, 179, 135) none"; + hex_ascii_whitespace = "rgb(166, 227, 161) none"; + hex_ascii_other = "rgb(148, 226, 213) none"; + hex_non_ascii = "rgb(243, 139, 168) none"; + + file_error = "rgb(251, 73, 52) none"; + + purpose_normal = "none none"; + purpose_italic = "rgb(177, 98, 134) none Italic"; + purpose_bold = "rgb(177, 98, 134) none Bold"; + purpose_ellipsis = "none none"; + + scrollbar_track = "rgb(49, 50, 68) none"; + scrollbar_thumb = "rgb(88, 91, 112) none"; + + good_to_bad_0 = "rgb(166, 227, 161) none"; + good_to_bad_1 = "rgb(148, 226, 213) none"; + good_to_bad_2 = "rgb(137, 220, 235) none"; + good_to_bad_3 = "rgb(116, 199, 236) none"; + good_to_bad_4 = "rgb(137, 180, 250) none"; + good_to_bad_5 = "rgb(180, 190, 254) none"; + good_to_bad_6 = "rgb(203, 166, 247) none"; + good_to_bad_7 = "rgb(250, 179, 135) none"; + good_to_bad_8 = "rgb(235, 160, 172) none"; + good_to_bad_9 = "rgb(243, 139, 168) none"; + }; + + verbs = [ + { + invocation = "edit"; + shortcut = "e"; + execution = "$EDITOR {file}"; + } + ]; + }; + }; + + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + + programs.fish = { + enable = true; + # I load long scripts from files for a better editing experience + shellInit = builtins.readFile ./fish/shellInit.fish; + interactiveShellInit = builtins.readFile ./fish/interactiveShellInit.fish; + loginShellInit = ""; + functions = { + # TODO: I think these should be loaded from fish files too for better editor experience? + d = '' + # --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files." + if count $argv > /dev/null + cd $argv + else + cd $NICE_HOME + end + la + ''; + + c = '' + if count $argv > /dev/null + cd $NICE_HOME && d $argv + else + d $NICE_HOME + end + ''; + + g = '' + if test (count $argv) -gt 0 + git $argv + else + git status + end + ''; + + ltl = '' + set d $argv[1] . + set -l l "" + for f in $d[1]/* + if test -z $l; set l $f; continue; end + if command test $f -nt $l; and test ! -d $f + set l $f + end + end + echo $l + ''; + + has_command = "command --quiet --search $argv[1]"; + }; + shellAbbrs = {}; + shellAliases = { + l = "br"; + ls = "eza --group-directories-first --classify"; + la = "eza -la --group-directories-first --classify"; + lA = "eza -la --all --group-directories-first --classify"; + tree = "eza --tree --level=3"; + lt = "eza -l --sort=modified"; + lat = "eza -la --sort=modified"; + lc = "lt --sort=accessed"; + lT = "lt --reverse"; + lC = "lc --reverse"; + lD = "la --only-dirs"; + "cd.." = "d .."; + "cdc" = "d $XDG_CONFIG_HOME"; + "cdn" = "d $NOTES_PATH"; + "cdl" = "d $XDG_DOWNLOAD_DIR"; + "cdg" = "d $XDG_GAMES_DIR"; + ".." = "d .."; + "..." = "d ../.."; + "...." = "d ../../.."; + "....." = "d ../../../.."; + "......" = "d ../../../../.."; + "......." = "d ../../../../../.."; + "........" = "d ../../../../../../.."; + "........." = "d ../../../../../../../.."; + cat = "bat"; + p = "ping"; + dc = "docker compose"; + pc = "podman-compose"; + k = "kubectl"; + kg = "kubectl get"; + v = "$EDITOR"; + sv = "sudo $EDITOR"; + kssh = "kitty +kitten ssh"; + }; + }; + + programs.eza = { + enable = true; + package = inputs.nixpkgs-unstable.legacyPackages.${system}.eza; + }; + + programs.skim = { + enable = true; + enableFishIntegration = true; + }; + + programs.nix-index = { + enable = true; + enableFishIntegration = true; }; # maybe we can share somehow so things for nix-y systems and non-nix-y systems alike diff --git a/home/linux.nix b/home/linux.nix index 5b5ed0c..1294495 100644 --- a/home/linux.nix +++ b/home/linux.nix @@ -2,6 +2,8 @@ config, pkgs, lib, + colors, + font, ... }: { home.pointerCursor = { @@ -11,101 +13,415 @@ # some icons are also missing (hand2?) }; - services = { - mako = with config.colorScheme.colors; { - enable = true; - borderSize = 1; - maxVisible = 5; - defaultTimeout = 15000; - font = "Symbols Nerd Font 12,IosevkaLyteTerm 12"; - # TODO: config + programs.foot = { + enable = true; + }; - backgroundColor = "#${base01}"; - textColor = "#${base05}"; - borderColor = "#${base0C}"; - progressColor = "#${base0A}"; + # programs.eww = { + # enable = true; + # }; - extraConfig = '' - [urgency=high] - border-color=#${base0F} - [urgency=high] - background-color=#${base03} - ''; + /* + home.file.".config/eww/eww.yuck" = { + enable = true; + text = '' + (defwidget bar [] + (centerbox :orientation "h" + (sidestuff) + (box) + (music))) + + (defwindow bar + :monitor 0 + :stacking "fg" + :exclusive true + :geometry + (geometry + :x "0%" + :y "0%" + :width "100%" + :height "31px" + :anchor "bottom center") + (bar)) + + (defwidget sidestuff [] + (box :class "sidestuff" :orientation "h" :space-evenly false :halign "start" :spacing 20 + time + ; TODO: idle inhibitor? + ; TODO: get these to align properly? + (box :class "mic" ( + box :class {micMuted == "false" ? "live" : "muted"} {micMuted == "false" ? " " : " "} + ) {micVolume + "%"} + ) + (box :class "vol" ( + box :class {muted == "false" ? "live" : "muted"} {muted == "false" ? "󰕾 " : "󰖁 "} + ) {volume + "%"} + ) + {" " + round(EWW_CPU["avg"], 0) + "%"} + {" " + round(EWW_RAM["used_mem_perc"], 0) + "%"} + {isDesktop == "true" ? "" : " " + brightness + "%"} + {isDesktop == "true" ? "" : "󱊣 " + EWW_BATTERY["BAT0"]["capacity"] + "%/" + EWW_BATTERY["BAT1"]["capacity"] + "%"} + )) + + (defwidget music [] + (box :class "music" + :orientation "h" + :halign "end" + :space-evenly false + {music != "" ? "''${music}" : ""})) + + (deflisten music :initial "" + "playerctl --follow metadata --format '{{ title }} by {{ artist }}' || true") + + (deflisten volume :initial "0" + "pamixer --get-volume; pactl subscribe | grep sink --line-buffered | while read i; do pamixer --get-volume; done") + + (deflisten muted :initial "false" + "pamixer --get-mute; pactl subscribe | grep sink --line-buffered | while read i; do pamixer --get-mute; done") + + (deflisten micVolume :initial "0" + "pamixer --default-source --get-volume; pactl subscribe | grep source --line-buffered | while read i; do pamixer --default-source --get-volume; done") + + (deflisten micMuted :initial "false" + "pamixer --default-source --get-mute; pactl subscribe | grep source --line-buffered | while read i; do pamixer --default-source --get-mute; done") + + (defpoll time :interval "1s" + "date '+%a %b %d %H:%M:%S'") + + (defpoll isDesktop :interval "24h" + "if [ -d \"$HOME/.config/lytedev-env/host-desktop\" ]; then echo true; else echo false; fi") + + (defpoll brightness :interval "10s" + "echo $(((100 * $(brightnessctl get)) / $(brightnessctl max)))") + ''; + }; + */ + + programs.fish = { + shellAliases = { + sctl = "sudo systemctl"; + sctlu = "systemctl --user"; }; + }; - # this doesn't work due to weird quoting bugs AFAICT - # swayidle = let - # bins = rec { - # swaylock = builtins.trace "${pkgs.swaylock}/bin/swaylock" "${pkgs.swaylock}/bin/swaylock"; - # swaymsg = "${pkgs.sway}/bin/swaymsg"; - # notify-send = "${swaymsg} exec -- ${pkgs.libnotify}/bin/notify-send"; - # }; - # in (with bins; { - # enable = true; + services.mako = with colors.withHashPrefix; { + enable = true; + borderSize = 1; + maxVisible = 5; + defaultTimeout = 15000; + font = "Symbols Nerd Font ${toString font.size},${font.name} ${toString font.size}"; + # TODO: config - # events = [ - # { - # event = "before-sleep"; - # command = swaylock; - # } - # ]; + backgroundColor = bg; + textColor = text; + borderColor = primary; + progressColor = primary; - # timeouts = [ - # { - # timeout = 5; - # command = "${notify-send} \\\"Idling in 300 seconds\\\""; - # resumeCommand = "${notify-send} \\\"Idling cancelled.\\\""; - # } - # { - # # timeout = 540; - # timeout = 6; - # command = "${notify-send} 'Idling in 90 seconds'"; - # } - # { - # # timeout = 570; - # timeout = 7; - # command = "${notify-send} 'Idling in 60 seconds'"; - # } - # { - # # timeout = 600; - # timeout = 8; - # command = "${notify-send} 'Idling in 30 seconds...'"; - # } - # { - # # timeout = 630; - # timeout = 9; - # command = "${swaylock} -f"; - # } - # { - # # timeout = 660; - # timeout = 10; - # command = "${swaymsg} 'output * dpms off'"; - # resumeCommand = "${swaymsg} 'output * dpms on' & ${swaymsg} exec -- maybe-good-morning &"; - # } - # ]; - # }); + extraConfig = '' + [urgency=high] + border-color=${urgent} + [urgency=high] + background-color=${urgent} + ''; + }; + + # this doesn't work due to weird quoting bugs AFAICT + /* + services.swayidle = let + bins = rec { + swaylock = builtins.trace "${pkgs.swaylock}/bin/swaylock" "${pkgs.swaylock}/bin/swaylock"; + swaymsg = "${pkgs.sway}/bin/swaymsg"; + notify-send = "${swaymsg} exec -- ${pkgs.libnotify}/bin/notify-send"; + }; + in (with bins; { + enable = true; + + events = [ + { + event = "before-sleep"; + command = swaylock; + } + ]; + + timeouts = [ + { + timeout = 5; + command = "${notify-send} \\\"Idling in 300 seconds\\\""; + resumeCommand = "${notify-send} \\\"Idling cancelled.\\\""; + } + { + # timeout = 540; + timeout = 6; + command = "${notify-send} 'Idling in 90 seconds'"; + } + { + # timeout = 570; + timeout = 7; + command = "${notify-send} 'Idling in 60 seconds'"; + } + { + # timeout = 600; + timeout = 8; + command = "${notify-send} 'Idling in 30 seconds...'"; + } + { + # timeout = 630; + timeout = 9; + command = "${swaylock} -f"; + } + { + # timeout = 660; + timeout = 10; + command = "${swaymsg} 'output * dpms off'"; + resumeCommand = "${swaymsg} 'output * dpms on' & ${swaymsg} exec -- maybe-good-morning &"; + } + ]; + }); + */ + + wayland.windowManager.hyprland = { + enable = true; + extraConfig = '' + # See https://wiki.hyprland.org/Configuring/Monitors/ + monitor=,preferred,auto,auto + monitor=desc:LG Display 0x0521,preferred,auto,1 + + # See https://wiki.hyprland.org/Configuring/Keywords/ for more + + # Execute your favorite apps at launch + exec-once = firefox & kitty --single-instance & hyprpaper & mako & /usr/lib/polkit-kde-authentication-agent-1 + exec-once = swayidle -w timeout 600 'notify-send "Locking in 30 seconds..."' timeout 630 'swaylock -f' timeout 660 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on && maybe-good-morning' before-sleep 'swaylock -f' + exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + + env = XCURSOR_SIZE,24 + + input { + kb_layout = us + kb_options = ctrl:nocaps + touchpad { + natural_scroll = yes + } + # kb_variant = + # kb_model = + # kb_rules = + + follow_mouse = 2 + + repeat_delay = 200 + repeat_rate = 60 + + touchpad { + natural_scroll = yes + tap-to-click = true + middle_button_emulation = true + } + + force_no_accel = true + sensitivity = 1 # -1.0 - 1.0, 0 means no modification. + } + + misc { + disable_hyprland_logo = true + disable_splash_rendering = true + } + + binds { + allow_workspace_cycles = true + } + + general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 3 + gaps_out = 6 + border_size = 1 + no_cursor_warps = true + resize_on_border = true + + col.active_border = rgba(74c7ecff) 45deg + col.inactive_border = rgba(59595988) + + layout = dwindle + } + + decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 3 + # blur = yes + # blur_size = 3 + # blur_passes = 1 + # blur_new_optimizations = on + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) + + dim_inactive = 0.5 + } + + animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + bezier=overshot,0.05,0.9,0.1,1.1 + + animation = windows, 1, 2, default + animation = windowsOut, 1, 2, default, popin 80% + animation = border, 1, 2, default + animation = borderangle, 1, 2, default + animation = fade, 1, 2, default + animation = workspaces, 1, 2, default + } + + dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + pseudotile = yes + preserve_split = 1 + no_gaps_when_only = true + } + + master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true + } + + gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = on + } + + # Example per-device config + # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more + # device:epic-mouse-v1 { + # sensitivity = -0.5 + # } + + # Example windowrule v1 + # windowrule = float, ^(kitty)$ + # Example windowrule v2 + # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + + # See https://wiki.hyprland.org/Configuring/Keywords/ for more + $mainMod = SUPER + + # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more + bind = $mainMod, return, exec, kitty --single-instance + bind = $mainMod SHIFT, return, exec, kitty + bind = $mainMod, U, exec, firefox + bind = $mainMod, space, exec, wofi --show drun + bind = $mainMod, C, killactive, + bind = $mainMod, M, exit, + bind = $mainMod, E, exec, dolphin + bind = $mainMod, F, togglefloating, + bind = $mainMod SHIFT, F, fullscreen, + bind = $mainMod, R, exec, anyrun + bind = $mainMod, S, pseudo, # dwindle + bind = $mainMod, P, togglesplit, # dwindle + + # Move focus with mainMod + arrow keys + bind = $mainMod, left, movefocus, l + bind = $mainMod, right, movefocus, r + bind = $mainMod, up, movefocus, u + bind = $mainMod, down, movefocus, d + bind = $mainMod, h, movefocus, l + bind = $mainMod, l, movefocus, r + bind = $mainMod, k, movefocus, u + bind = $mainMod, j, movefocus, d + + bind = $mainMod SHIFT, H, swapwindow, l + bind = $mainMod SHIFT, L, swapwindow, r + bind = $mainMod SHIFT, K, swapwindow, u + bind = $mainMod SHIFT, J, swapwindow, d + + bind = $mainMod SHIFT, V, exec, pamixer --default-source --toggle-mute + bind = , XF86AudioMicMute, exec, pamixer --default-source --toggle-mute + bind = , XF86AudioMute, exec, pamixer --toggle-mute + bind = , XF86AudioRaiseVolume, exec, pamixer --increase 5 + bind = , XF86AudioLowerVolume, exec, pamixer --decrease 5 + bind = CTRL, XF86AudioRaiseVolume, exec, pamixer --increase 1 + bind = CTRL, XF86AudioLowerVolume, exec, pamixer --decrease 1 + + bind = , XF86AudioPlay, exec, playerctl play-pause + bind = , XF86AudioNext, exec, playerctl next + bind = , XF86AudioPrev, exec, playerctl previous + + bind = $mainMod, tab, workspace, previous + + # Switch workspaces with mainMod + [0-9] + bind = $mainMod, 1, workspace, 1 + bind = $mainMod, 2, workspace, 2 + bind = $mainMod, 3, workspace, 3 + bind = $mainMod, 4, workspace, 4 + bind = $mainMod, 5, workspace, 5 + bind = $mainMod, 6, workspace, 6 + bind = $mainMod, 7, workspace, 7 + bind = $mainMod, 8, workspace, 8 + bind = $mainMod, 9, workspace, 9 + bind = $mainMod, 0, workspace, 10 + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + bind = $mainMod SHIFT, 1, movetoworkspace, 1 + bind = $mainMod SHIFT, 2, movetoworkspace, 2 + bind = $mainMod SHIFT, 3, movetoworkspace, 3 + bind = $mainMod SHIFT, 4, movetoworkspace, 4 + bind = $mainMod SHIFT, 5, movetoworkspace, 5 + bind = $mainMod SHIFT, 6, movetoworkspace, 6 + bind = $mainMod SHIFT, 7, movetoworkspace, 7 + bind = $mainMod SHIFT, 8, movetoworkspace, 8 + bind = $mainMod SHIFT, 9, movetoworkspace, 9 + bind = $mainMod SHIFT, 0, movetoworkspace, 10 + + bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- + bind = , XF86MonBrightnessUp, exec, brightnessctl set +10% + bind = SHIFT, XF86MonBrightnessDown, exec, brightnessctl set 1% + bind = SHIFT, XF86MonBrightnessUp, exec, brightnessctl set 100% + bind = CTRL, XF86MonBrightnessDown, exec, brightnessctl set 1%- + bind = CTRL, XF86MonBrightnessUp, exec, brightnessctl set +1% + + bind = $mainMod SHIFT, S, exec, clipshot + + # Scroll through existing workspaces with mainMod + scroll + bind = $mainMod, mouse_down, workspace, e+1 + bind = $mainMod, mouse_up, workspace, e-1 + + bind = CTRL SHIFT $mainMod, L, exec, swaylock + + # Move/resize windows with mainMod + LMB/RMB and dragging + bindm = $mainMod, mouse:272, movewindow + bindm = $mainMod, mouse:273, resizewindow + + bind = $mainMod CTRL, space, exec, makoctl dismiss + bind = $mainMod SHIFT CTRL, space, exec, makoctl restore + bind = $mainMod SHIFT, space, exec, makoctl invoke + + bind = $mainMod, E, exec, thunar + ''; }; wayland.windowManager.sway = { - # TODO: - # + Super+r should rotate the selected group of windows. - # + Super+Control+{1-9} should control the size of the preselect space. - # + Super+Shift+b should balance the size of all selected nodes. - # set $tilers "(wezterm.*|kitty.*|firefox.*|slack.*|Slack.*|thunar.*|Alacritty.*|alacritty.*|Discord.*|discord.*)" - # for_window [title=".*"] floating enable - # for_window [app_id=$tilers] floating disable - # - # # for_window [title=".*"] opacity $opacity - # - # client.focused #74c7ec #74c7ec #74c7ec #74c7ec #74c7ec - # client.focused_inactive #100814 #100814 #9b9ebf #100814 #100814 - # client.unfocused #100814 #100814 #9b9ebf #100814 #100814 - # - # # TODO: I forget why I needed this - could google it I expect? - # exec /usr/lib/polkit-kde-authentication-agent-1 - # - # # prevent all windows from stealing focus - # no_focus [class=".*"] + /* + TODO: + + Super+r should rotate the selected group of windows. + + Super+Control+{1-9} should control the size of the preselect space. + + Super+Shift+b should balance the size of all selected nodes. + set $tilers "(wezterm.*|kitty.*|firefox.*|slack.*|Slack.*|thunar.*|Alacritty.*|alacritty.*|Discord.*|discord.*)" + for_window [title=".*"] floating enable + for_window [app_id=$tilers] floating disable + + # for_window [title=".*"] opacity $opacity + + # TODO: I forget why I needed this - could google it I expect? + exec /usr/lib/polkit-kde-authentication-agent-1 + + # prevent all windows from stealing focus + no_focus [class=".*"] + */ enable = true; @@ -323,42 +639,42 @@ }; assigns = {}; bars = []; - colors = with config.colorScheme.colors; { - background = "#1e1e2e"; + colors = with colors; { + background = bg; focused = { - background = base03; - border = base0C; - childBorder = base0C; - indicator = base0C; - text = base05; + background = bg; + border = primary; + childBorder = primary; + indicator = primary; + text = bg; }; focusedInactive = { - background = base03; - border = base0D; - childBorder = base0D; - indicator = base0D; - text = base05; + background = bg; + border = primary; + childBorder = primary; + indicator = primary; + text = bg; }; placeholder = { - background = base03; - border = base0D; - childBorder = base0D; - indicator = base0D; - text = base05; + background = bg; + border = primary; + childBorder = primary; + indicator = primary; + text = text; }; unfocused = { - background = base03; - border = base03; - childBorder = base03; - indicator = base03; - text = base05; + background = bg; + border = bg; + childBorder = bg; + indicator = bg; + text = text; }; urgent = { - background = base03; - border = base0F; - childBorder = base0F; - indicator = base0F; - text = base05; + background = urgent; + border = urgent; + childBorder = urgent; + indicator = urgent; + text = bg; }; }; }; @@ -384,473 +700,436 @@ }) ]; - programs = { - # TODO: hyprland = { - # enable = true; - # }; - - waybar = { - enable = true; - settings = { - mainBar = { - "layer" = "top"; - "position" = "bottom"; - "output" = ["eDP-1" "DP-3"]; - "height" = 32; - "modules-left" = ["clock" "sway/window"]; - "modules-center" = ["sway/workspaces"]; - "modules-right" = [ - "mpris" - "idle_inhibitor" - "bluetooth" - # "wireplumber", - "pulseaudio" - # "network", - "cpu" - "memory" - # "temperature", - "backlight" - "battery" - "tray" - ]; - "bluetooth" = { - "format" = ""; - "format-connected" = ""; - "format-connected-battery" = ""; - # "format-device-preference" = [ "device1", "device2" ], # preference list deciding the displayed devic; - "tooltip-format" = "{controller_alias}@{controller_address} ({num_connections} connected)"; - "tooltip-format-connected" = "{controller_alias}@{controller_address} ({num_connections} connected)\n{device_enumerate}"; - "tooltip-format-enumerate-connected" = "{device_alias}@{device_address}"; - "tooltip-format-enumerate-connected-battery" = "{device_alias}@{device_address} (󰁹 {device_battery_percentage}%)"; + programs.waybar = { + enable = true; + settings = { + mainBar = { + "layer" = "top"; + "position" = "bottom"; + "output" = ["eDP-1" "DP-3"]; + "height" = 32; + "modules-left" = ["clock" "sway/window"]; + "modules-center" = ["sway/workspaces"]; + "modules-right" = [ + "mpris" + "idle_inhibitor" + "bluetooth" + # "wireplumber", + "pulseaudio" + # "network", + "cpu" + "memory" + # "temperature", + "backlight" + "battery" + "tray" + ]; + "bluetooth" = { + "format" = ""; + "format-connected" = ""; + "format-connected-battery" = ""; + # "format-device-preference" = [ "device1", "device2" ], # preference list deciding the displayed devic; + "tooltip-format" = "{controller_alias}@{controller_address} ({num_connections} connected)"; + "tooltip-format-connected" = "{controller_alias}@{controller_address} ({num_connections} connected)\n{device_enumerate}"; + "tooltip-format-enumerate-connected" = "{device_alias}@{device_address}"; + "tooltip-format-enumerate-connected-battery" = "{device_alias}@{device_address} (󰁹 {device_battery_percentage}%)"; + }; + # "wireplumber" = ; + # "format" = "{volume}% {icon}"; + # "format-muted" = ""; + # "on-click" = "helvum; + # }, + "sway/workspaces" = { + "disable-scroll" = false; + "persistent_workspaces" = { + "1" = []; + "2" = []; + "3" = []; + "4" = []; + "5" = []; + "6" = []; + "7" = []; + "8" = []; + "9" = []; + # "10" = [; }; - # "wireplumber" = ; - # "format" = "{volume}% {icon}"; - # "format-muted" = ""; - # "on-click" = "helvum; - # }, - "sway/workspaces" = { - "disable-scroll" = false; - "persistent_workspaces" = { - "1" = []; - "2" = []; - "3" = []; - "4" = []; - "5" = []; - "6" = []; - "7" = []; - "8" = []; - "9" = []; - # "10" = [; - }; - "all-outputs" = true; - "format" = "{name}"; - }; - "idle_inhibitor" = { - "format" = "{icon}"; - "format-icons" = { - "activated" = "󰈈"; - "deactivated" = "󰈉"; - }; - }; - "tray" = { - "icon-size" = 24; - "spacing" = 4; - }; - "clock" = { - "interval" = 1; - "format" = "{:%a %b %d %H:%M:%S}"; - }; - "cpu" = { - "format" = "{usage} "; - "tooltip" = true; - "interval" = 3; - }; - "memory" = { - "format" = "{} 󰍛"; - }; - "temperature" = { - # "thermal-zone" = 2; - # "hwmon-path" = "/sys/class/hwmon/hwmon2/temp1_input"; - "critical-threshold" = 80; - # "format-critical" = "{temperatureC}°C {icon}"; - "format" = "{temperatureC}°C {icon}"; - "format-icons" = ["" "" ""]; - }; - "backlight" = { - # "device" = "acpi_video1"; - "format" = "{percent}% {icon}"; - "format-icons" = ["" ""]; - }; - "battery" = { - "states" = { - # "good" = 95; - "warning" = 30; - "critical" = 1; - }; - "format" = "{capacity}% {icon}"; - "format-charging" = "{capacity}% 󱐋"; - "format-plugged" = "{capacity}% 󰚥"; - "format-alt" = "{time} {icon}"; - "format-good" = ""; # An empty format will hide the modul; - "format-full" = "󰁹"; - "format-icons" = ["󰂎" "󰁻" "󰁽" "󰁿" "󰂂"]; - }; - "network" = { - "format-wifi" = "{essid} ({signalStrength}%) "; - "format-ethernet" = "{ifname}: {ipaddr}/{cidr} "; - "format-linked" = "{ifname} (No IP) "; - "format-disconnected" = "Disconnected ⚠"; - "format-alt" = "{ifname}: {ipaddr}/{cidr}"; - }; - "mpris" = { - "format" = "{title} by {artist}"; - }; - "pulseaudio" = { - # "scroll-step" = 1, # %, can be a floa; - "format" = "{volume} {icon} {format_source}"; - #"format" = "{volume}% {icon} {format_source}"; - #"format-bluetooth" = "{volume}% {icon} {format_source}"; - #"format-bluetooth-muted" = " {icon} {format_source}"; - #"format-muted" = " {format_source}"; - "format-muted" = "󰝟 {format_source}"; - "format-source" = ""; - "format-source-muted" = ""; - "format-icons" = { - "headphones" = ""; - "handsfree" = "󱥋"; - "headset" = "󰋎"; - "phone" = ""; - "portable" = ""; - "car" = ""; - "default" = ["" "" ""]; - }; - # TODO: toggle mute? - "on-click" = "pavucontrol"; + "all-outputs" = true; + "format" = "{name}"; + }; + "idle_inhibitor" = { + "format" = "{icon}"; + "format-icons" = { + "activated" = "󰈈"; + "deactivated" = "󰈉"; }; }; - }; - style = '' - @define-color base #1e1e2e; - @define-color mantle #181825; - @define-color crust #11111b; - - @define-color text #cdd6f4; - @define-color subtext0 #a6adc8; - @define-color subtext1 #bac2de; - - @define-color surface0 #313244; - @define-color surface1 #45475a; - @define-color surface2 #585b70; - - @define-color overlay0 #6c7086; - @define-color overlay1 #7f849c; - @define-color overlay2 #9399b2; - - @define-color blue #89b4fa; - @define-color lavender #b4befe; - @define-color sapphire #74c7ec; - @define-color sky #89dceb; - @define-color teal #94e2d5; - @define-color green #a6e3a1; - @define-color yellow #f9e2af; - @define-color peach #fab387; - @define-color maroon #eba0ac; - @define-color red #f38ba8; - @define-color mauve #cba6f7; - @define-color pink #f5c2e7; - @define-color flamingo #f2cdcd; - @define-color rosewater #f5e0dc; - - * { - border-radius: 0; - font-family: "IosevkaLyteTerm", "Symbols Nerd Font Mono", sans-serif; - font-size: 16px; - } - - window#waybar { - min-height: 32px; - background-color: @base; - color: @crust; - border-top: solid @sapphire 1px; - transition: none; - } - - window#waybar.hidden { - /* opacity: 0.2; */ - } - - window#waybar.empty { - /* opacity: 0.2; */ - } - - #workspaces button { - padding: 0 0.75em; - background-color: transparent; - border-top: solid @sapphire 1px; - transition: none; - } - - #workspaces button:hover { - /* - * background: rgba(0, 0, 0, 0.2); - * box-shadow: inherit; - */ - } - - #workspaces button.visible { - background-color: @base; - } - - #workspaces button.focused { - color: @base; - background-color: @sapphire; - } - - #workspaces button.persistent { - color: @surface2; - } - - #workspaces button.urgent { - color: @base; - background-color: @red; - border-top: solid @red 1px; - } - - #mode { - background-color: transparent; - } - - #clock, - #battery, - #cpu, - #memory, - #temperature, - #backlight, - #network, - #pulseaudio, - #custom-media, - #tray, - #mode, - #idle_inhibitor, - #mpris, - #window, - #mpd { - margin-top: 1px; - padding: 0 0.75em; - background-color: inherit; - color: @text; - } - - #clock {} - - #battery { - /* background-color: #ffffff; */ - /* color: #000000; */ - } - - #battery.charging { - /* color: #ffffff; */ - /* background-color: #26A65B; */ - } - - @keyframes blink { - to { - background-color: #ffffff; - color: #000000; - } - } - - #battery.critical:not(.charging) { - background-color: @red; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-direction: alternate; - } - - #bluetooth, - #bluetooth.connected-battery, - #bluetooth.connected.battery, - #bluetooth.connected { - color: @text; - } - - label:focus { - /* background-color: #000000; */ - } - - #cpu { - /* background-color: #2ecc71; */ - /* color: #000000; */ - } - - #memory { - /* background-color: #9b59b6; */ - } - - #backlight { - /* background-color: #90b1b1; */ - } - - #network { - /* background-color: #2980b9; */ - } - - #network.disconnected { - /* background-color: #f53c3c; */ - } - - #pulseaudio { - color: @red; - /* background-color: #f1c40f; */ - /* color: #000000; */ - } - - #pulseaudio.source-muted { - /* background-color: #90b1b1; */ - color: @text; - } - - #custom-media { - /* background-color: #66cc99; */ - /* color: #2a5c45; */ - /* min-width: 100px; */ - } - - #custom-media.custom-spotify { - /* background-color: #66cc99; */ - } - - #custom-media.custom-vlc { - /* background-color: #ffa000; */ - } - - #temperature { - /* background-color: #f0932b; */ - } - - #temperature.critical { - /* background-color: #eb4d4b; */ - } - - #tray { - /* background-color: #2980b9; */ - } - - #idle_inhibitor { - /* background-color: #2d3436; */ - } - - #idle_inhibitor.activated { - /* background-color: #ecf0f1; */ - /* color: #2d3436; */ - } - - #mpd { - /* background-color: #66cc99; */ - /* color: #2a5c45; */ - } - - #mpd.disconnected { - /* background-color: #f53c3c; */ - } - - #mpd.stopped { - /* background-color: #90b1b1; */ - } - - #mpd.paused { - /* background-color: #51a37a; */ - } - ''; - systemd = { - enable = true; - }; - }; - - firefox = { - # TODO: this should be able to work on macos, no? - # TODO: enable dark theme by default - enable = true; - - # TODO: uses nixpkgs.pass so pass otp doesn't work - package = pkgs.firefox.override {extraNativeMessagingHosts = [pkgs.passff-host];}; - - # extensions = with pkgs.nur.repos.rycee.firefox-addons; [ - # ublock-origin - # ]; # TODO: would be nice to have _all_ my firefox stuff managed here instead of Firefox Sync maybe? - - profiles = { - daniel = { - id = 0; - settings = { - "general.smoothScroll" = true; + "tray" = { + "icon-size" = 24; + "spacing" = 4; + }; + "clock" = { + "interval" = 1; + "format" = "{:%a %b %d %H:%M:%S}"; + }; + "cpu" = { + "format" = "{usage} "; + "tooltip" = true; + "interval" = 3; + }; + "memory" = { + "format" = "{} 󰍛"; + }; + "temperature" = { + # "thermal-zone" = 2; + # "hwmon-path" = "/sys/class/hwmon/hwmon2/temp1_input"; + "critical-threshold" = 80; + # "format-critical" = "{temperatureC}°C {icon}"; + "format" = "{temperatureC}°C {icon}"; + "format-icons" = ["" "" ""]; + }; + "backlight" = { + # "device" = "acpi_video1"; + "format" = "{percent}% {icon}"; + "format-icons" = ["" ""]; + }; + "battery" = { + "states" = { + # "good" = 95; + "warning" = 30; + "critical" = 1; }; - - extraConfig = '' - user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); - // user_pref("full-screen-api.ignore-widgets", true); - user_pref("media.ffmpeg.vaapi.enabled", true); - user_pref("media.rdd-vpx.enabled", true); - ''; - - userChrome = '' - #TabsToolbar { - visibility: collapse; - } - - #webrtcIndicator { - display: none; - } - - #main-window[tabsintitlebar=" - true "]:not([extradragspace=" - true "]) #TabsToolbar>.toolbar-items { - opacity: 0; - pointer-events: none; - } - - #main-window:not([tabsintitlebar=" - true "]) #TabsToolbar { - visibility: collapse !important; - } - ''; - - # userContent = '' - # ''; + "format" = "{capacity}% {icon}"; + "format-charging" = "{capacity}% 󱐋"; + "format-plugged" = "{capacity}% 󰚥"; + "format-alt" = "{time} {icon}"; + "format-good" = ""; # An empty format will hide the modul; + "format-full" = "󰁹"; + "format-icons" = ["󰂎" "󰁻" "󰁽" "󰁿" "󰂂"]; + }; + "network" = { + "format-wifi" = "{essid} ({signalStrength}%) "; + "format-ethernet" = "{ifname}: {ipaddr}/{cidr} "; + "format-linked" = "{ifname} (No IP) "; + "format-disconnected" = "Disconnected ⚠"; + "format-alt" = "{ifname}: {ipaddr}/{cidr}"; + }; + "mpris" = { + "format" = "{title} by {artist}"; + }; + "pulseaudio" = { + # "scroll-step" = 1, # %, can be a floa; + "format" = "{volume} {icon} {format_source}"; + #"format" = "{volume}% {icon} {format_source}"; + #"format-bluetooth" = "{volume}% {icon} {format_source}"; + #"format-bluetooth-muted" = " {icon} {format_source}"; + #"format-muted" = " {format_source}"; + "format-muted" = "󰝟 {format_source}"; + "format-source" = ""; + "format-source-muted" = ""; + "format-icons" = { + "headphones" = ""; + "handsfree" = "󱥋"; + "headset" = "󰋎"; + "phone" = ""; + "portable" = ""; + "car" = ""; + "default" = ["" "" ""]; + }; + # TODO: toggle mute? + "on-click" = "pavucontrol"; }; }; }; + style = with colors.withHashPrefix; '' + * { + border-radius: 0; + font-family: "${font.name}", "Symbols Nerd Font Mono", sans-serif; + font-size: 16px; + } - swaylock = { + window#waybar { + min-height: 32px; + background-color: ${bg}; + color: ${text}; + border-top: solid ${blue} 1px; + transition: none; + } + + window#waybar.hidden { + /* opacity: 0.2; */ + } + + window#waybar.empty { + /* opacity: 0.2; */ + } + + #workspaces button { + padding: 0 0.75em; + background-color: transparent; + border-top: solid ${primary} 1px; + transition: none; + } + + #workspaces button:hover { + /* + * background: rgba(0, 0, 0, 0.2); + * box-shadow: inherit; + */ + } + + #workspaces button.visible { + background-color: ${bg}; + } + + #workspaces button.focused { + color: ${bg}; + background-color: ${blue}; + } + + #workspaces button.persistent { + color: ${text}; + } + + #workspaces button.urgent { + background-color: ${urgent}; + color: ${bg}; + border-top: solid ${urgent} 1px; + } + + #mode { + background-color: transparent; + } + + #clock, + #battery, + #cpu, + #memory, + #temperature, + #backlight, + #network, + #pulseaudio, + #custom-media, + #tray, + #mode, + #idle_inhibitor, + #mpris, + #window, + #mpd { + margin-top: 1px; + padding: 0 0.75em; + background-color: inherit; + color: ${text}; + } + + #clock {} + + #battery { + /* background-color: #ffffff; */ + /* color: #000000; */ + } + + #battery.charging { + /* color: #ffffff; */ + /* background-color: #26A65B; */ + } + + @keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } + } + + #battery.critical:not(.charging) { + background-color: ${red}; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } + + #bluetooth, + #bluetooth.connected-battery, + #bluetooth.connected.battery, + #bluetooth.connected { + color: ${text}; + } + + label:focus { + /* background-color: #000000; */ + } + + #cpu { + /* background-color: #2ecc71; */ + /* color: #000000; */ + } + + #memory { + /* background-color: #9b59b6; */ + } + + #backlight { + /* background-color: #90b1b1; */ + } + + #network { + /* background-color: #2980b9; */ + } + + #network.disconnected { + /* background-color: #f53c3c; */ + } + + #pulseaudio { + color: ${red}; + /* background-color: #f1c40f; */ + /* color: #000000; */ + } + + #pulseaudio.source-muted { + /* background-color: #90b1b1; */ + color: ${text}; + } + + #custom-media { + /* background-color: #66cc99; */ + /* color: #2a5c45; */ + /* min-width: 100px; */ + } + + #custom-media.custom-spotify { + /* background-color: #66cc99; */ + } + + #custom-media.custom-vlc { + /* background-color: #ffa000; */ + } + + #temperature { + /* background-color: #f0932b; */ + } + + #temperature.critical { + /* background-color: #eb4d4b; */ + } + + #tray { + /* background-color: #2980b9; */ + } + + #idle_inhibitor { + /* background-color: #2d3436; */ + } + + #idle_inhibitor.activated { + /* background-color: #ecf0f1; */ + /* color: #2d3436; */ + } + + #mpd { + /* background-color: #66cc99; */ + /* color: #2a5c45; */ + } + + #mpd.disconnected { + /* background-color: #f53c3c; */ + } + + #mpd.stopped { + /* background-color: #90b1b1; */ + } + + #mpd.paused { + /* background-color: #51a37a; */ + } + ''; + systemd = { enable = true; - settings = { - color = "ffffffff"; - image = "~/.wallpaper"; - font = "IosevkaLyteTerm"; - show-failed-attempts = true; - ignore-empty-password = true; + }; + }; - indicator-radius = "150"; - indicator-thickness = "30"; + programs.firefox = { + # TODO: this should be able to work on macos, no? + # TODO: enable dark theme by default + enable = true; - inside-color = "11111100"; - inside-clear-color = "11111100"; - inside-ver-color = "11111100"; - inside-wrong-color = "11111100"; + # TODO: uses nixpkgs.pass so pass otp doesn't work + package = pkgs.firefox.override {extraNativeMessagingHosts = [pkgs.passff-host];}; - key-hl-color = "a1efe4"; - separator-color = "11111100"; + # extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + # ublock-origin + # ]; # TODO: would be nice to have _all_ my firefox stuff managed here instead of Firefox Sync maybe? - line-color = "111111cc"; - line-uses-ring = true; + profiles = { + daniel = { + id = 0; + settings = { + "general.smoothScroll" = true; + }; - ring-color = "111111cc"; - ring-clear-color = "f4bf75"; - ring-ver-color = "66d9ef"; - ring-wrong-color = "f92672"; + extraConfig = '' + user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); + // user_pref("full-screen-api.ignore-widgets", true); + user_pref("media.ffmpeg.vaapi.enabled", true); + user_pref("media.rdd-vpx.enabled", true); + ''; + + userChrome = '' + #TabsToolbar { + visibility: collapse; + } + + #webrtcIndicator { + display: none; + } + + #main-window[tabsintitlebar=" + true "]:not([extradragspace=" + true "]) #TabsToolbar>.toolbar-items { + opacity: 0; + pointer-events: none; + } + + #main-window:not([tabsintitlebar=" + true "]) #TabsToolbar { + visibility: collapse !important; + } + ''; + + # userContent = '' + # ''; }; }; }; + + programs.swaylock = { + enable = true; + settings = { + color = "ffffffff"; + image = "~/.wallpaper"; + font = font.name; + show-failed-attempts = true; + ignore-empty-password = true; + + indicator-radius = "150"; + indicator-thickness = "30"; + + inside-color = "11111100"; + inside-clear-color = "11111100"; + inside-ver-color = "11111100"; + inside-wrong-color = "11111100"; + + key-hl-color = "a1efe4"; + separator-color = "11111100"; + + line-color = "111111cc"; + line-uses-ring = true; + + ring-color = "111111cc"; + ring-clear-color = "f4bf75"; + ring-ver-color = "66d9ef"; + ring-wrong-color = "f92672"; + }; + }; } diff --git a/modules/nixos/sway.nix b/modules/nixos/sway.nix index 6dcfe57..3ab61e5 100644 --- a/modules/nixos/sway.nix +++ b/modules/nixos/sway.nix @@ -1,32 +1,4 @@ -{pkgs, ...}: let - # this is unused because it's referenced by my sway config - dbus-sway-environment = pkgs.writeTextFile { - name = "dbus-sway-environment"; - destination = "/bin/dbus-sway-environment"; - executable = true; - - text = '' - dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway - systemctl --user stop wireplumber xdg-desktop-portal xdg-desktop-portal-wlr - systemctl --user start wireplumber xdg-desktop-portal xdg-desktop-portal-wlr - ''; - }; - - # this is unused because it's referenced by my sway config - configure-gtk = pkgs.writeTextFile { - name = "configure-gtk"; - destination = "/bin/configure-gtk"; - executable = true; - text = let - schema = pkgs.gsettings-desktop-schemas; - datadir = "${schema}/share/gsettings-schemas/${schema.name}"; - in '' - export XDG_DATA_DIRS="${datadir}:$XDG_DATA_DIRS - gnome_schema = org.gnome.desktop.interface - gsettings set $gnome_schema gtk-theme 'Catppuccin-Mocha' - ''; - }; -in { +{pkgs, ...}: { imports = [./pipewire.nix]; # services.xserver.libinput.enable = true;