diff --git a/X11/alacritty.nix b/X11/alacritty.nix new file mode 100644 index 0000000..82bd291 --- /dev/null +++ b/X11/alacritty.nix @@ -0,0 +1,53 @@ +{ pkgs, config, lib, ... } : + +let + pkgsUnstable = import {}; +in +{ + home.packages = [ + # Enable the FSM font with NF variant + (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) + ]; + + programs.alacritty = { + enable = true; + package = pkgsUnstable.alacritty; + + settings = { + background_opacity = 0.95; + font = { + size = 14.0; + normal.family = "Fantasque Sans Mono Nerd Font"; + }; + shell = { + program = "/bin/sh"; + args = [ "-ic" "fish" ]; + }; + colors = { + # Default colors + primary.background = "0xf1f1f1"; + primary.foreground = "0x424242"; + + # Normal colors + normal.black = "0x212121"; + normal.red = "0xc30771"; + normal.green = "0x10a778"; + normal.yellow = "0xa89c14"; + normal.blue = "0x008ec4"; + normal.magenta = "0x523c79"; + normal.cyan = "0x20a5ba"; + normal.white = "0xe0e0e0"; + + # Bright colors + bright.black = "0x212121"; + bright.red = "0xfb007a"; + bright.green = "0x5fd7af"; + bright.yellow = "0xf3e430"; + bright.blue = "0x20bbfc"; + bright.magenta = "0x6855de"; + bright.cyan = "0x4fb8cc"; + bright.white = "0xf1f1f1"; + }; + }; + }; +} diff --git a/X11/default.nix b/X11/default.nix new file mode 100644 index 0000000..6ce8805 --- /dev/null +++ b/X11/default.nix @@ -0,0 +1,36 @@ +{ pkgs, config, lib, ... } : + +{ + imports = [ ./packages.nix ]; + + home.sessionVariables = { + # Set up Java font style + _JAVA_OPTIONS = "-Dawt.useSystemAAFontSettings=lcd"; + }; + + # X Session settings + xsession.enable = true; + + # Wallpaper + home.file.wallpaper = { + source = ./. + "/wallpaper.jpg"; + target = "wallpaper.jpg"; + }; + + # Cursor + xsession.pointerCursor = { + package = pkgs.numix-cursor-theme; + name = "Numix-Cursor-Light"; + size = 32; + }; + + # MIME set ups + xdg.enable = true; + xdg.mimeApps.enable = true; + xdg.mimeApps.defaultApplications = { + "x-scheme-handler/http" = [ "firefox.desktop" ]; + "x-scheme-handler/https" = [ "firefox.desktop" ]; + "x-scheme-handler/ftp" = [ "firefox.desktop" ]; + "x-scheme-handler/ftps" = [ "firefox.desktop" ]; + }; +} diff --git a/X11/hidpi.nix b/X11/hidpi.nix new file mode 100644 index 0000000..176d9a6 --- /dev/null +++ b/X11/hidpi.nix @@ -0,0 +1,23 @@ +{ pkgs, config, lib, ... } : + +{ + # X resources for 4k monitor + home.file."4k.Xresources" = { + target = ".config/X11/.Xresources"; + text = '' + Xft.dpi: 192 + ! These might also be useful depending on your monitor and personal preference: + Xft.autohint: 0 + Xft.lcdfilter: lcddefault + Xft.hintstyle: hintfull + Xft.hinting: 1 + Xft.antialias: 1 + Xft.rgba: rgb + ''; + }; + # Load 4k Xresources + xsession.initExtra = '' + xrdb -merge ~/.config/X11/.Xresources + feh --bg-fill ~/wallpaper.jpg + ''; +} diff --git a/X11/i3.nix b/X11/i3.nix new file mode 100644 index 0000000..650b5a1 --- /dev/null +++ b/X11/i3.nix @@ -0,0 +1,128 @@ +{ pkgs, config, lib, ... } : + +let + mod = "Mod4"; + workspaces = [ + "1: web" + "2: chat" + "3: code" + "4: music" + "5: extra" + "6: 6" + "7: 7" + "8: 8" + "9: 9" + "10: 10" + ]; + wsAttrs = builtins.listToAttrs ( + map + (i: { name = toString (remainder i 10); value = builtins.elemAt workspaces (i - 1); }) + (range 1 11) + ); + remainder = x: y: x - (builtins.div x y) * y; + range = from: to: + let + f = cur: if cur == to then [] else [cur] ++ f (cur + 1); + in f from; +in +{ + ## i3 window manager + xsession.windowManager.i3 = { + enable = true; + config.assigns = { + "${wsAttrs."1"}" = [ { class = "^Firefox$"; } ]; + "${wsAttrs."2"}" = [ { class = "^Discord$"; } ]; + }; + config.bars = [ { + command = "${pkgs.i3-gaps}/bin/i3bar -t"; + statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ~/.config/i3status-rust/config-default.toml"; + position = "top"; + colors = { + background = "#00000080"; + statusline = "#ffffff"; + separator = "#666666"; + + focusedWorkspace = { background = "#4c7899"; border = "#285577"; text = "#ffffff"; }; + activeWorkspace = { background = "#333333"; border = "#5f676a"; text = "#ffffff"; }; + inactiveWorkspace = { background = "#333333"; border = "#222222"; text = "#888888"; }; + urgentWorkspace = { background = "#2f343a"; border = "#900000"; text = "#ffffff"; }; + bindingMode = { background = "#2f343a"; border = "#900000"; text = "#ffffff"; }; + }; + } ]; + config.fonts = { names = [ "FantasqueSansMono Nerd Font Mono" "monospace" ]; size = 11.0; }; + config.gaps.outer = 5; + config.gaps.inner = 5; + config.gaps.smartGaps = true; + config.modifier = mod; + config.terminal = "alacritty"; + config.window.titlebar = false; + + # Keybindings + config.keybindings = lib.mkOptionDefault ({ + ## vim-style movements + "${mod}+h" = "focus left"; + "${mod}+j" = "focus down"; + "${mod}+k" = "focus up"; + "${mod}+l" = "focus right"; + "${mod}+Shift+h" = "move left"; + "${mod}+Shift+j" = "move down"; + "${mod}+Shift+k" = "move up"; + "${mod}+Shift+l" = "move right"; + ## Splits + "${mod}+v" = "split v"; + "${mod}+Shift+v" = "split h"; + ## Run + "${mod}+r" = "exec ${pkgs.dmenu}/bin/dmenu_run"; + "${mod}+d" = "exec i3-dmenu-desktop --dmenu='${pkgs.dmenu}/bin/dmenu -i'"; + } // ( + builtins.listToAttrs (lib.flatten (map (key: [ + { + name = "${mod}+${key}"; + value = "workspace ${builtins.getAttr key wsAttrs}"; + } + { + name = "${mod}+Shift+${key}"; + value = "move to workspace ${builtins.getAttr key wsAttrs}"; + } + ]) (builtins.attrNames wsAttrs)) + ))); + }; + + + # i3status + programs.i3status-rust.enable = true; + programs.i3status-rust.bars.default = { + icons = "material-nf"; + theme = "native"; + settings = { + icons_format = " {icon} "; + }; + blocks = [ + { + block = "bluetooth"; + mac = "5C:52:30:D8:E2:9D"; + format = "Airpods Pro {percentage}"; + format_unavailable = "Airpods Pro XX"; + } + { + block = "cpu"; + format = "{utilization}"; + } + { + block = "hueshift"; + } + { + block = "memory"; + } + { + block = "net"; + } + { + block = "sound"; + } + { + block = "time"; + } + ]; + }; +} diff --git a/X11/packages.nix b/X11/packages.nix new file mode 100644 index 0000000..6880a1b --- /dev/null +++ b/X11/packages.nix @@ -0,0 +1,38 @@ +{ pkgs, config, lib, ... }: + +let + pkgsUnstable = import {}; + # Override nss to open links in Firefox (https://github.com/NixOS/nixpkgs/issues/78961) + discordPkg = pkgsUnstable.discord.override { nss = pkgs.nss_latest; }; +in +{ + imports = [ ./alacritty.nix ./i3.nix ]; + + home.packages = (with pkgs; [ + ## GUI stuff + gnome.cheese # Webcam check + evince # PDF reader + gparted + vscode + feh + deluge # Torrent client + mailspring + discordPkg + # CLI stuff + xsel # Clipboard management + dex # .desktop file management, startup + sct # Display color temperature + ]); + + # Gnome-keyring + services.gnome-keyring.enable = true; + + # Picom: X Compositor + services.picom = { + enable = true; + blur = true; + fade = true; + fadeDelta = 3; + shadow = true; + }; +} diff --git a/X11/wallpaper.jpg b/X11/wallpaper.jpg new file mode 100644 index 0000000..a9d6a65 Binary files /dev/null and b/X11/wallpaper.jpg differ diff --git a/common.nix b/common.nix index 163da35..d4ef913 100644 --- a/common.nix +++ b/common.nix @@ -1,16 +1,19 @@ { config, pkgs, ... }: { - imports = [ + imports = [ ./kakoune/kak.nix ./fish/fish.nix - ]; + ]; - # Enable the manual so we don't have to load it - manual.html.enable = true; + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; - # Packages that are not in programs section - home.packages = with pkgs; [ + # Enable the manual so we don't have to load it + manual.html.enable = true; + + # Packages that are not in programs section + home.packages = with pkgs; [ # Build Tools ## C++ autoconf @@ -36,43 +39,76 @@ nnn ## PDF Processors poppler_utils + ## htop replacement + bottom # Databases postgresql - ]; + ]; - # Programs - programs = { - bat = { - enable = true; - config = { - theme = "GitHub"; - }; - }; + home.sessionVariables = { + # Bat theme + BAT_THEME = "GitHub"; + }; - bottom.enable = true; + home.sessionPath = [ + # Sometimes we want to install custom scripts here + "~/.local/bin" + ]; - command-not-found.enable = true; + # Programs + programs = { + bat = { + enable = true; + config = { + theme = "GitHub"; + }; + }; - exa = { - enable = true; - }; + broot.enable = true; - # later - firefox = {}; + command-not-found.enable = true; - fzf = { - enable = true; - enableFishIntegration = true; - }; + exa = { + enable = true; + enableAliases = true; + }; - gh = { - enable = true; - gitProtocol = "ssh"; - }; + # later + firefox = {}; - jq.enable = true; + fzf = { + enable = true; + enableFishIntegration = true; + }; - nushell.enable = true; - }; + gh = { + enable = true; + gitProtocol = "ssh"; + }; + + git = { + enable = true; + delta = { + enable = true; + options = { + line-numbers = true; + side-by-side = true; + }; + }; + signing.key = null; + signing.signByDefault = true; + userEmail = "nki@nkagami.me"; + userName = "Natsu Kagami"; + extraConfig = { + init.defaultBranch = "master"; + }; + }; + + gpg.enable = true; + + jq.enable = true; + + nushell.enable = true; + }; } diff --git a/config.nix b/config.nix new file mode 100644 index 0000000..7741797 --- /dev/null +++ b/config.nix @@ -0,0 +1,8 @@ +{ + allowUnfree = true; + packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; +} diff --git a/firefox.nix b/firefox.nix new file mode 100644 index 0000000..56e81fb --- /dev/null +++ b/firefox.nix @@ -0,0 +1,33 @@ +{ pkgs, config, lib, ... } : + +{ + programs.firefox = { + enable = true; + package = pkgs.firefox.override { + cfg = { + # Tridactyl native connector + enableTridactylNative = true; + }; + }; + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + grammarly + https-everywhere + multi-account-containers + octotree + reddit-enhancement-suite + refined-github + simple-tab-groups + sponsorblock + tridactyl + ublock-origin + web-scrobbler + ]; + + profiles.nki.id = 0; + profiles.nki.isDefault = true; + profiles.nki.settings = { + "browser.search.region" = "CA"; + }; + }; +} diff --git a/fish/fish.nix b/fish/fish.nix index 8c71a53..0fefa00 100644 --- a/fish/fish.nix +++ b/fish/fish.nix @@ -1,8 +1,12 @@ { config, pkgs, ... }: +let + pkgsUnstable = import {}; +in { programs.fish = { enable = true; + package = pkgsUnstable.fish; functions = { }; @@ -29,6 +33,12 @@ # Source iTerm2 integration source ~/.iterm2_shell_integration.fish + + # Enable vi keybindings + fish_vi_key_bindings + ## Set some kak-focused keybindings + bind -M default gi beginning-of-line + bind -M default gl end-of-line ''; plugins = [ { diff --git a/kagami-pc-home.nix b/kagami-pc-home.nix new file mode 100644 index 0000000..8fbec7b --- /dev/null +++ b/kagami-pc-home.nix @@ -0,0 +1,43 @@ +{ pkgs, config, lib, ... } : + +{ + imports = [ + # Common configuration + ./common.nix + # Set up X11-specific common configuration + ./X11/default.nix + # We use our own firefox + ./firefox.nix + # osu! + ./osu.nix + ]; + + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "nki"; + home.homeDirectory = "/home/nki"; + + # More packages + home.packages = (with pkgs; [ + # CLI stuff + python + zip + # TeX + texlive.combined.scheme-full + + # Java & sbt + openjdk11 + sbt + ]); + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "21.05"; +} + diff --git a/kakoune/kak-lsp.nix b/kakoune/kak-lsp.nix index de350ec..2e36d69 100644 --- a/kakoune/kak-lsp.nix +++ b/kakoune/kak-lsp.nix @@ -17,7 +17,11 @@ let cargoDeps = drv.cargoDeps.overrideAttrs (lib.const { inherit src; - outputHash = "1risazihwy6v3rc1lxram0z2my29b3w52d827963b7zfahgmsaq5"; + outputHash = ( + if pkgs.stdenv.isDarwin + then "1risazihwy6v3rc1lxram0z2my29b3w52d827963b7zfahgmsaq5" + else "0ywb9489jrb5lsycxlxzrj2khkcjhvzxbb0ckbpwwvg11r4ds240" + ); }); }); in diff --git a/kakoune/kak.nix b/kakoune/kak.nix index 4bff56e..33c3025 100644 --- a/kakoune/kak.nix +++ b/kakoune/kak.nix @@ -89,8 +89,8 @@ in owner = "Screwtapello"; repo = "kakoune-inc-dec"; rev = "7bfe9c51"; - sha256 = "0cxmk4yiy30lxd3h02g02b1d9pds2pa46p3pvamj9wwq9sai5xdi"; - leaveDotGit = true; + sha256 = "0f33wqxqbfygxypf348jf1fiscac161wf2xvnh8zwdd3rq5yybl0"; + # leaveDotGit = true; }; } ]); diff --git a/osu.nix b/osu.nix new file mode 100644 index 0000000..a91533b --- /dev/null +++ b/osu.nix @@ -0,0 +1,17 @@ +{ pkgs, config, lib, ... }: + +let + pkgsUnstableOsu = import "/home/nki/nixpkgs/osu-lazer" {}; + # osu = pkgs.osu-lazer.overrideAttrs (oldAttrs : rec { + # version = "2021.1006.1"; + # src = pkgs.fetchFromGitHub { + # owner = "ppy"; + # repo = "osu"; + # rev = version; + # sha256 = "11qwrsp9kfxgz7dvh56mbgkry252ic3l5mgx3hwchrwzll71f0yd"; + # }; + # }); +in +{ + home.packages = [ pkgsUnstableOsu.osu-lazer ]; +}