Kakoune IDE mode
This commit is contained in:
parent
67073eb3de
commit
fe0fdc63d9
18 changed files with 601 additions and 232 deletions
|
@ -1,39 +0,0 @@
|
||||||
{ pkgs, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
home-manager.users."riley" = {
|
|
||||||
programs.alacritty = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
|
|
||||||
window.padding = { x = 8; y = 8; };
|
|
||||||
|
|
||||||
font = {
|
|
||||||
normal = { family = "Fira Code"; style = "Regular"; };
|
|
||||||
bold = { family = "Fira Code"; style = "Medium"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
colors = let theme = (import ./colors.nix)."dark"; in {
|
|
||||||
|
|
||||||
primary = {
|
|
||||||
background = "#" + theme.background.primary;
|
|
||||||
foreground = "#" + theme.foreground.primary;
|
|
||||||
};
|
|
||||||
|
|
||||||
normal = {
|
|
||||||
red = "#" + theme.red.normal;
|
|
||||||
blue = "#" + theme.blue.normal;
|
|
||||||
magenta = "#" + theme.purple.normal;
|
|
||||||
};
|
|
||||||
|
|
||||||
bright = {
|
|
||||||
red = "#" + theme.red.bright;
|
|
||||||
blue = "#" + theme.blue.bright;
|
|
||||||
magenta = "#" + theme.purple.bright;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
46
colors.nix
46
colors.nix
|
@ -1,6 +1,6 @@
|
||||||
# Color schemes.
|
# Color schemes.
|
||||||
|
|
||||||
{
|
let inherit (builtins) mapAttrs map; in rec {
|
||||||
|
|
||||||
# A simple dark theme with vibrant colors.
|
# A simple dark theme with vibrant colors.
|
||||||
"dark" = rec {
|
"dark" = rec {
|
||||||
|
@ -57,45 +57,63 @@
|
||||||
red = {
|
red = {
|
||||||
normal = "ff6161";
|
normal = "ff6161";
|
||||||
bright = "ff3b3b";
|
bright = "ff3b3b";
|
||||||
pastel = "ff8787";
|
pastel = "ff5369";
|
||||||
};
|
};
|
||||||
|
|
||||||
green = {
|
green = {
|
||||||
normal = "";
|
bright = "29f26c";
|
||||||
bright = "";
|
normal = "8aff80";
|
||||||
pastel = "";
|
pastel = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
blue = {
|
blue = {
|
||||||
normal = "3eafff";
|
normal = "30c7ff";
|
||||||
bright = "30c7ff";
|
bright = "00e1ff";
|
||||||
pastel = "";
|
pastel = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
yellow = {
|
yellow = {
|
||||||
normal = "";
|
normal = "fcfc51";
|
||||||
bright = "";
|
bright = "fcfc51";
|
||||||
pastel = "";
|
pastel = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
purple = {
|
purple = {
|
||||||
normal = "bd78fa";
|
normal = "bd78fa";
|
||||||
bright = "dda1ff";
|
bright = "c97ffa";
|
||||||
pastel = "";
|
pastel = "00e1ff";
|
||||||
};
|
};
|
||||||
|
|
||||||
cyan = {
|
cyan = {
|
||||||
normal = "";
|
normal = "29f8ff";
|
||||||
bright = "";
|
bright = "26e3fc";
|
||||||
|
pastel = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
pink = {
|
||||||
|
normal = "f74ddb";
|
||||||
|
bright = "ff63e5";
|
||||||
pastel = "";
|
pastel = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
orange = {
|
orange = {
|
||||||
normal = "";
|
normal = "ff5e69";
|
||||||
bright = "";
|
bright = "fca151";
|
||||||
pastel = "";
|
pastel = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
blueGrey = "9ccdd9";
|
||||||
|
teal = "00ccad";
|
||||||
|
lime = "d5ff63";
|
||||||
|
};
|
||||||
|
|
||||||
|
hex = mapAttrs (name: value:
|
||||||
|
if name != "grayscales"
|
||||||
|
then mapAttrs (n: v: "#" + v) value
|
||||||
|
else map (v: "#" + v) value
|
||||||
|
) (dark);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,128 +0,0 @@
|
||||||
# Edit this configuration file to define what should be installed on
|
|
||||||
# your system. Help is available in the configuration.nix(5) man page
|
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
|
||||||
|
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
|
|
||||||
# Home-manager modules
|
|
||||||
<home-manager/nixos>
|
|
||||||
|
|
||||||
./hardware-configuration.nix
|
|
||||||
|
|
||||||
# Programs
|
|
||||||
./kakoune.nix
|
|
||||||
./alacritty.nix
|
|
||||||
./git.nix
|
|
||||||
|
|
||||||
# Display server and related config
|
|
||||||
./display.nix
|
|
||||||
./fonts.nix
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
nix.autoOptimiseStore = true;
|
|
||||||
nix.gc.automatic = true;
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
loader.systemd-boot = {
|
|
||||||
enable = true;
|
|
||||||
editor = false;
|
|
||||||
configurationLimit = 10;
|
|
||||||
};
|
|
||||||
loader.efi.canTouchEfiVariables = true;
|
|
||||||
cleanTmpDir = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.hostName = "thor";
|
|
||||||
|
|
||||||
# Set your time zone.
|
|
||||||
time.timeZone = "Europe/Amsterdam";
|
|
||||||
|
|
||||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
|
||||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
|
||||||
# replicates the default behaviour.
|
|
||||||
networking.useDHCP = false;
|
|
||||||
networking.interfaces.enp9s0.useDHCP = true;
|
|
||||||
|
|
||||||
# Configure network proxy if necessary
|
|
||||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
|
||||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
|
||||||
|
|
||||||
# Select internationalisation properties.
|
|
||||||
# i18n.defaultLocale = "en_US.UTF-8";
|
|
||||||
# console = {
|
|
||||||
# font = "Lat2-Terminus16";
|
|
||||||
# keyMap = "us";
|
|
||||||
# };
|
|
||||||
|
|
||||||
# Enable CUPS to print documents.
|
|
||||||
# services.printing.enable = true;
|
|
||||||
|
|
||||||
# Enable sound.
|
|
||||||
sound.enable = true;
|
|
||||||
hardware.pulseaudio.enable = true;
|
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
|
||||||
# services.xserver.libinput.enable = true;
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
users.users."riley" = {
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
|
||||||
};
|
|
||||||
|
|
||||||
# List packages installed in system profile. To search, run:
|
|
||||||
# $ nix search wget
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
|
|
||||||
# Some utils
|
|
||||||
|
|
||||||
wget
|
|
||||||
curl
|
|
||||||
git
|
|
||||||
|
|
||||||
# Modern coreutils
|
|
||||||
|
|
||||||
ripgrep
|
|
||||||
bottom
|
|
||||||
skim
|
|
||||||
exa
|
|
||||||
bat
|
|
||||||
lf
|
|
||||||
fd
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
|
||||||
# started in user sessions.
|
|
||||||
# programs.mtr.enable = true;
|
|
||||||
# programs.gnupg.agent = {
|
|
||||||
# enable = true;
|
|
||||||
# enableSSHSupport = true;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# List services that you want to enable:
|
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
|
||||||
# services.openssh.enable = true;
|
|
||||||
|
|
||||||
# Open ports in the firewall.
|
|
||||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
|
||||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
|
||||||
# Or disable the firewall altogether.
|
|
||||||
# networking.firewall.enable = false;
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "21.11"; # Did you read the comment?
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
87
configuration.nix.old
Normal file
87
configuration.nix.old
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
imports = [
|
||||||
|
|
||||||
|
# Home-manager modules
|
||||||
|
<home-manager/nixos>
|
||||||
|
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
# Programs
|
||||||
|
./modules/kakoune
|
||||||
|
./alacritty.nix
|
||||||
|
./git.nix
|
||||||
|
|
||||||
|
# Display server and related config
|
||||||
|
./display.nix
|
||||||
|
./fonts.nix
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
nix.autoOptimiseStore = true;
|
||||||
|
nix.gc.automatic = true;
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
loader.systemd-boot = {
|
||||||
|
enable = true;
|
||||||
|
editor = false;
|
||||||
|
configurationLimit = 10;
|
||||||
|
};
|
||||||
|
loader.efi.canTouchEfiVariables = true;
|
||||||
|
cleanTmpDir = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hostName = "thor";
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = "Europe/Amsterdam";
|
||||||
|
|
||||||
|
networking.useDHCP = false;
|
||||||
|
networking.interfaces.enp9s0.useDHCP = true;
|
||||||
|
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = true;
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users."riley" = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
# Some utils
|
||||||
|
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
|
||||||
|
# Modern coreutils
|
||||||
|
|
||||||
|
ripgrep
|
||||||
|
bottom
|
||||||
|
skim
|
||||||
|
exa
|
||||||
|
bat
|
||||||
|
lf
|
||||||
|
fd
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "21.11"; # Did you read the comment?
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
45
kakoune.nix
45
kakoune.nix
|
@ -1,45 +0,0 @@
|
||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let kakrc = pkgs.writeTextFile (rec {
|
|
||||||
name = "kakrc.kak";
|
|
||||||
destination = "/share/kak/autoload/${name}";
|
|
||||||
text = ''
|
|
||||||
add-highlighter global/ number-lines -separator ' │ ' -hlcursor
|
|
||||||
set-option global tabstop 4
|
|
||||||
set global ui_options ncurses_assistant=cat
|
|
||||||
map global normal <a-tab> :buffer-next<ret>
|
|
||||||
eval %sh{ kak-lsp --kakoune -s $kak_session }
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
theme = let x = (import ./colors.nix)."dark"; in pkgs.writeTextFile (rec {
|
|
||||||
name = "theme.kak";
|
|
||||||
destination = "/share/kak/autoload/${name}";
|
|
||||||
text = ''
|
|
||||||
face global LineNumbers rgb:${x.background.slight}
|
|
||||||
face global BufferPadding rgb:${x.background.slight}
|
|
||||||
face global LineNumberCursor rgb:${x.foreground.primary}
|
|
||||||
face global crosshairs_line "default,rgb:${x.background.normal}"
|
|
||||||
face global MenuForeground "default,blue"
|
|
||||||
face global MenuBackground "default,rgb:313131"
|
|
||||||
face global InlayHint rgb:828282
|
|
||||||
|
|
||||||
face global comment rgb:${x.background.slight}
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
in {
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
(pkgs.kakoune.override {
|
|
||||||
plugins = with kakounePlugins; [
|
|
||||||
|
|
||||||
# Custom config
|
|
||||||
kakrc
|
|
||||||
theme
|
|
||||||
|
|
||||||
# Kakoune language server support
|
|
||||||
kak-lsp
|
|
||||||
|
|
||||||
];
|
|
||||||
})
|
|
||||||
rnix-lsp
|
|
||||||
];
|
|
||||||
}
|
|
18
machines/thor/configuration.nix
Normal file
18
machines/thor/configuration.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules
|
||||||
|
];
|
||||||
|
|
||||||
|
riley = {
|
||||||
|
ide = true;
|
||||||
|
gui = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = "thor";
|
||||||
|
interfaces.enp9s0.useDHCP = true;
|
||||||
|
};
|
||||||
|
}
|
45
modules/alacritty.nix
Normal file
45
modules/alacritty.nix
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home-manager.users."riley" = {
|
||||||
|
programs.alacritty = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
|
||||||
|
window.padding = { x = 8; y = 8; };
|
||||||
|
|
||||||
|
font = {
|
||||||
|
normal = { family = "Fira Code"; style = "Regular"; };
|
||||||
|
bold = { family = "Fira Code"; style = "Medium"; };
|
||||||
|
};
|
||||||
|
|
||||||
|
colors = with (import ../colors.nix)."dark".hex; {
|
||||||
|
|
||||||
|
primary = {
|
||||||
|
background = background.primary;
|
||||||
|
foreground = foreground.primary;
|
||||||
|
};
|
||||||
|
|
||||||
|
normal = {
|
||||||
|
red = red.normal;
|
||||||
|
green = green.normal;
|
||||||
|
blue = blue.normal;
|
||||||
|
magenta = purple.normal;
|
||||||
|
yellow = yellow.normal;
|
||||||
|
cyan = cyan.normal;
|
||||||
|
};
|
||||||
|
|
||||||
|
bright = {
|
||||||
|
red = red.bright;
|
||||||
|
green = green.bright;
|
||||||
|
blue = blue.bright;
|
||||||
|
magenta = purple.bright;
|
||||||
|
yellow = yellow.bright;
|
||||||
|
cyan = cyan.bright;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
90
modules/default.nix
Normal file
90
modules/default.nix
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
# Global config
|
||||||
|
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
options.riley = with lib; {
|
||||||
|
|
||||||
|
ide = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Enable IDE-like plugins such as language servers for Rust, Haskell and
|
||||||
|
Nix in the editor, and configure accordingly.
|
||||||
|
'';
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
gui = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables GUI applications, a display server, audio server and related services.
|
||||||
|
'';
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
|
||||||
|
<home-manager/nixos>
|
||||||
|
|
||||||
|
./kakoune
|
||||||
|
./display
|
||||||
|
|
||||||
|
./alacritty.nix
|
||||||
|
./fonts.nix
|
||||||
|
./git.nix
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
# Web utils
|
||||||
|
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
|
||||||
|
# Coreutils
|
||||||
|
|
||||||
|
ripgrep
|
||||||
|
bottom
|
||||||
|
skim
|
||||||
|
exa
|
||||||
|
bat
|
||||||
|
lf
|
||||||
|
fd
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
loader.systemd-boot = {
|
||||||
|
enable = true;
|
||||||
|
editor = false;
|
||||||
|
configurationLimit = 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
loader.efi = {
|
||||||
|
canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
cleanTmpDir = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
firewall.enable = false;
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
users.users."riley" = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
let theme = (import ./colors.nix)."dark";
|
let theme = (import ../../colors.nix)."dark".hex;
|
||||||
hex = (c: "#${c}");
|
|
||||||
|
|
||||||
# Keybinds that launch an application.
|
# Keybinds that launch an application.
|
||||||
launchers = ({ browser }: mod: {
|
launchers = ({ browser }: mod: {
|
||||||
|
@ -156,15 +155,15 @@ let theme = (import ./colors.nix)."dark";
|
||||||
|
|
||||||
colors = {
|
colors = {
|
||||||
focused = rec {
|
focused = rec {
|
||||||
background = hex (theme.background.normal);
|
background = theme.background.normal;
|
||||||
text = hex (theme."red".bright);
|
text = theme."red".bright;
|
||||||
border = background;
|
border = background;
|
||||||
childBorder = border;
|
childBorder = border;
|
||||||
indicator = border;
|
indicator = border;
|
||||||
};
|
};
|
||||||
unfocused = rec {
|
unfocused = rec {
|
||||||
background = hex (theme.background.normal);
|
background = theme.background.normal;
|
||||||
text = hex (theme.foreground.slight);
|
text = theme.foreground.slight;
|
||||||
border = background;
|
border = background;
|
||||||
childBorder = border;
|
childBorder = border;
|
||||||
indicator = border;
|
indicator = border;
|
19
modules/kakoune/colors/common.nix
Normal file
19
modules/kakoune/colors/common.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Haskell text faces and other stuff related to syntax highlighting
|
||||||
|
# for Haskell in Kakoune, because I prefer different color arrangements
|
||||||
|
# per language.
|
||||||
|
|
||||||
|
{ theme, pkgs, ... }: pkgs.writeTextFile (rec {
|
||||||
|
name = "common.kak";
|
||||||
|
destination = "/share/kak/colors/${name}";
|
||||||
|
text = with theme; ''
|
||||||
|
face global value rgb:${yellow.bright}
|
||||||
|
face global string rgb:${green.normal}
|
||||||
|
face global variable +a
|
||||||
|
face global module rgb:${green.normal}
|
||||||
|
face global operator rgb:${cyan.bright}
|
||||||
|
face global type rgb:${yellow.normal}
|
||||||
|
face global function rgb:${cyan.bright}
|
||||||
|
face global keyword rgb:${blue.normal}+b
|
||||||
|
face global builtin +b
|
||||||
|
'';
|
||||||
|
})
|
8
modules/kakoune/colors/default.nix
Normal file
8
modules/kakoune/colors/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Import syntax themes
|
||||||
|
|
||||||
|
{ lib, theme, pkgs, ... }: [
|
||||||
|
(import ./haskell.nix { inherit lib theme pkgs; })
|
||||||
|
(import ./rust.nix { inherit lib theme pkgs; })
|
||||||
|
(import ./nix.nix { inherit lib theme pkgs; })
|
||||||
|
(import ./common.nix { inherit lib theme pkgs; })
|
||||||
|
]
|
21
modules/kakoune/colors/haskell.nix
Normal file
21
modules/kakoune/colors/haskell.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Haskell text faces and other stuff related to syntax highlighting
|
||||||
|
# for Haskell in Kakoune, because I prefer different color arrangements
|
||||||
|
# per language.
|
||||||
|
|
||||||
|
{ theme, pkgs, ... }: pkgs.writeTextFile (rec {
|
||||||
|
name = "haskell.kak";
|
||||||
|
destination = "/share/kak/colors/${name}";
|
||||||
|
text = with theme; ''
|
||||||
|
face global value rgb:${green.bright}
|
||||||
|
face global string rgb:${green.bright}
|
||||||
|
face global variable +b
|
||||||
|
face global module rgb:${green.normal}
|
||||||
|
face global meta rgb:${misc.lime}
|
||||||
|
face global operator rgb:${cyan.bright}
|
||||||
|
face global type rgb:${yellow.normal}
|
||||||
|
face global function rgb:${cyan.bright}
|
||||||
|
face global attribute rgb:${blue.normal}
|
||||||
|
face global keyword rgb:${blue.normal}
|
||||||
|
face global builtin +b
|
||||||
|
'';
|
||||||
|
})
|
19
modules/kakoune/colors/nix.nix
Normal file
19
modules/kakoune/colors/nix.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Haskell text faces and other stuff related to syntax highlighting
|
||||||
|
# for Haskell in Kakoune, because I prefer different color arrangements
|
||||||
|
# per language.
|
||||||
|
|
||||||
|
{ theme, pkgs, ... }: pkgs.writeTextFile (rec {
|
||||||
|
name = "nix.kak";
|
||||||
|
destination = "/share/kak/colors/${name}";
|
||||||
|
text = with theme; ''
|
||||||
|
|
||||||
|
add-highlighter buffer/ regex '\b\s*(=)' 1:operator
|
||||||
|
|
||||||
|
face global string rgb:${green.normal}
|
||||||
|
face global operator rgb:${yellow.bright}+b
|
||||||
|
face global keyword rgb:${blue.normal}+b
|
||||||
|
face global meta rgb:${purple.bright}
|
||||||
|
face global builtin rgb:${blue.bright}+b
|
||||||
|
|
||||||
|
'';
|
||||||
|
})
|
44
modules/kakoune/colors/rust.nix
Normal file
44
modules/kakoune/colors/rust.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# Haskell text faces and other stuff related to syntax highlighting
|
||||||
|
# for Haskell in Kakoune, because I prefer different color arrangements
|
||||||
|
# per language.
|
||||||
|
|
||||||
|
{ theme, pkgs, ... }: pkgs.writeTextFile (rec {
|
||||||
|
name = "rust.kak";
|
||||||
|
destination = "/share/kak/colors/${name}";
|
||||||
|
text = with theme; ''
|
||||||
|
|
||||||
|
# Types
|
||||||
|
face global variant rgb:${green.bright}+b
|
||||||
|
face global enum rgb:${green.bright}+b
|
||||||
|
face global struct rgb:${red.pastel}+b
|
||||||
|
face global alias rgb:${orange.normal}+b
|
||||||
|
face global primitive rgb:${misc.teal}+b
|
||||||
|
face global trait rgb:${purple.bright}+b
|
||||||
|
face global union rgb:${misc.lime}+b
|
||||||
|
|
||||||
|
# Other Rust-specific syntax elements
|
||||||
|
face global lifetime rgb:${cyan.bright}
|
||||||
|
face global format rgb:${orange.bright}+b
|
||||||
|
face global macro rgb:fc4cbf+b
|
||||||
|
|
||||||
|
# Keywords
|
||||||
|
face global keyword rgb:${blue.normal}
|
||||||
|
|
||||||
|
# Literals
|
||||||
|
face global literal rgb:${yellow.bright}
|
||||||
|
face global string rgb:${yellow.bright}
|
||||||
|
|
||||||
|
# Items
|
||||||
|
face global function rgb:${green.normal}
|
||||||
|
face global method function
|
||||||
|
face global module rgb:${misc.blueGrey}
|
||||||
|
|
||||||
|
# Other stuff
|
||||||
|
face global attribute comment
|
||||||
|
face global variable rgb:${foreground.normal}
|
||||||
|
face global property rgb:${misc.lime}
|
||||||
|
face global operator rgb:${yellow.normal}
|
||||||
|
face global punctuation rgb:${foreground.normal}
|
||||||
|
|
||||||
|
'';
|
||||||
|
})
|
213
modules/kakoune/default.nix
Normal file
213
modules/kakoune/default.nix
Normal file
|
@ -0,0 +1,213 @@
|
||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
|
||||||
|
let kakrc = pkgs.writeTextFile (rec {
|
||||||
|
name = "kakrc.kak";
|
||||||
|
destination = "/share/kak/autoload/${name}";
|
||||||
|
text = with (import ../../colors.nix)."dark"; ''
|
||||||
|
|
||||||
|
# Line numbering
|
||||||
|
add-highlighter global/ number-lines -separator ' │ ' -hlcursor
|
||||||
|
|
||||||
|
# Setting the tabstop to 4 (even though I have an ultrawide monitor)
|
||||||
|
set-option global tabstop 4
|
||||||
|
|
||||||
|
set global ui_options ncurses_assistant=cat
|
||||||
|
|
||||||
|
# Use Alt-Tab to switch between open buffers
|
||||||
|
map global insert <a-tab> <esc>:buffer-next<ret>
|
||||||
|
map global normal <a-tab> :buffer-next<ret>
|
||||||
|
|
||||||
|
colorscheme common
|
||||||
|
|
||||||
|
face global LineNumbers rgb:${background.slight}
|
||||||
|
face global BufferPadding rgb:${background.slight}
|
||||||
|
face global LineNumberCursor rgb:${foreground.primary}
|
||||||
|
face global crosshairs_line "default,rgb:${background.normal}"
|
||||||
|
face global MenuForeground "default,blue"
|
||||||
|
face global MenuBackground "default,rgb:313131"
|
||||||
|
face global InlayHint rgb:828282
|
||||||
|
|
||||||
|
face global comment rgb:${foreground.slight}
|
||||||
|
|
||||||
|
'' + (lib.optionalString (config.riley.ide) ''
|
||||||
|
|
||||||
|
eval %sh{ kak-lsp --kakoune -s $kak_session }
|
||||||
|
|
||||||
|
hook global -group yeet ModuleLoaded rust %{
|
||||||
|
|
||||||
|
# Override the Rust highlighting with semantic
|
||||||
|
# tokens supplied by the LSP client
|
||||||
|
remove-hooks global rust-highlight
|
||||||
|
remove-highlighter shared/rust
|
||||||
|
|
||||||
|
# Request tokens
|
||||||
|
lsp-semantic-tokens
|
||||||
|
|
||||||
|
# Self-destruct this hook (it should only run once)
|
||||||
|
remove-hooks global yeet
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load language-specific color schemes
|
||||||
|
hook global WinSetOption filetype=(haskell) %{
|
||||||
|
|
||||||
|
colorscheme haskell
|
||||||
|
lsp-enable-window
|
||||||
|
|
||||||
|
lsp-inlay-diagnostics-enable global
|
||||||
|
|
||||||
|
map global <tab> ': lsp-code-actions<ret>'
|
||||||
|
map global <ret> ': lsp-hover<ret>'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hook global WinSetOption filetype=(rust) %{
|
||||||
|
|
||||||
|
lsp-enable-window
|
||||||
|
lsp-inlay-diagnostics-enable window
|
||||||
|
|
||||||
|
colorscheme rust
|
||||||
|
|
||||||
|
hook window -group semtok BufReload .* lsp-semantic-tokens
|
||||||
|
hook window -group semtok NormalIdle .* lsp-semantic-tokens
|
||||||
|
hook window -group semtok InsertIdle .* lsp-semantic-tokens
|
||||||
|
|
||||||
|
hook -once -always window WinSetOption filetype=.* %{
|
||||||
|
remove-hooks window semtok
|
||||||
|
}
|
||||||
|
|
||||||
|
hook window ModeChange .*:.*:insert %{
|
||||||
|
remove-highlighter window/lsp_diagnostics
|
||||||
|
}
|
||||||
|
|
||||||
|
hook window ModeChange .*:insert:normal %{
|
||||||
|
lsp-inlay-diagnostics-enable window
|
||||||
|
}
|
||||||
|
|
||||||
|
set global lsp_inlay_diagnostic_sign '>'
|
||||||
|
|
||||||
|
map global normal <tab> ': lsp-code-actions<ret>'
|
||||||
|
map global normal <ret> ': lsp-hover<ret>'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hook global WinSetOption filetype=(nix) %{
|
||||||
|
colorscheme nix
|
||||||
|
lsp-enable-window
|
||||||
|
}
|
||||||
|
|
||||||
|
face global InlayDiagnosticWarning rgb:a39e31+f
|
||||||
|
face global InlayDiagnosticError rgb:ad494f+f
|
||||||
|
face global InlayDiagnosticHint rgb:4d965a+f
|
||||||
|
|
||||||
|
'');
|
||||||
|
});
|
||||||
|
|
||||||
|
# Syntax colors
|
||||||
|
colors = (import ./colors {
|
||||||
|
theme = (import ../../colors.nix)."dark";
|
||||||
|
inherit lib pkgs;
|
||||||
|
});
|
||||||
|
|
||||||
|
# Config for kak-lsp
|
||||||
|
kak-lsp-config = pkgs.writeTextFile (rec {
|
||||||
|
name = "kak-lsp.toml";
|
||||||
|
destination = "/share/kak-lsp/${name}";
|
||||||
|
text = let semTok = (name: value: ''
|
||||||
|
[[semantic_tokens]]
|
||||||
|
token = "${name}"
|
||||||
|
face = "${value}"
|
||||||
|
''); in ''
|
||||||
|
|
||||||
|
[language.rust]
|
||||||
|
filetypes = [ "rust" ]
|
||||||
|
roots = [ "Cargo.toml" ]
|
||||||
|
command = "rust-analyzer"
|
||||||
|
[language.rust.settings.rust-analyzer]
|
||||||
|
semanticTokens = true
|
||||||
|
diagnostics.enabled = [ "unresolved-proc-macro" ]
|
||||||
|
cargo.loadOutDirsFromCheck = true
|
||||||
|
procMacro.enable = false
|
||||||
|
|
||||||
|
[language.haskell]
|
||||||
|
filetypes = [ "haskell" ]
|
||||||
|
roots = [ "Setup.hs", "stack.yaml", "*.cabal" ]
|
||||||
|
command = "haskell-language-server-wrapper"
|
||||||
|
args = [ "--lsp" ]
|
||||||
|
|
||||||
|
[language.nix]
|
||||||
|
filetypes = [ "nix" ]
|
||||||
|
roots = [ "flake.nix", "shell.nix", ".git", ".hg" ]
|
||||||
|
command = "rnix-lsp"
|
||||||
|
|
||||||
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList semTok {
|
||||||
|
"enumMember" = "variant";
|
||||||
|
"enum" = "enum";
|
||||||
|
"union" = "union";
|
||||||
|
"struct" = "struct";
|
||||||
|
"typeAlias" = "alias";
|
||||||
|
"builtinType" = "primitive";
|
||||||
|
"trait" = "trait";
|
||||||
|
"interface" = "trait";
|
||||||
|
"method" = "method";
|
||||||
|
"function" = "function";
|
||||||
|
"namespace" = "module";
|
||||||
|
"boolean" = "literal";
|
||||||
|
"character" = "literal";
|
||||||
|
"number" = "literal";
|
||||||
|
"string" = "string";
|
||||||
|
"keyword" = "keyword";
|
||||||
|
"documentation" = "comment";
|
||||||
|
"comment" = "comment";
|
||||||
|
"escapeSequence" = "format";
|
||||||
|
"formatSpecifier" = "format";
|
||||||
|
"operator" = "operator";
|
||||||
|
"arithmetic" = "operator";
|
||||||
|
"bitwise" = "operator";
|
||||||
|
"comparison" = "operator";
|
||||||
|
"logical" = "operator";
|
||||||
|
"macro" = "macro";
|
||||||
|
"lifetime" = "lifetime";
|
||||||
|
"variable" = "variable";
|
||||||
|
"attribute" = "attribute";
|
||||||
|
"punctuation" = "punctuation";
|
||||||
|
}) }
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
in {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
(pkgs.kakoune.override {
|
||||||
|
plugins = with kakounePlugins; [
|
||||||
|
|
||||||
|
# Custom config
|
||||||
|
kakrc
|
||||||
|
|
||||||
|
# Kakoune language server support
|
||||||
|
(symlinkJoin {
|
||||||
|
paths = [
|
||||||
|
|
||||||
|
# The language server client
|
||||||
|
kak-lsp
|
||||||
|
|
||||||
|
# Include default language servers
|
||||||
|
rnix-lsp
|
||||||
|
haskell-language-server
|
||||||
|
|
||||||
|
# Overwrite kak-lsp.toml
|
||||||
|
kak-lsp-config
|
||||||
|
|
||||||
|
];
|
||||||
|
name = "kak-lsp-${kak-lsp.version}";
|
||||||
|
nativeBuildInputs = [ makeWrapper ];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram $out/bin/kak-lsp --add-flags "--config $out/share/kak-lsp/kak-lsp.toml"
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
] ++ colors;
|
||||||
|
})
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue