Compare commits
No commits in common. "55517dba816fc03fe000b35caf695da11c664584" and "e4dcb39fc5964eadce282c83b7ce8d5458e0126f" have entirely different histories.
55517dba81
...
e4dcb39fc5
9 changed files with 17 additions and 495 deletions
41
flake.lock
generated
41
flake.lock
generated
|
@ -56,26 +56,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-private": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1754865211,
|
|
||||||
"narHash": "sha256-/J6DVTh9f2KXB9N6Dvdf/tZQjkwCzVNxztgNPl2wNVI=",
|
|
||||||
"ref": "main",
|
|
||||||
"rev": "bb8073a0dc9ac1299e73c4a576bbd9e1314483e6",
|
|
||||||
"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"
|
||||||
}
|
}
|
||||||
|
|
23
flake.nix
23
flake.nix
|
@ -15,23 +15,20 @@
|
||||||
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
|
||||||
stateVersion = "23.11";
|
stateVersion = "23.11";
|
||||||
|
|
||||||
allSystems = [
|
allSystems = [
|
||||||
"x86_64-linux" # 64bit AMD/Intel x86
|
"x86_64-linux" # 64bit AMD/Intel x86
|
||||||
"aarch64-linux" # 64bit ARM Linux
|
"aarch64-linux" # 64bit ARM Linux
|
||||||
];
|
];
|
||||||
|
|
||||||
forAllSystems = fn:
|
forAllSystems = fn:
|
||||||
nixpkgs.lib.genAttrs allSystems
|
nixpkgs.lib.genAttrs allSystems
|
||||||
(system: fn { pkgs = import nixpkgs { inherit system; }; });
|
(system: fn { pkgs = import nixpkgs { inherit system; }; });
|
||||||
|
|
||||||
createNixosSystem = { system, hostname, username ? "ephase" }: nixpkgs.lib.nixosSystem {
|
createNixosSystem = { system, hostname, username ? "ephase" }: nixpkgs.lib.nixosSystem {
|
||||||
system = system;
|
system = system;
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
|
@ -43,7 +40,7 @@
|
||||||
./nixos/default.nix
|
./nixos/default.nix
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
createHomeConfiguration = { system ? "x86_64-linux", hostname, username ? "ephase" }:
|
createHomeConfiguration = { system ? "x86_64-linux", hostname, username ? "ephase" }:
|
||||||
home-manager.lib.homeManagerConfiguration {
|
home-manager.lib.homeManagerConfiguration {
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
|
@ -82,13 +79,13 @@
|
||||||
luci = createNixosSystem { system = "x86_64-linux"; hostname = "luci"; };
|
luci = createNixosSystem { system = "x86_64-linux"; hostname = "luci"; };
|
||||||
};
|
};
|
||||||
homeConfigurations = {
|
homeConfigurations = {
|
||||||
"rick" = createHomeConfiguration { system = "aarch64-linux"; hostname = "rick";};
|
"rick" = createHomeConfiguration { system = "aarch64-linux"; hostname = "rick";};
|
||||||
"luci" = createHomeConfiguration { system = "x86_64-linux"; hostname = "luci";};
|
"luci" = createHomeConfiguration { system = "x86_64-linux"; hostname = "luci";};
|
||||||
"morty" = createHomeConfiguration { system = "x86_64-linux"; hostname = "morty";};
|
"morty" = createHomeConfiguration { system = "x86_64-linux"; hostname = "morty";};
|
||||||
"mrmeeseeks" = createHomeConfiguration { system = "x86_64-linux"; hostname = "mrmeeseeks";};
|
"mrmeeseeks" = createHomeConfiguration { system = "x86_64-linux"; hostname = "mrmeeseeks";};
|
||||||
"work" = createHomeConfiguration {
|
"work" = createHomeConfiguration {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
hostname = "work";
|
hostname = "work";
|
||||||
username = "yorick-barbanneau";
|
username = "yorick-barbanneau";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,14 +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";
|
|
||||||
};
|
|
||||||
application = {
|
application = {
|
||||||
gnupg = {
|
gnupg = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
home.file.".config/xkb/symbols/gpdwinmax".text =
|
home.file.".config/xkb/symbols/gpdwinmax".text =
|
||||||
''
|
''
|
||||||
default partial alphanumeric_keys
|
default partial alphanumeric_keys
|
||||||
xkb_symbols "us-intl-winmax" {
|
xkb_symbols "us-intl-winmax" {
|
||||||
|
@ -30,5 +30,4 @@
|
||||||
scale = "1.3";
|
scale = "1.3";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sops.age.keyFile = "/home/ephase/.config/sops/age/keys.txt";
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,252 +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";
|
|
||||||
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)}
|
|
||||||
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,122 +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:]]|-)+ '
|
|
||||||
|
|
||||||
# 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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -74,15 +74,14 @@ 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 ' '
|
||||||
|
|
|
@ -25,6 +25,5 @@
|
||||||
./web/qutebrowser/default.nix
|
./web/qutebrowser/default.nix
|
||||||
./web/webcord
|
./web/webcord
|
||||||
./accounts/dav
|
./accounts/dav
|
||||||
./accounts/email
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue