Compare commits
No commits in common. "cdd15c43049f82da3220decca811f2b455c42812" and "957afa66d05910a038633876244e2773167d13f7" have entirely different histories.
cdd15c4304
...
957afa66d0
22 changed files with 179 additions and 637 deletions
14
.sops.yaml
Normal file
14
.sops.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# 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,26 +56,6 @@
|
||||||
"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",
|
||||||
|
@ -98,20 +78,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"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=",
|
||||||
|
@ -126,7 +92,7 @@
|
||||||
"type": "indirect"
|
"type": "indirect"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748693115,
|
"lastModified": 1748693115,
|
||||||
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
|
||||||
|
@ -145,7 +111,7 @@
|
||||||
"nur": {
|
"nur": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"nixpkgs": "nixpkgs_3",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"treefmt-nix": "treefmt-nix"
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -165,9 +131,8 @@
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nix-private": "nix-private",
|
|
||||||
"nixgl": "nixgl",
|
"nixgl": "nixgl",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs",
|
||||||
"nur": "nur",
|
"nur": "nur",
|
||||||
"sops-nix": "sops-nix"
|
"sops-nix": "sops-nix"
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,6 @@
|
||||||
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
|
||||||
|
|
4
home-manager/base.nix
Normal file
4
home-manager/base.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
_:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -1,15 +1,5 @@
|
||||||
{ 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;
|
||||||
|
@ -26,10 +16,7 @@
|
||||||
git.enable = true;
|
git.enable = true;
|
||||||
neovim.enable = true;
|
neovim.enable = true;
|
||||||
starship.enable = true;
|
starship.enable = true;
|
||||||
tmux = {
|
tmux.enable = true;
|
||||||
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,5 +30,4 @@
|
||||||
scale = "1.3";
|
scale = "1.3";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sops.age.keyFile = "/home/ephase/.config/sops/age/keys.txt";
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, inputs, ... }: {
|
{ pkgs, ... }: {
|
||||||
config.modules = {
|
config.modules = {
|
||||||
application = {
|
application = {
|
||||||
zathura.enable = true;
|
zathura.enable = true;
|
||||||
|
@ -13,21 +13,20 @@
|
||||||
ghq.enable = true;
|
ghq.enable = true;
|
||||||
git = {
|
git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
userEmail = inputs.nix-private.git.work.userEmail;
|
userEmail = "ybarbanneau@sellsy.com";
|
||||||
signingKey = inputs.nix-private.git.work.signingKey;
|
signingKey = "6E1A834E282FBD98B48069444447A19BBEDB8DBA";
|
||||||
};
|
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 = inputs.nix-private.tmux.work;
|
extraConfig = ''
|
||||||
|
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,23 +1,36 @@
|
||||||
{ lib, config, inputs, pkgs, ... }:
|
{ lib, config, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.dav;
|
cfg = config.modules.accounts.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.dav = {
|
options.modules.accounts.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 = {
|
||||||
"${inputs.nix-private.dav.personal.secret.key}" = {
|
"webdav/url/caldav" = {
|
||||||
sopsFile = "${secretsDirectory}/${inputs.nix-private.dav.personal.secret.file}";
|
sopsFile = ../../../../secrets/accounts.yaml;
|
||||||
|
};
|
||||||
|
"webdav/url/carddav" = {
|
||||||
|
sopsFile = ../../../../secrets/accounts.yaml;
|
||||||
|
};
|
||||||
|
"webdav/username" = {
|
||||||
|
sopsFile = ../../../../secrets/accounts.yaml;
|
||||||
|
};
|
||||||
|
"webdav/password" = {
|
||||||
|
sopsFile = ../../../../secrets/accounts.yaml;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -25,15 +38,11 @@ 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 = {
|
remote.type = "caldav";
|
||||||
type = "caldav";
|
remote.passwordCommand = [
|
||||||
url = inputs.nix-private.dav.personal.caldavUrl;
|
"cat"
|
||||||
userName = inputs.nix-private.dav.personal.userName;
|
"${config.sops.secrets."webdav/password".path}"
|
||||||
passwordCommand = [
|
];
|
||||||
"${pkgs.coreutils}/bin/cat"
|
|
||||||
"${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
vdirsyncer = vdirsyncerConf // {
|
vdirsyncer = vdirsyncerConf // {
|
||||||
metadata = [
|
metadata = [
|
||||||
"color"
|
"color"
|
||||||
|
@ -43,6 +52,10 @@ in
|
||||||
"VTODO"
|
"VTODO"
|
||||||
"VEVENT"
|
"VEVENT"
|
||||||
];
|
];
|
||||||
|
urlCommand = [
|
||||||
|
"cat"
|
||||||
|
"${config.sops.secrets."webdav/url/caldav".path}"
|
||||||
|
];
|
||||||
collections = [
|
collections = [
|
||||||
"from a"
|
"from a"
|
||||||
"from b"
|
"from b"
|
||||||
|
@ -57,23 +70,22 @@ in
|
||||||
|
|
||||||
accounts.contact.basePath = ".local/share/contacts";
|
accounts.contact.basePath = ".local/share/contacts";
|
||||||
accounts.contact.accounts.personal_contacts = {
|
accounts.contact.accounts.personal_contacts = {
|
||||||
remote = {
|
remote.type = "carddav";
|
||||||
type = "carddav";
|
remote.passwordCommand = [
|
||||||
url = inputs.nix-private.dav.personal.carddavUrl;
|
"cat"
|
||||||
userName = inputs.nix-private.dav.personal.userName;
|
"${config.sops.secrets."webdav/password".path}"
|
||||||
passwordCommand = [
|
];
|
||||||
"${pkgs.coreutils}/bin/cat"
|
local.type = "filesystem";
|
||||||
"${config.sops.secrets."${inputs.nix-private.dav.personal.secret.key}".path}"
|
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;
|
||||||
|
|
|
@ -1,254 +0,0 @@
|
||||||
{ 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 &
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,123 +0,0 @@
|
||||||
# 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
|
|
|
@ -1,54 +0,0 @@
|
||||||
{
|
|
||||||
"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, inputs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
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 = inputs.nix-private.git.personal.userEmail;
|
default = "ephase@xieme-art.org";
|
||||||
description = "git email";
|
description = "git email";
|
||||||
};
|
};
|
||||||
|
|
||||||
signingKey = mkOption {
|
signingKey = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = inputs.nix-private.git.personal.signingKey;
|
default = null;
|
||||||
description = "signing key fingerprint";
|
description = "signing key fingerprint";
|
||||||
};
|
};
|
||||||
|
|
||||||
signByDefault = mkOption {
|
signByDefault = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = false;
|
||||||
description = "activate signing by default";
|
description = "activate signing by default";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -68,13 +68,6 @@ in
|
||||||
autoSetupRemote = true;
|
autoSetupRemote = true;
|
||||||
default = "current";
|
default = "current";
|
||||||
};
|
};
|
||||||
diff = {
|
|
||||||
algorithm = "histogram";
|
|
||||||
colorMoved = "plain";
|
|
||||||
mnemonicPrefix = true;
|
|
||||||
renames = true;
|
|
||||||
};
|
|
||||||
commit.verbose = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
{ 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,28 +10,12 @@ 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 = "930aa20bcd54f2d6f16040e98ff4068b292c6c7f";
|
rev = "395f6d6b91da55c12b26a2ef1ace7a922a756712";
|
||||||
ref = "main";
|
ref = "main";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -41,10 +25,17 @@ in
|
||||||
enable = mkEnableOption "enable Neovim text editor";
|
enable = mkEnableOption "enable Neovim text editor";
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.file = lspConfigFiles // {
|
home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
|
||||||
"${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
|
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.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;
|
||||||
|
@ -56,7 +47,6 @@ in
|
||||||
# LSP Servers
|
# LSP Servers
|
||||||
clang-tools
|
clang-tools
|
||||||
hadolint
|
hadolint
|
||||||
gopls
|
|
||||||
helm-ls
|
helm-ls
|
||||||
lua-language-server
|
lua-language-server
|
||||||
marksman
|
marksman
|
||||||
|
@ -78,9 +68,7 @@ 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; [
|
||||||
{
|
{
|
||||||
|
|
9
modules/home-manager/cli/neovim/files/lsp.lua
Normal file
9
modules/home-manager/cli/neovim/files/lsp.lua
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-- 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')
|
|
@ -1,14 +0,0 @@
|
||||||
return {
|
|
||||||
cmd = { "gopls" },
|
|
||||||
filetypes = { "go" },
|
|
||||||
root_markers = { "go.mod", ".git" },
|
|
||||||
settings = {
|
|
||||||
gopls = {
|
|
||||||
analyses = {
|
|
||||||
unusedparams = true,
|
|
||||||
},
|
|
||||||
staticcheck = true,
|
|
||||||
gofumpt = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -7,7 +7,6 @@ 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$kubernetes$git_branch$git_state$git_status$cmd_duration$line_break$python$nix_shell$character";
|
format = "$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$fill$kubernetes$line_break$python$nix_shell$character";
|
||||||
directory = {
|
directory = {
|
||||||
style = "blue";
|
style = "blue";
|
||||||
truncate_to_repo = false;
|
truncate_to_repo = false;
|
||||||
|
@ -59,10 +59,13 @@ in
|
||||||
style = "bright-black";
|
style = "bright-black";
|
||||||
};
|
};
|
||||||
kubernetes = {
|
kubernetes = {
|
||||||
format = "[$symbol$cluster ]($style)";
|
format = "[|$symbol$cluster| ]($style)";
|
||||||
symbol = "";
|
style = "yellow";
|
||||||
style = "dimmed blue";
|
|
||||||
disabled = false;
|
disabled = false;
|
||||||
|
detect_folders = [
|
||||||
|
"clusters"
|
||||||
|
"deploy"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
fill = {
|
fill = {
|
||||||
symbol = " ";
|
symbol = " ";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
{ lib, config, pkgs, inputs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.modules.cli.tmux;
|
cfg = config.modules.cli.tmux;
|
||||||
|
@ -51,6 +51,9 @@ 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
|
||||||
|
@ -71,21 +74,18 @@ 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_active, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#{?window_bell_flag,#[fg=colour1] ,}'
|
||||||
|
|
||||||
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,#[bg=colour1]#[fg=colour15]#[none] ,}'
|
#{?window_last_flag, ,}#{?window_marked_flag, ,}#{?window_activity_flag, ,}#{?window_silence_flag, ,}#{?window_zoomed_flag, ,}#{?window_bell_flag,#[fg=colour1] ,}'
|
||||||
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,7 +9,6 @@
|
||||||
./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
|
||||||
|
@ -25,6 +24,5 @@
|
||||||
./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";
|
||||||
background-color = "#353535";
|
backgroundColor = "#353535FF";
|
||||||
border-color = "#1CD180";
|
borderColor = "#1CD180";
|
||||||
progress-color = "over #5566AA";
|
progressColor = "over #5566AAFF";
|
||||||
text-color = "#FDFDFD";
|
textColor = "#FDFDFD";
|
||||||
width = 300;
|
width = 300;
|
||||||
height = 100;
|
height = 100;
|
||||||
border-radius = 0;
|
borderRadius = 0;
|
||||||
border-size = 2;
|
borderSize = 2;
|
||||||
icons = true;
|
icons = true;
|
||||||
max-icon-size = 64;
|
maxIconSize = 64;
|
||||||
layer = "overlay";
|
layer = "overlay";
|
||||||
anchor = "top-right";
|
anchor = "top-right";
|
||||||
format = ''
|
format = ''
|
||||||
|
|
46
secrets/accounts.yaml
Normal file
46
secrets/accounts.yaml
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
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