Compare commits
25 commits
957afa66d0
...
cdd15c4304
Author | SHA1 | Date | |
---|---|---|---|
cdd15c4304 | |||
5cf651c06c | |||
a64c619cea | |||
30f6943fda | |||
baf21e031c | |||
9995231612 | |||
5addb3821d | |||
6e9ef448db | |||
8bf663b78a | |||
55517dba81 | |||
1e9f3ff797 | |||
6ec9a0c4e5 | |||
97051b5cc2 | |||
a023323e34 | |||
30ebf1e5d0 | |||
fab0ec3696 | |||
28020e17e1 | |||
dd5be819f2 | |||
f9ebf23688 | |||
4ba9224348 | |||
e4dcb39fc5 | |||
a7447fbafe | |||
cbb52da79b | |||
8a5522396a | |||
5c86a1f859 |
22 changed files with 637 additions and 179 deletions
14
.sops.yaml
14
.sops.yaml
|
@ -1,14 +0,0 @@
|
||||||
# This example uses YAML anchors which allows reuse of multiple keys
|
|
||||||
# without having to repeat yourself.
|
|
||||||
# Also see https://github.com/Mic92/dotfiles/blob/master/nixos/.sops.yaml
|
|
||||||
# for a more complex example.
|
|
||||||
keys:
|
|
||||||
- &ephase 26D5035DF6B4BE70F2B51B4C178139E02D2ACF00
|
|
||||||
- &luci age19kvatn3zpeqh9zy7u8ce0hqe7dyaesxrukewxt8u7pf4cqkj5dfqm5nlwy
|
|
||||||
creation_rules:
|
|
||||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *luci
|
|
||||||
pgp:
|
|
||||||
- *ephase
|
|
41
flake.lock
generated
41
flake.lock
generated
|
@ -56,6 +56,26 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nix-private": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1755552883,
|
||||||
|
"narHash": "sha256-wdVtGyN8JkpByIiNwSevZMBy02vWwCPNaD/caCQJ6aM=",
|
||||||
|
"ref": "main",
|
||||||
|
"rev": "1ccd39ac6de09a7a73a9a36ec1c34f70cb5edfe2",
|
||||||
|
"shallow": true,
|
||||||
|
"type": "git",
|
||||||
|
"url": "ssh://git@git.epha.se:24422/ephase/nix-private.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"ref": "main",
|
||||||
|
"shallow": true,
|
||||||
|
"type": "git",
|
||||||
|
"url": "ssh://git@git.epha.se:24422/ephase/nix-private.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixgl": {
|
"nixgl": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
|
@ -78,6 +98,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1753722563,
|
||||||
|
"narHash": "sha256-FK8iq76wlacriq3u0kFCehsRYTAqjA9nfprpiSWRWIc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "648f70160c03151bc2121d179291337ad6bc564b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748693115,
|
"lastModified": 1748693115,
|
||||||
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
||||||
|
@ -92,7 +126,7 @@
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748693115,
|
"lastModified": 1748693115,
|
||||||
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
||||||
|
@ -111,7 +145,7 @@
|
||||||
"nur": {
|
"nur": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"treefmt-nix": "treefmt-nix"
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -131,8 +165,9 @@
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
|
"nix-private": "nix-private",
|
||||||
"nixgl": "nixgl",
|
"nixgl": "nixgl",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nur": "nur",
|
"nur": "nur",
|
||||||
"sops-nix": "sops-nix"
|
"sops-nix": "sops-nix"
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
nix-private = {
|
||||||
|
url = "git+ssh://git@git.epha.se:24422/ephase/nix-private.git?shallow=1&ref=main";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
outputs = { self, nixpkgs, home-manager, nur, nixgl, sops-nix, ... }@inputs:
|
outputs = { self, nixpkgs, home-manager, nur, nixgl, sops-nix, ... }@inputs:
|
||||||
let
|
let
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
_:
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,5 +1,15 @@
|
||||||
{ ... }: {
|
{ inputs, ... }: {
|
||||||
config.modules = {
|
config.modules = {
|
||||||
|
email = {
|
||||||
|
enable = true;
|
||||||
|
accountConfigs = {
|
||||||
|
a = inputs.nix-private.mail.xiemeart;
|
||||||
|
b = inputs.nix-private.mail.ephase;
|
||||||
|
c = inputs.nix-private.mail.ubordeaux;
|
||||||
|
};
|
||||||
|
primary = "a";
|
||||||
|
};
|
||||||
|
dav.enable = true;
|
||||||
application = {
|
application = {
|
||||||
gnupg = {
|
gnupg = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -16,7 +26,10 @@
|
||||||
git.enable = true;
|
git.enable = true;
|
||||||
neovim.enable = true;
|
neovim.enable = true;
|
||||||
starship.enable = true;
|
starship.enable = true;
|
||||||
tmux.enable = true;
|
tmux = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = inputs.nix-private.tmux.personal;
|
||||||
|
};
|
||||||
utils.enable = true;
|
utils.enable = true;
|
||||||
vifm.enable = true;
|
vifm.enable = true;
|
||||||
zellij.enable = true;
|
zellij.enable = true;
|
||||||
|
|
|
@ -30,4 +30,5 @@
|
||||||
scale = "1.3";
|
scale = "1.3";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
sops.age.keyFile = "/home/ephase/.config/sops/age/keys.txt";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, ... }: {
|
{ pkgs, inputs, ... }: {
|
||||||
config.modules = {
|
config.modules = {
|
||||||
application = {
|
application = {
|
||||||
zathura.enable = true;
|
zathura.enable = true;
|
||||||
|
@ -13,20 +13,21 @@
|
||||||
ghq.enable = true;
|
ghq.enable = true;
|
||||||
git = {
|
git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
userEmail = "ybarbanneau@sellsy.com";
|
userEmail = inputs.nix-private.git.work.userEmail;
|
||||||
signingKey = "6E1A834E282FBD98B48069444447A19BBEDB8DBA";
|
signingKey = inputs.nix-private.git.work.signingKey;
|
||||||
signByDefault = true;
|
};
|
||||||
|
k8s = {
|
||||||
|
enable = true;
|
||||||
|
kubectlPlugins = with pkgs; [
|
||||||
|
kubectl-cnpg
|
||||||
|
];
|
||||||
};
|
};
|
||||||
neovim.enable = true;
|
neovim.enable = true;
|
||||||
starship.enable = true;
|
starship.enable = true;
|
||||||
tmux = {
|
tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraConfig = ''
|
extraConfig = inputs.nix-private.tmux.work;
|
||||||
bind -n M-F9 run 'create-tmux-session -n quipu -r quipuapp "run:nvim ." repo:quipu-infrastructure neww:quipu-infra p:sellsy hsplit:50 run:k9s repo:charts neww:charts'
|
|
||||||
bind -n M-F8 run 'create-tmux-session -n verifactu -r verifactu "run:nvim ." repo:verifactu-infrastructure neww:verifactu-infra repo:sellsy hsplit:50 run:k9s repo:charts neww:charts'
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.enable = true;
|
utils.enable = true;
|
||||||
vifm.enable = true;
|
vifm.enable = true;
|
||||||
zellij.enable = true;
|
zellij.enable = true;
|
||||||
|
|
|
@ -1,36 +1,23 @@
|
||||||
{ lib, config, ... }:
|
{ lib, config, inputs, pkgs, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.accounts.dav;
|
cfg = config.modules.dav;
|
||||||
|
secretsDirectory = "${(builtins.toString inputs.nix-private)}/secrets";
|
||||||
vdirsyncerConf = {
|
vdirsyncerConf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
auth = "basic";
|
auth = "basic";
|
||||||
userNameCommand = [
|
|
||||||
"cat"
|
|
||||||
"${config.sops.secrets."webdav/username".path}"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.accounts.dav = {
|
options.modules.dav = {
|
||||||
enable = mkEnableOption "enable personal Caldav / CardDav";
|
enable = mkEnableOption "enable personal Caldav / CardDav";
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
## Manage secrets used in this module
|
|
||||||
sops = {
|
sops = {
|
||||||
secrets = {
|
secrets = {
|
||||||
"webdav/url/caldav" = {
|
"${inputs.nix-private.dav.personal.secret.key}" = {
|
||||||
sopsFile = ../../../../secrets/accounts.yaml;
|
sopsFile = "${secretsDirectory}/${inputs.nix-private.dav.personal.secret.file}";
|
||||||
};
|
|
||||||
"webdav/url/carddav" = {
|
|
||||||
sopsFile = ../../../../secrets/accounts.yaml;
|
|
||||||
};
|
|
||||||
"webdav/username" = {
|
|
||||||
sopsFile = ../../../../secrets/accounts.yaml;
|
|
||||||
};
|
|
||||||
"webdav/password" = {
|
|
||||||
sopsFile = ../../../../secrets/accounts.yaml;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -38,11 +25,15 @@ in
|
||||||
accounts.calendar.basePath = ".local/share/calendars";
|
accounts.calendar.basePath = ".local/share/calendars";
|
||||||
accounts.calendar.accounts.personal_calendars = {
|
accounts.calendar.accounts.personal_calendars = {
|
||||||
name = "personal_calendar";
|
name = "personal_calendar";
|
||||||
remote.type = "caldav";
|
remote = {
|
||||||
remote.passwordCommand = [
|
type = "caldav";
|
||||||
"cat"
|
url = inputs.nix-private.dav.personal.caldavUrl;
|
||||||
"${config.sops.secrets."webdav/password".path}"
|
userName = inputs.nix-private.dav.personal.userName;
|
||||||
|
passwordCommand = [
|
||||||
|
"${pkgs.coreutils}/bin/cat"
|
||||||
|
"${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}"
|
||||||
];
|
];
|
||||||
|
};
|
||||||
vdirsyncer = vdirsyncerConf // {
|
vdirsyncer = vdirsyncerConf // {
|
||||||
metadata = [
|
metadata = [
|
||||||
"color"
|
"color"
|
||||||
|
@ -52,10 +43,6 @@ in
|
||||||
"VTODO"
|
"VTODO"
|
||||||
"VEVENT"
|
"VEVENT"
|
||||||
];
|
];
|
||||||
urlCommand = [
|
|
||||||
"cat"
|
|
||||||
"${config.sops.secrets."webdav/url/caldav".path}"
|
|
||||||
];
|
|
||||||
collections = [
|
collections = [
|
||||||
"from a"
|
"from a"
|
||||||
"from b"
|
"from b"
|
||||||
|
@ -70,22 +57,23 @@ in
|
||||||
|
|
||||||
accounts.contact.basePath = ".local/share/contacts";
|
accounts.contact.basePath = ".local/share/contacts";
|
||||||
accounts.contact.accounts.personal_contacts = {
|
accounts.contact.accounts.personal_contacts = {
|
||||||
remote.type = "carddav";
|
remote = {
|
||||||
remote.passwordCommand = [
|
type = "carddav";
|
||||||
"cat"
|
url = inputs.nix-private.dav.personal.carddavUrl;
|
||||||
"${config.sops.secrets."webdav/password".path}"
|
userName = inputs.nix-private.dav.personal.userName;
|
||||||
|
passwordCommand = [
|
||||||
|
"${pkgs.coreutils}/bin/cat"
|
||||||
|
"${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}"
|
||||||
];
|
];
|
||||||
local.type = "filesystem";
|
};
|
||||||
local.fileExt = ".vcf";
|
local = {
|
||||||
|
type = "filesystem";
|
||||||
|
fileExt = ".vcf";
|
||||||
|
};
|
||||||
vdirsyncer = vdirsyncerConf // {
|
vdirsyncer = vdirsyncerConf // {
|
||||||
|
|
||||||
metadata = [
|
metadata = [
|
||||||
"displayname"
|
"displayname"
|
||||||
];
|
];
|
||||||
urlCommand = [
|
|
||||||
"cat"
|
|
||||||
"${config.sops.secrets."webdav/url/carddav".path}"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
khal = {
|
khal = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
254
modules/home-manager/accounts/email/default.nix
Normal file
254
modules/home-manager/accounts/email/default.nix
Normal file
|
@ -0,0 +1,254 @@
|
||||||
|
{ lib, config, pkgs, inputs, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.email;
|
||||||
|
secretsDirectory = "${(builtins.toString inputs.nix-private)}/secrets";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.email = {
|
||||||
|
enable = mkEnableOption "Enable email accounts configuration";
|
||||||
|
|
||||||
|
accountConfigs = mkOption {
|
||||||
|
type = types.attrsOf types.attrs;
|
||||||
|
default = false;
|
||||||
|
description = "List of account variables used to create accounts";
|
||||||
|
};
|
||||||
|
|
||||||
|
primary = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = false;
|
||||||
|
description = "name of primary account";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
sops = let
|
||||||
|
secretList = lib.mapAttrs' ( name: value:
|
||||||
|
nameValuePair ( value.secret.key ) ({
|
||||||
|
sopsFile = "${secretsDirectory}/${value.secret.file}";
|
||||||
|
})
|
||||||
|
) cfg.accountConfigs;
|
||||||
|
in {
|
||||||
|
secrets = secretList;
|
||||||
|
};
|
||||||
|
accounts.email = let
|
||||||
|
defaultSetting = {
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "both";
|
||||||
|
expunge = "both";
|
||||||
|
remove = "both";
|
||||||
|
patterns = [
|
||||||
|
"*"
|
||||||
|
# Trash is a pain in the ass to manage with notmuch
|
||||||
|
"!Trash"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
notmuch = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
neomutt = {
|
||||||
|
enable = true;
|
||||||
|
showDefaultMailbox = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
accountsList = lib.mapAttrs ( name: value: lib.recursiveUpdate defaultSetting value.config ) cfg.accountConfigs;
|
||||||
|
in {
|
||||||
|
maildirBasePath = "mail";
|
||||||
|
accounts = lib.recursiveUpdate accountsList { "${cfg.primary}".primary = true; };
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.afew = let
|
||||||
|
mailMoverRules = lib.mergeAttrsList (
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
n: v:
|
||||||
|
if lib.hasAttrByPath ["afew" "mailMover"] v then
|
||||||
|
v.afew.mailMover
|
||||||
|
else {}
|
||||||
|
) cfg.accountConfigs);
|
||||||
|
mailFilterRules = lib.flatten (
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
n: v:
|
||||||
|
if lib.hasAttrByPath ["afew" "filters"] v then
|
||||||
|
v.afew.filters
|
||||||
|
else []
|
||||||
|
) cfg.accountConfigs);
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
[FolderNameFilter]
|
||||||
|
folder_explicit_list = archives
|
||||||
|
folder_transforms = archives:archived
|
||||||
|
maildir_separator = /
|
||||||
|
[MailMover]
|
||||||
|
folders = ${lib.concatStringsSep " " (lib.unique (lib.mapAttrsToList (n: v: "${n}") mailMoverRules))}
|
||||||
|
rename = True
|
||||||
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n} = ${toString v}") mailMoverRules)}
|
||||||
|
[SpamFilter]
|
||||||
|
[KillThreadsFilter]
|
||||||
|
[ArchiveSentMailsFilter]
|
||||||
|
sent_tag = sent
|
||||||
|
${lib.concatImapStrings (p: e: "\n\n[Filter.${toString p}]\n ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n} = ${v}") e)}") mailFilterRules}
|
||||||
|
[InboxFilter]
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
programs.neomutt = let
|
||||||
|
accountMacros = lib.imap1 (
|
||||||
|
i:
|
||||||
|
elem: elem // {
|
||||||
|
map = ["index" "pager"];
|
||||||
|
key = "<F${(toString (i + 1))}>";
|
||||||
|
}) (
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
n: c:
|
||||||
|
{ "action" = "<sync-mailbox><refresh><enter-command>source ~/.config/neomutt/${n}<enter><change-vfolder>Unread:${c.config.address}<enter>";}
|
||||||
|
) cfg.accountConfigs);
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
unmailboxes = true;
|
||||||
|
changeFolderWhenSourcingAccount = true;
|
||||||
|
sourcePrimaryAccount = false;
|
||||||
|
editor = "nvim +/^$/ +':nohl'";
|
||||||
|
settings = {
|
||||||
|
sleep_time = "1";
|
||||||
|
mbox_type = "Maildir";
|
||||||
|
header_color_partial = "yes";
|
||||||
|
duplicate_threads = "yes";
|
||||||
|
index_format = "'%4C| %24.24?GS?%F %GS &%F? %?GR?%GR &%?GU?%GU & ??%?GA?%GA & ?%?GE?%GE & ?%?M? %s&%s? %* %?g? %g? %<[y?%<[m?%<[d?%9[%H:%M ]&%9[%a %d ]>&%9[%b %d ]>&%9[%m/%y ]>'";
|
||||||
|
sort_aux = "last-date-sent";
|
||||||
|
mail_check = "120";
|
||||||
|
hidden_tags = "inbox,unread,draft,flagged,passed,replied,signed,encrypted,attachment,sent";
|
||||||
|
markers = "no";
|
||||||
|
wrap = "90";
|
||||||
|
smart_wrap = "yes";
|
||||||
|
reflow_text = "yes";
|
||||||
|
reflow_wrap = "90";
|
||||||
|
text_flowed = "yes";
|
||||||
|
search_context = "3";
|
||||||
|
pager_context = "5";
|
||||||
|
pager_index_lines = "10";
|
||||||
|
rfc2047_parameters = "yes";
|
||||||
|
edit_headers = "yes";
|
||||||
|
send_charset = "utf-8";
|
||||||
|
envelope_from = "yes";
|
||||||
|
use_envelope_from = "no";
|
||||||
|
my_status = "' %o/%m | %l | %f %* Sort: %s-%S Pos: %P '";
|
||||||
|
my_pager = "' %F | %s %* Pos: %P '";
|
||||||
|
compose_format = "' COMPOSE %a | %l'";
|
||||||
|
query_command = "'${pkgs.khard}/bin/khard email --parsable --search-in-source-files %s'";
|
||||||
|
virtual_spoolfile = "yes";
|
||||||
|
mail_check_stats = "yes";
|
||||||
|
mh_purge = "yes";
|
||||||
|
mailcap_path= "${config.xdg.configHome}/neomutt/mailcap";
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
${(builtins.readFile ./files/theme.muttrc)}
|
||||||
|
set reverse_name
|
||||||
|
charset-hook ^iso-8859-1$ cp1252
|
||||||
|
ignore *
|
||||||
|
|
||||||
|
unignore from date subject to cc bcc tags user-agent x-mailer
|
||||||
|
|
||||||
|
# Attachment
|
||||||
|
auto_view text/x-vcard text/html text/enriched text/calendar
|
||||||
|
alternative_order text/html text/enriched text/plain text/*
|
||||||
|
|
||||||
|
tag-transforms "attachment" "" \
|
||||||
|
"encrypted" "" \
|
||||||
|
"signed" "" \
|
||||||
|
"unread" "" \
|
||||||
|
"replied" ""
|
||||||
|
tag-formats "attachment" "GA" \
|
||||||
|
"encrypted" "GE" \
|
||||||
|
"signed" "GS" \
|
||||||
|
"unread" "GU" \
|
||||||
|
"replied" "GR"
|
||||||
|
|
||||||
|
${lib.concatStrings (lib.attrsets.mapAttrsToList ( _: v: if lib.hasAttrByPath [ "neomuttHooks" ] v then v.neomuttHooks else "" ) cfg.accountConfigs)}
|
||||||
|
# manually source first account instead of use home-manager parameter because
|
||||||
|
# of $my_pager expansion does not work as this variable is not already set
|
||||||
|
source ${config.xdg.configHome}/neomutt/${cfg.primary}
|
||||||
|
'';
|
||||||
|
binds = [
|
||||||
|
{ map = [ "attach" "browser" "index" "pager" ]; key = "g"; action = "noop"; }
|
||||||
|
{ map = [ "attach" "browser" "index" "pager" ]; key = "G"; action = "noop"; }
|
||||||
|
{ map = [ "index" ]; key = "q"; action = "noop";}
|
||||||
|
{ map = [ "pager" ]; key = "Q"; action = "noop";}
|
||||||
|
{ map = [ "attach" "browser" "index" ]; key = "gg"; action = "first-entry";}
|
||||||
|
{ map = [ "attach" "browser" "index" ]; key = "G"; action = "last-entry";}
|
||||||
|
{ map = [ "pager" ]; key = "gg"; action = "top"; }
|
||||||
|
{ map = [ "pager" ]; key = "G"; action = "bottom"; }
|
||||||
|
{ map = [ "pager" ]; key = "k"; action = "previous-line"; }
|
||||||
|
{ map = [ "pager" ]; key = "j"; action = "next-line"; }
|
||||||
|
|
||||||
|
# Scrolling
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\CF"; action = "next-page";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\CB"; action = "previous-page";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\Cu"; action = "half-up";}
|
||||||
|
{ map = [ "attach" "browser" "pager" "index" ]; key = "\\Cd"; action = "half-down";}
|
||||||
|
{ map = [ "browser" "pager" ]; key = "\\Ce"; action = "next-line";}
|
||||||
|
{ map = [ "browser" "pager" ]; key = "\\Cy"; action = "previous-line";}
|
||||||
|
{ map = [ "index" ]; key = "\\Ce"; action = "next-line";}
|
||||||
|
{ map = [ "index" ]; key = "\\Cy"; action = "previous-line";}
|
||||||
|
|
||||||
|
# Reply
|
||||||
|
{ map =[ "pager" "index" ]; key = "R"; action = "group-reply";}
|
||||||
|
|
||||||
|
# sidebar
|
||||||
|
{ map = [ "index" "pager" ]; key = "<f12>"; action = "sidebar-toggle-visible";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "{"; action = "sidebar-prev";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "}"; action = "sidebar-next";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "|"; action = "sidebar-open";}
|
||||||
|
|
||||||
|
# open virtual folder
|
||||||
|
{ map = [ "index" "pager" ]; key = "X"; action = "noop";}
|
||||||
|
{ map = [ "index" "pager" ]; key = "X"; action = "change-vfolder";}
|
||||||
|
|
||||||
|
# read entire thread of the current message
|
||||||
|
{ map = [ "index" "pager" ]; key = "+"; action = "entire-thread";}
|
||||||
|
|
||||||
|
# generate virtual folder from query
|
||||||
|
{ map = [ "index" "pager" ]; key = "\\eX"; action = "vfolder-from-query";}
|
||||||
|
|
||||||
|
# generate virtual folder from query with time window
|
||||||
|
|
||||||
|
{ map = [ "index" "pager" ]; key = "\\CD"; action = "modify-tags";}
|
||||||
|
|
||||||
|
# Editor
|
||||||
|
{ map = [ "editor" ]; key = "<Tab>"; action = "complete-query";}
|
||||||
|
{ map = [ "editor" ]; key = "^T"; action = "complete";}
|
||||||
|
];
|
||||||
|
macros = [
|
||||||
|
{ map = [ "pager" ]; key = "\\CB"; action = "<pipe-message>${pkgs.urlscan}/bin/urlscan -d -c --color true<Enter>"; }
|
||||||
|
] ++ accountMacros;
|
||||||
|
};
|
||||||
|
programs.mbsync = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
services.mbsync = {
|
||||||
|
enable = true;
|
||||||
|
postExec = "${pkgs.notmuch}/bin/notmuch new";
|
||||||
|
};
|
||||||
|
programs.notmuch = {
|
||||||
|
enable = true;
|
||||||
|
new.tags = [ "new" ];
|
||||||
|
hooks.postNew = ''
|
||||||
|
${pkgs.afew}/bin/afew --tag --new
|
||||||
|
${pkgs.afew}/bin/afew --move --all
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
programs.msmtp = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
home.file."${config.xdg.configHome}/urlscan/config.json".source = ./files/urlscan.config.json;
|
||||||
|
xdg.configFile."neomutt/mailcap".text = ''
|
||||||
|
text/html; ${pkgs.xdg-utils}/bin/xdg-open %s; nametemplate=%html
|
||||||
|
text/html; ${pkgs.w3m}/bin/w3m -I %{charset} -cols 90 -T text/html %s; copiousoutput
|
||||||
|
application/pdf; ${pkgs.xdg-utils}/bin/xdg-open %s &
|
||||||
|
image/*; ${pkgs.xdg-utils}/bin/xdg-open %s &
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
123
modules/home-manager/accounts/email/files/theme.muttrc
Normal file
123
modules/home-manager/accounts/email/files/theme.muttrc
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
# vi: ft=muttrc
|
||||||
|
|
||||||
|
## Base
|
||||||
|
color normal color20 default # softer, bold
|
||||||
|
|
||||||
|
## Weak
|
||||||
|
color tilde color08 default # `~` padding at the end of pager
|
||||||
|
color attachment color08 default
|
||||||
|
color tree color01 default # arrow in threads
|
||||||
|
color signature color08 default
|
||||||
|
color markers color08 default # `+` wrap indicator in pager
|
||||||
|
|
||||||
|
color underline color21 default
|
||||||
|
|
||||||
|
color error color01 default
|
||||||
|
color message color04 default # informational messages
|
||||||
|
color search color08 color03
|
||||||
|
color status color20 color18
|
||||||
|
color indicator color21 color19 # inverse, brighter
|
||||||
|
|
||||||
|
color status color00 color06 ' Pos: ([[:alnum:]]|%)+ '
|
||||||
|
color status color20 color19 ' Sort: ([[:alpha:]]|-)+ '
|
||||||
|
color status color18 color04 ' COMPOSE '
|
||||||
|
|
||||||
|
# Message Index ----------------------------------------------------------------
|
||||||
|
|
||||||
|
## Index parts
|
||||||
|
color index_number color20 default
|
||||||
|
color index_author color20 default
|
||||||
|
color index_date color20 default
|
||||||
|
color index_flags color20 default
|
||||||
|
color index_tag color20 default
|
||||||
|
color index_tags italic color08 default
|
||||||
|
|
||||||
|
color index_author italic color06 default "~g !~V"
|
||||||
|
color index_author color04 default "~g ~V"
|
||||||
|
|
||||||
|
color index_subject color04 default "~G"
|
||||||
|
|
||||||
|
color index_date color08 default
|
||||||
|
|
||||||
|
color index_number color08 default
|
||||||
|
color index_subject bold color07 default "(~U|~N|~O)"
|
||||||
|
|
||||||
|
color index_author italic color00 color06 "~T"
|
||||||
|
color index_subject italic color00 color06 "~T"
|
||||||
|
color index_date italic color00 color06 "~T"
|
||||||
|
color index_tags italic color00 color06 "~T"
|
||||||
|
color index_tag italic color00 color06 "~T"
|
||||||
|
|
||||||
|
color index_subject color01 color18 "~D" # deleted messages
|
||||||
|
|
||||||
|
color index_subject italic bold color00 default "~T (~U|~N|~O)"
|
||||||
|
|
||||||
|
## Weak
|
||||||
|
color index color01 default "~v~(~F)" # collapsed thread with flagged inside
|
||||||
|
|
||||||
|
# Selection
|
||||||
|
color index italic color00 color06 "~T" # tagged messages
|
||||||
|
color index default color18 "~D" # deleted messages
|
||||||
|
|
||||||
|
### Message Headers ----------------------------------------------------
|
||||||
|
|
||||||
|
# Base
|
||||||
|
set header_color_partial
|
||||||
|
hdr_order From Date: From: To: Cc: Subject:
|
||||||
|
|
||||||
|
color header color04 default '^[^[:blank:]:]*:'
|
||||||
|
color hdrdefault color20 default
|
||||||
|
color header color17 default "^[Date:] (.*)"
|
||||||
|
color header color04 default "^From:"
|
||||||
|
color header color05 default "^Tags:"
|
||||||
|
color header color16 default "^(To|Cc|CC|BCC):"
|
||||||
|
color header brightcolor07 default "^Subject: (.*)"
|
||||||
|
|
||||||
|
color header color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
|
||||||
|
|
||||||
|
### Message Body -------------------------------------------------------
|
||||||
|
# When possible, these regular expressions attempt to match http://spec.commonmark.org/
|
||||||
|
## Weak
|
||||||
|
# ~~~ Horizontal rules ~~~
|
||||||
|
color body color08 default "([[:space:]]*[-+=#*~_]){3,}[[:space:]]*"
|
||||||
|
|
||||||
|
# *Bold* span
|
||||||
|
color body brightcolor03 default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
|
||||||
|
|
||||||
|
# _Underline_ span
|
||||||
|
color body underline color20 default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
|
||||||
|
|
||||||
|
# /Italic/ span (Sometimes gets directory names)
|
||||||
|
color body italic color20 default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
|
||||||
|
|
||||||
|
# ATX headers
|
||||||
|
color body color04 default "^[[:space:]]{0,3}#+[[:space:]].*$"
|
||||||
|
|
||||||
|
# `Code` span
|
||||||
|
color body color05 default "(^|[[:space:][:punct:]])\`[^\`]+\`([[:space:][:punct:]]|$)"
|
||||||
|
|
||||||
|
color body bold color01 default "^(\\*[[:space:]])"
|
||||||
|
|
||||||
|
## URI
|
||||||
|
color body italic color04 color00 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
||||||
|
# Email addresses
|
||||||
|
color body color06 color00 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
|
||||||
|
|
||||||
|
# Emoticons ;-P
|
||||||
|
color body black yellow "[;:][-o]?[})>{(<|P]"
|
||||||
|
|
||||||
|
# PGP
|
||||||
|
color body color02 default "(Good signature)"
|
||||||
|
color body color01 default "(Bad signature)"
|
||||||
|
color body color16 default "(Problem signature)"
|
||||||
|
color body color04 color00 "^gpg: "
|
||||||
|
|
||||||
|
## Quotation blocks
|
||||||
|
color quoted color06 color00
|
||||||
|
color quoted1 color02 color00
|
||||||
|
color quoted2 color03 color00
|
||||||
|
color quoted3 color16 color00
|
||||||
|
color quoted4 color01 color00
|
||||||
|
color quoted5 color17 color00
|
||||||
|
color quoted6 color05 color00
|
||||||
|
color quoted7 color04 color00
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"palettes": {
|
||||||
|
"default": [
|
||||||
|
[ "header", "white", "dark blue", "standout", "#d8d8d8", "#383838" ],
|
||||||
|
[ "footer", "white", "dark red", "standout", "#d8d8d8", "#383838" ],
|
||||||
|
[ "search", "white", "dark green", "standout", "#282828", "#f7ca88" ],
|
||||||
|
[ "msgtext", "", "", "", "", "" ],
|
||||||
|
[ "msgtext:ellipses", "light gray", "black", "bold", "#f7ca88", "#383838" ],
|
||||||
|
[ "urlref:number:braces", "light gray", "black", "bold", "#f8f8f8", "#383838"],
|
||||||
|
[ "urlref:number","yellow", "black","bold", "#f7ca88", "#383838" ],
|
||||||
|
[ "urlref:url", "white", "black", "italics", "#7cafc2", "#181818" ],
|
||||||
|
[ "url:sel", "white", "dark blue", "underline", "#7cafc2", "#383838" ]
|
||||||
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
"keys": {
|
||||||
|
"/": "search_key",
|
||||||
|
"0": "digits",
|
||||||
|
"1": "digits",
|
||||||
|
"2": "digits",
|
||||||
|
"3": "digits",
|
||||||
|
"4": "digits",
|
||||||
|
"5": "digits",
|
||||||
|
"6": "digits",
|
||||||
|
"7": "digits",
|
||||||
|
"8": "digits",
|
||||||
|
"9": "digits",
|
||||||
|
"a": "add_url",
|
||||||
|
"C": "clipboard",
|
||||||
|
"c": "context",
|
||||||
|
"ctrl l": "clear_screen",
|
||||||
|
"ctrl f": "page_down",
|
||||||
|
"ctrl b": "page_up",
|
||||||
|
"d": "del_url",
|
||||||
|
"f1": "help_menu",
|
||||||
|
"G": "bottom",
|
||||||
|
"g": "top",
|
||||||
|
"j": "down",
|
||||||
|
"k": "up",
|
||||||
|
"J": "next",
|
||||||
|
"K": "previous",
|
||||||
|
"P": "clipboard_pri",
|
||||||
|
"l": "link_handler",
|
||||||
|
"o": "open_queue",
|
||||||
|
"O": "open_queue_win",
|
||||||
|
"p": "palette",
|
||||||
|
"Q": "quit",
|
||||||
|
"q": "quit",
|
||||||
|
"R": "reverse",
|
||||||
|
"S": "all_shorten",
|
||||||
|
"s": "shorten",
|
||||||
|
"u": "all_escape"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, inputs, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.cli.git;
|
cfg = config.modules.cli.git;
|
||||||
|
@ -15,19 +15,19 @@ in
|
||||||
|
|
||||||
userEmail = mkOption {
|
userEmail = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "ephase@xieme-art.org";
|
default = inputs.nix-private.git.personal.userEmail;
|
||||||
description = "git email";
|
description = "git email";
|
||||||
};
|
};
|
||||||
|
|
||||||
signingKey = mkOption {
|
signingKey = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = inputs.nix-private.git.personal.signingKey;
|
||||||
description = "signing key fingerprint";
|
description = "signing key fingerprint";
|
||||||
};
|
};
|
||||||
|
|
||||||
signByDefault = mkOption {
|
signByDefault = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = true;
|
||||||
description = "activate signing by default";
|
description = "activate signing by default";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -68,6 +68,13 @@ in
|
||||||
autoSetupRemote = true;
|
autoSetupRemote = true;
|
||||||
default = "current";
|
default = "current";
|
||||||
};
|
};
|
||||||
|
diff = {
|
||||||
|
algorithm = "histogram";
|
||||||
|
colorMoved = "plain";
|
||||||
|
mnemonicPrefix = true;
|
||||||
|
renames = true;
|
||||||
|
};
|
||||||
|
commit.verbose = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
26
modules/home-manager/cli/k8s/default.nix
Normal file
26
modules/home-manager/cli/k8s/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.modules.cli.k8s;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.cli.k8s = {
|
||||||
|
enable = mkEnableOption "Install k8s utils";
|
||||||
|
|
||||||
|
kubectlPlugins = mkOption {
|
||||||
|
type = types.listOf types.package;
|
||||||
|
default = [];
|
||||||
|
description = "activate signing by default";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
kubectl
|
||||||
|
kubecm
|
||||||
|
] ++ cfg.kubectlPlugins;
|
||||||
|
programs.k9s = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -10,12 +10,28 @@ let
|
||||||
url = "https://ftp.nluug.nl/vim/runtime/spell/fr.utf-8.sug";
|
url = "https://ftp.nluug.nl/vim/runtime/spell/fr.utf-8.sug";
|
||||||
sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
|
sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
## Dynamically create LSP servers configurations list regarding
|
||||||
|
## files in `./files/lsp`
|
||||||
|
lspConfigFiles = lib.mapAttrs' (
|
||||||
|
k: _: lib.nameValuePair
|
||||||
|
("${config.xdg.configHome}/nvim/lsp/${k}")
|
||||||
|
({ source = ./files/lsp/${k};})
|
||||||
|
) (builtins.readDir ./files/lsp);
|
||||||
|
|
||||||
|
## This variable contains neovim LSP activations
|
||||||
|
lspLuaConfig = lib.attrsets.mapAttrsToList (
|
||||||
|
k: v:
|
||||||
|
"vim.lsp.enable('${lib.removeSuffix ".lua" k}')"
|
||||||
|
) (builtins.readDir ./files/lsp);
|
||||||
|
|
||||||
|
## Tony plugins to chave a proper helm linting.
|
||||||
nvim-k8s-lsp = pkgs.vimUtils.buildVimPlugin {
|
nvim-k8s-lsp = pkgs.vimUtils.buildVimPlugin {
|
||||||
pname = "nvim-k8s-lsp";
|
pname = "nvim-k8s-lsp";
|
||||||
version = "main";
|
version = "main";
|
||||||
src = builtins.fetchGit {
|
src = builtins.fetchGit {
|
||||||
url = "https://github.com/tonychg/nvim-k8s-lsp.git";
|
url = "https://github.com/tonychg/nvim-k8s-lsp.git";
|
||||||
rev = "395f6d6b91da55c12b26a2ef1ace7a922a756712";
|
rev = "930aa20bcd54f2d6f16040e98ff4068b292c6c7f";
|
||||||
ref = "main";
|
ref = "main";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -25,17 +41,10 @@ in
|
||||||
enable = mkEnableOption "enable Neovim text editor";
|
enable = mkEnableOption "enable Neovim text editor";
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
|
home.file = lspConfigFiles // {
|
||||||
home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
|
"${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
|
||||||
|
"${config.xdg.configHome}/nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/bash.lua".source = ./files/lsp/bash.lua;
|
};
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/helm.lua".source = ./files/lsp/helm.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/lua.lua".source = ./files/lsp/lua.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/nills.lua".source = ./files/lsp/nills.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/pylsp.lua".source = ./files/lsp/pylsp.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/terraformls.lua".source = ./files/lsp/terraformls.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/tflint.lua".source = ./files/lsp/tflint.lua;
|
|
||||||
home.file."${config.xdg.configHome}/nvim/lsp/yaml.lua".source = ./files/lsp/yaml.lua;
|
|
||||||
|
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -47,6 +56,7 @@ in
|
||||||
# LSP Servers
|
# LSP Servers
|
||||||
clang-tools
|
clang-tools
|
||||||
hadolint
|
hadolint
|
||||||
|
gopls
|
||||||
helm-ls
|
helm-ls
|
||||||
lua-language-server
|
lua-language-server
|
||||||
marksman
|
marksman
|
||||||
|
@ -68,7 +78,9 @@ in
|
||||||
extraLuaConfig =
|
extraLuaConfig =
|
||||||
(builtins.readFile ./files/options.lua)
|
(builtins.readFile ./files/options.lua)
|
||||||
+ (builtins.readFile ./files/keybindings.lua)
|
+ (builtins.readFile ./files/keybindings.lua)
|
||||||
+ (builtins.readFile ./files/lsp.lua)
|
+ ''
|
||||||
|
${ lib.concatStringsSep "\n" lspLuaConfig}
|
||||||
|
''
|
||||||
;
|
;
|
||||||
plugins = with pkgs.vimPlugins; [
|
plugins = with pkgs.vimPlugins; [
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
-- LSP configuration
|
|
||||||
vim.lsp.enable('bash')
|
|
||||||
vim.lsp.enable('helm')
|
|
||||||
vim.lsp.enable('lua')
|
|
||||||
vim.lsp.enable('nills')
|
|
||||||
vim.lsp.enable('pylsp')
|
|
||||||
vim.lsp.enable('terraformls')
|
|
||||||
vim.lsp.enable('tflint')
|
|
||||||
vim.lsp.enable('yaml')
|
|
14
modules/home-manager/cli/neovim/files/lsp/go.lua
Normal file
14
modules/home-manager/cli/neovim/files/lsp/go.lua
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
return {
|
||||||
|
cmd = { "gopls" },
|
||||||
|
filetypes = { "go" },
|
||||||
|
root_markers = { "go.mod", ".git" },
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
analyses = {
|
||||||
|
unusedparams = true,
|
||||||
|
},
|
||||||
|
staticcheck = true,
|
||||||
|
gofumpt = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ require("conform").setup({
|
||||||
formatters_by_ft = {
|
formatters_by_ft = {
|
||||||
yaml = {"yamlfmt"},
|
yaml = {"yamlfmt"},
|
||||||
sh = { "shfmt" },
|
sh = { "shfmt" },
|
||||||
|
go = { "gofmt" },
|
||||||
["_"] = { "trim_whitespace" },
|
["_"] = { "trim_whitespace" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -12,7 +12,7 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
settings = {
|
settings = {
|
||||||
format = "$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$fill$kubernetes$line_break$python$nix_shell$character";
|
format = "$username$hostname$directory$kubernetes$git_branch$git_state$git_status$cmd_duration$line_break$python$nix_shell$character";
|
||||||
directory = {
|
directory = {
|
||||||
style = "blue";
|
style = "blue";
|
||||||
truncate_to_repo = false;
|
truncate_to_repo = false;
|
||||||
|
@ -59,13 +59,10 @@ in
|
||||||
style = "bright-black";
|
style = "bright-black";
|
||||||
};
|
};
|
||||||
kubernetes = {
|
kubernetes = {
|
||||||
format = "[|$symbol$cluster| ]($style)";
|
format = "[$symbol$cluster ]($style)";
|
||||||
style = "yellow";
|
symbol = "";
|
||||||
|
style = "dimmed blue";
|
||||||
disabled = false;
|
disabled = false;
|
||||||
detect_folders = [
|
|
||||||
"clusters"
|
|
||||||
"deploy"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
fill = {
|
fill = {
|
||||||
symbol = " ";
|
symbol = " ";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, inputs, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.cli.tmux;
|
cfg = config.modules.cli.tmux;
|
||||||
|
@ -51,9 +51,6 @@ in
|
||||||
bind -n M-F3 if 'tmux has-session -t 3' {switch-client -t 3} {display-popup -E -E 'create-tmux-session -i 3'}
|
bind -n M-F3 if 'tmux has-session -t 3' {switch-client -t 3} {display-popup -E -E 'create-tmux-session -i 3'}
|
||||||
bind -n M-F4 if 'tmux has-session -t 4' {switch-client -t 4} {display-popup -E -E 'create-tmux-session -i 4'}
|
bind -n M-F4 if 'tmux has-session -t 4' {switch-client -t 4} {display-popup -E -E 'create-tmux-session -i 4'}
|
||||||
|
|
||||||
# Alt+F10 for launching my Nix project
|
|
||||||
bind -n M-F10 run 'create-tmux-session -n config -r nix "run:nvim ." vsplit:20'
|
|
||||||
|
|
||||||
# change window with Alt+{1..5}
|
# change window with Alt+{1..5}
|
||||||
bind -n -N "Goto window 1" M-1 select-window -T -t 1
|
bind -n -N "Goto window 1" M-1 select-window -T -t 1
|
||||||
bind -n -N "Goto window 2" M-2 select-window -T -t 2
|
bind -n -N "Goto window 2" M-2 select-window -T -t 2
|
||||||
|
@ -74,18 +71,21 @@ in
|
||||||
|
|
||||||
setw -g window-status-current-format '#[fg=colour18,bg=colour11] #I\
|
setw -g window-status-current-format '#[fg=colour18,bg=colour11] #I\
|
||||||
#[bg=colour19,fg=colour7,bold] #W\
|
#[bg=colour19,fg=colour7,bold] #W\
|
||||||
#{?window_active, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#{?window_bell_flag,#[fg=colour1] ,}'
|
#{?window_active, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}'
|
||||||
|
|
||||||
set -g pane-border-style fg=colour19
|
set -g pane-border-style fg=colour19
|
||||||
set -g pane-active-border-style fg=colour4
|
set -g pane-active-border-style fg=colour4
|
||||||
|
|
||||||
setw -g window-status-format '#[bg=color12,fg=colour19] #I\
|
setw -g window-status-format '#[bg=color12,fg=colour19] #I\
|
||||||
#[bg=colour18,fg=colour7,dim] #W\
|
#[bg=colour18,fg=colour7,dim] #W\
|
||||||
#{?window_last_flag, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#{?window_bell_flag,#[fg=colour1] ,}'
|
#{?window_last_flag, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#{?window_bell_flag,#[bg=colour1]#[fg=colour15]#[none] ,}'
|
||||||
|
setw -g window-status-bell-style bg=colour18,fg=colour7
|
||||||
set -g status-left-length 100
|
set -g status-left-length 100
|
||||||
set -g status-left '#[bg=colour0, fg=colour6] #S '
|
set -g status-left '#[bg=colour0, fg=colour6] #S '
|
||||||
set -g status-right ' '
|
set -g status-right ' '
|
||||||
'' + cfg.extraConfig;
|
''
|
||||||
|
+ inputs.nix-private.tmux.nix
|
||||||
|
+ cfg.extraConfig;
|
||||||
plugins = with pkgs; [
|
plugins = with pkgs; [
|
||||||
tmuxPlugins.tmux-fzf
|
tmuxPlugins.tmux-fzf
|
||||||
];
|
];
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
./cli/direnv
|
./cli/direnv
|
||||||
./cli/ghq/default.nix
|
./cli/ghq/default.nix
|
||||||
./cli/git
|
./cli/git
|
||||||
|
./cli/k8s
|
||||||
./cli/neovim
|
./cli/neovim
|
||||||
./cli/starship
|
./cli/starship
|
||||||
./cli/tmux
|
./cli/tmux
|
||||||
|
@ -24,5 +25,6 @@
|
||||||
./web/qutebrowser/default.nix
|
./web/qutebrowser/default.nix
|
||||||
./web/webcord
|
./web/webcord
|
||||||
./accounts/dav
|
./accounts/dav
|
||||||
|
./accounts/email
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,16 +15,16 @@ with lib;
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
font = "Fira Code Nerd Font 10";
|
font = "Fira Code Nerd Font 10";
|
||||||
backgroundColor = "#353535FF";
|
background-color = "#353535";
|
||||||
borderColor = "#1CD180";
|
border-color = "#1CD180";
|
||||||
progressColor = "over #5566AAFF";
|
progress-color = "over #5566AA";
|
||||||
textColor = "#FDFDFD";
|
text-color = "#FDFDFD";
|
||||||
width = 300;
|
width = 300;
|
||||||
height = 100;
|
height = 100;
|
||||||
borderRadius = 0;
|
border-radius = 0;
|
||||||
borderSize = 2;
|
border-size = 2;
|
||||||
icons = true;
|
icons = true;
|
||||||
maxIconSize = 64;
|
max-icon-size = 64;
|
||||||
layer = "overlay";
|
layer = "overlay";
|
||||||
anchor = "top-right";
|
anchor = "top-right";
|
||||||
format = ''
|
format = ''
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
webdav:
|
|
||||||
url:
|
|
||||||
caldav: ENC[AES256_GCM,data:UMoSLlEhxtJ/80wIQlGaqfu/OI4JXodSLYySwAyJJg==,iv:WTGZ8mq3huVEPMNOBDGdghy994Z5vCzvVDMvp5djnlw=,tag:s34QZVjqvNiQT/P9SVCeUw==,type:str]
|
|
||||||
carddav: ENC[AES256_GCM,data:oGLZ4c02b4wiYCqhyQzC1NG210BUpSpSqibi7xvtIjHhW/X4wvYU5QPm2VKCrJYpvqIEeiah1TDwvByqLpBz5d8Ucyme,iv:cwaWTvdS5eEGmwm5+n2N31ajzAXPix4woXECUqXtk3E=,tag:jRK3viRDzwd5JmNh6UVt2A==,type:str]
|
|
||||||
username: ENC[AES256_GCM,data:Z/QVE3Di,iv:pRBgv/K+VzbF5/iaftTDoxZWjvVztPznLJ5LKpKQaoM=,tag:rCw9mLFtzhpp5vO5eVKqvA==,type:str]
|
|
||||||
password: ENC[AES256_GCM,data:X7hjL2VczjPGKF4n2g==,iv:BwqXZ3h+EIHU+Cvx8gDYhgd2NiBkednUz+ksp40sYas=,tag:ngbtcYsfOxvTTcftBE+lMg==,type:str]
|
|
||||||
sops:
|
|
||||||
kms: []
|
|
||||||
gcp_kms: []
|
|
||||||
azure_kv: []
|
|
||||||
hc_vault: []
|
|
||||||
age:
|
|
||||||
- recipient: age19kvatn3zpeqh9zy7u8ce0hqe7dyaesxrukewxt8u7pf4cqkj5dfqm5nlwy
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJRk1KamJ3clA4QTBZT3BL
|
|
||||||
blZGaVNQb2tWMTkrWUxicm9PdXV6RTJJbXh3ClJJQTJON3BBRGJ4RWg1UnRQNVoy
|
|
||||||
bFllM0E1djlOUTVRQ1lZc1JEQS9YNXcKLS0tIEhac3FpUVd6TW9pbUMyNlAzbk5P
|
|
||||||
dGZkOExNbTRuS0NvaDgzUmlFRVNvckEK7PSVxtaDd/3yWIIuAMcX586imRu/On09
|
|
||||||
duwFZ5btOY2fxNYgV9sCG7Vr+OGCO8n9OWBS9hLy7MJwAzi/f5l7Fg==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2024-07-20T16:25:53Z"
|
|
||||||
mac: ENC[AES256_GCM,data:4vNjXD26LeHv00B4gDumkUzq7Us9HRWv79Wq3iyTeDjKOXw9lluIQIZsDB1aQS90dTNCEvlbZ6pt1oHRqGySpDcKHId6rsUy9qkeLl683haKKilT47ABpGiMd2sY6xL1FQPiXMH4qc7wxh+EuS0N6Y+mgIY9Kn0qP6ion1s/lqs=,iv:JZ5lnJKBXQeKadihHyItueHDO6zULVMLSPmGCe+Qlz4=,tag:+bh08XI2TWov6yQJ1+KtoA==,type:str]
|
|
||||||
pgp:
|
|
||||||
- created_at: "2024-06-24T20:12:19Z"
|
|
||||||
enc: |-
|
|
||||||
-----BEGIN PGP MESSAGE-----
|
|
||||||
|
|
||||||
hQIMA9/d8qUtz+3ZAQ/7BoojnrnGgF4TEnFTJMWVy229Cx1knABVot45A1frFWmS
|
|
||||||
kwIGPGQPlCjGF4tyIOmBy8WpQWBuKffYakCC/OklHCyfnLjsyhcR+MSqDVzqMmy3
|
|
||||||
dEThTcGPRCerM1Mu8oWPk0yq5AKzuJagr9+4ITrljsh6tRwA4qmfKxQ6BZhGPQHJ
|
|
||||||
3FZwcQHfaDkuag3o5swNKHX//MIZwEDyXJHKgeTUPhENzc0POdjPU5CZN0HBU4ep
|
|
||||||
98PJAlAiDKyYSQkg1MfOWvCllyfvhGPzTLEPq5jazqpc7lgNKxJGU5kTnUUi2fKS
|
|
||||||
gCJdqRlMBO/3S8wUZg0gIsw1+OwmfL0y99MeMP1ggGaqFkGs6Pqj7sRd6/QcuP0l
|
|
||||||
w2QZgB9S6DOUkfy5m5Xw7VboE2aAX4BOrWNJVDy//358322xxuqZdbp3pIjnsmt/
|
|
||||||
b2gTZb1eGK/o5GmXfgzCf7In1b3wldg/ZSHyxGct1CJIgNBb1nFDMmyVI9J5zER0
|
|
||||||
2ZTflNfN/cxttW2BvGRoL3fWXnO+ThLHz1q1WWWCOC7TLTnESOtAueSCTlrMcij/
|
|
||||||
7zL7Wc98JgdAuxhznMjiYqY9nZK48jhBCBOdC0uool/FNElcStUaOq1O3HRo5qoi
|
|
||||||
s277Wqtp0uZqeLBxgNEGwicEDm9BbrVzH9egYGMaPJI6STIJYduJXBegnPf5KFXS
|
|
||||||
XgHTJyK7u9MrZ58kkiT95455NEqQd27JMqmsGwReX6/LpYs5KJJGT4qGNab8GM5A
|
|
||||||
VMniFb1GOXIOxSbYgfkgaHc+zK43O5UwBwegOneTC6ak/CQYvD9xQS94FKqwF10=
|
|
||||||
=7pZ/
|
|
||||||
-----END PGP MESSAGE-----
|
|
||||||
fp: 26D5035DF6B4BE70F2B51B4C178139E02D2ACF00
|
|
||||||
unencrypted_suffix: _unencrypted
|
|
||||||
version: 3.8.1
|
|
Loading…
Add table
Add a link
Reference in a new issue