Compare commits

...

10 commits

Author SHA1 Message Date
6f30269e1e git ssh don't force user 2026-03-05 10:22:10 +01:00
accc04e214 refactor, prep 2026-03-05 09:59:10 +01:00
82115af252 prep arielle 2026-03-05 09:11:17 +01:00
96e5924fb0 nh 2026-03-04 19:50:45 +01:00
312d6d63ef diesdas 2026-02-27 21:41:24 +01:00
8099faa9ae mail by index 2026-02-16 01:41:59 +01:00
f7fd3a7fe9 no sig on list reply 2026-02-12 15:36:56 +01:00
438cf6da97 list reply 2026-02-12 15:33:40 +01:00
9fdeb99a61 diesdas 2026-02-12 15:28:48 +01:00
40539ae163 prep roundcube, from ktiu.net, nvim stuff 2026-02-05 00:25:04 +01:00
55 changed files with 566 additions and 794 deletions

18
flake.lock generated
View file

@ -8,11 +8,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1769054619, "lastModified": 1772596991,
"narHash": "sha256-LCc0gbSgjehdy41Gi1H5WNxEuW9PtRHFVaPXoFzslQU=", "narHash": "sha256-awJJ4ATy9t8Svrx2z0zAftgXnUaGCFb2Ty0u036CnCQ=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "6509620630f68dc02ac3e99f15a67760778444ff", "rev": "cd2d0893966c0a5c27345a9a72d0418b42b7e36d",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -29,11 +29,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767910483, "lastModified": 1772633058,
"narHash": "sha256-MOU5YdVu4DVwuT5ztXgQpPuRRBjSjUGIdUzOQr9iQOY=", "narHash": "sha256-SO7JapRy2HPhgmqiLbfnW1kMx5rakPMKZ9z3wtRLQjI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "82fb7dedaad83e5e279127a38ef410bcfac6d77c", "rev": "080657a04188aca25f8a6c70a0fb2ea7e37f1865",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -45,11 +45,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1768028080, "lastModified": 1772598333,
"narHash": "sha256-50aDK+8eLvsLK39TzQhKNq50/HcXyP4hyxOYoPoVxjo=", "narHash": "sha256-YaHht/C35INEX3DeJQNWjNaTcPjYmBwwjFJ2jdtr+5U=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d03088749a110d52a4739348f39a63f84bb0be14", "rev": "fabb8c9deee281e50b1065002c9828f2cf7b2239",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -25,12 +25,31 @@
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
modules = [ modules = [
./hosts/arielle ./hosts/arielle
home-manager.nixosModules.home-manager {
home-manager = {
extraSpecialArgs = { inherit inputs; };
useGlobalPkgs = true;
useUserPackages = true;
users = {
till = {
imports = [
./home/minimal.nix
./users/till/home.nix
];
};
};
};
}
]; ];
}; };
homer = nixpkgs.lib.nixosSystem { homer = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
modules = [ ./hosts/homer ]; modules = [
./hosts/homer
];
}; };
mila = nixpkgs.lib.nixosSystem { mila = nixpkgs.lib.nixosSystem {
@ -43,9 +62,7 @@
nova = nixpkgs.lib.nixosSystem { nova = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
modules = [ modules = [
./hosts/nova ./hosts/nova
home-manager.nixosModules.home-manager { home-manager.nixosModules.home-manager {
home-manager = { home-manager = {
extraSpecialArgs = { inherit inputs; }; extraSpecialArgs = { inherit inputs; };
@ -55,29 +72,34 @@
till = { till = {
imports = [ imports = [
./home/desktop-full.nix ./home/profiles/desktop-full.nix
./users/till/home.nix ./users/till/home.nix
]; ];
}; };
alt = { alt = {
imports = [ imports = [
./home/desktop-slim.nix ./home/profiles/desktop-slim.nix
./users/alt/home.nix ./users/alt/home.nix
]; ];
}; };
guest = { guest = {
imports = [ imports = [
./home/desktop-slim.nix ./home/profiles/desktop-slim.nix
./users/guest/home.nix ./users/guest/home.nix
]; ];
}; };
}; };
}; };
} }
{ {
# firefox-addons.config.allowUnfreePredicate = pkg:
# builtins.elem (nixpkgs.lib.getName pkg) [
# "tampermonkey"
# ];
nixpkgs.config.allowUnfreePredicate = pkg: nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs.lib.getName pkg) [ builtins.elem (nixpkgs.lib.getName pkg) [
"corefonts" "corefonts"
@ -85,6 +107,7 @@
"keymapp" "keymapp"
"steam" "steam"
"steam-unwrapped" "steam-unwrapped"
# "tampermonkey"
]; ];
} }
]; ];

View file

@ -5,4 +5,10 @@
aichat aichat
glow glow
]; ];
programs.fish.shellAliases = {
vibe = "aichat -c";
clank = "aichat -e";
slop = "aichat";
};
} }

View file

@ -3,7 +3,7 @@
let let
myRemote = slug: { myRemote = slug: {
passwordCommand = [ "pass" "ktiu/radicale" ]; passwordCommand = [ "pass" "accounts/ktiu-radicale" ];
userName = "ktiu"; userName = "ktiu";
type = "caldav"; type = "caldav";
url = "https://kalender.ktiu.net/ktiu/${slug}"; url = "https://kalender.ktiu.net/ktiu/${slug}";
@ -127,7 +127,7 @@ in
remote = { remote = {
type = "caldav"; type = "caldav";
url = "https://cloud.gridisnotajournal.de/remote.php/dav/calendars/till/grid/"; url = "https://cloud.gridisnotajournal.de/remote.php/dav/calendars/till/grid/";
passwordCommand = [ "pass" "grid/nextcloud" ]; passwordCommand = [ "pass" "uni/grid-caldav-nextcloud" ];
userName = "till"; userName = "till";
}; };
}; };

View file

@ -1,53 +0,0 @@
# vim: set ft=conf
[2.5admins]
url=https://2.5admins.com/feed/podcast
[50plus2]
url=https://50plus2.podigee.io/feed/mp3
album_tag=50+2
[drei90]
url=http://feeds.feedburner.com/Drei90
album_tag=drei90
[efpodcast]
url=https://www.eintracht-podcast.de/feed/mp3
[latenightlinux]
url=https://latenightlinux.com/feed/mp3
[linuxafterdark]
url=https://linuxafterdark.net/feed/podcast
[linuxdevtime]
url=https://latenightlinux.com/feed/extra
[linuxmatters]
url=https://linuxmatters.sh/episode/index.xml
[logbuchnetzpolitik]
url=https://feeds.metaebene.me/lnp/mp3
album_tag=Logbuch Netzpolitik
[schlusskonferenz]
url=https://schlusskonferenz.podigee.io/feed/mp3
[tribünengespräch]
url=https://tribuenengespraech.podigee.io/feed/mp3
[wettbrötchen]
url=https://www.wett-broetchen.de/feed/mp3
album_tag=Wettbrötchen
[edeltalk]
url=https://cdn.julephosting.de/podcasts/573-edeltalk-mit-dominik-kevin/feed.rss
album_tag=Edeltalk
[youredeadtome]
url=https://podcasts.files.bbci.co.uk/p07mdbhg.rss
[*]
genre_tag=Podcast
spool=/home/till/.local/share/podcasts
filename=%(channel_title)_%(date)_%(title).mp3

View file

@ -1,15 +0,0 @@
{ pkgs, ... }:
{
imports = [
./desktop-slim.nix
./messaging.nix
./r.nix
./tex.nix
./mail
./office-gui.nix
./office-cli.nix
./aichat.nix
];
}

View file

@ -1,4 +1,4 @@
{ config, pkgs, inputs, lib, ... }: { config, pkgs, ... }:
{ {
home.file.".npmrc".text = '' home.file.".npmrc".text = ''
@ -6,12 +6,8 @@
''; '';
home.packages = with pkgs; [ home.packages = with pkgs; [
bundler
bundix
nodejs nodejs
yarn-berry
duckdb
tippecanoe
pmtiles
]; ];
programs.direnv.enable = true;
} }

View file

@ -1,7 +1,6 @@
{ config, pkgs, inputs, osConfig, ... }: { config, pkgs, inputs, osConfig, ... }:
{ {
programs.firefox = { programs.firefox = {
enable = true; enable = true;
policies = { policies = {
@ -149,6 +148,7 @@
user_pref("signon.rememberSignons", false); user_pref("signon.rememberSignons", false);
user_pref("toolkit.telemetry.enabled", false); user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.server", ""); user_pref("toolkit.telemetry.server", "");
user_pref("widget.gtk.libadwaita-colors.enabled", false);
''; '';
}; };
}; };

View file

@ -1,7 +1,6 @@
{ config, ... }: { config, ... }:
{ {
home.shellAliases = { home.shellAliases = {
top = "btm --battery"; top = "btm --battery";
du = "dust"; du = "dust";
@ -13,7 +12,6 @@
}; };
programs.fish = { programs.fish = {
enable = true; enable = true;
interactiveShellInit = "fish_add_path ${config.xdg.dataHome}/npm/packages/bin"; interactiveShellInit = "fish_add_path ${config.xdg.dataHome}/npm/packages/bin";
@ -53,6 +51,10 @@
end end
end end
function diary --description 'Create or edit today\'s diary entry'
nvim -c "call Diary()"
end
set -U fish_prompt_pwd_dir_length 0 set -U fish_prompt_pwd_dir_length 0
function fish_prompt --description "Write out the prompt" function fish_prompt --description "Write out the prompt"

View file

@ -8,13 +8,13 @@
main = { main = {
shell = "${pkgs.fish}/bin/fish -c 'tmux attach'"; shell = "${pkgs.fish}/bin/fish -c 'tmux attach'";
pad = "34x34"; pad = "34x34";
# font = "JetBrains Mono:size=16"; font = "JetBrains Mono:size=14";
font = "Adwaita Mono:size=17"; # font = "Adwaita Mono:size=17";
font-bold = "Adwaita Mono:size=17:weight=bold"; # font-bold = "Adwaita Mono:size=17:weight=bold";
font-italic = "Adwaita Mono:size=17:slant=italic"; # font-italic = "Adwaita Mono:size=17:slant=italic";
font-bold-italic = "Adwaita Mono:size=17:weight=boldslant=italic"; # font-bold-italic = "Adwaita Mono:size=17:weight=boldslant=italic";
initial-window-mode = "maximized"; # initial-window-mode = "maximized";
initial-color-theme = "dark"; # initial-color-theme = "dark";
}; };
mouse.hide-when-typing = "yes"; mouse.hide-when-typing = "yes";

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }: { pkgs, ... }:
{ {
home.pointerCursor = { home.pointerCursor = {
@ -35,7 +35,6 @@
gtk-theme = "Adwaita"; gtk-theme = "Adwaita";
}; };
"org/gnome/desktop/background" = { "org/gnome/desktop/background" = {
picture-uri = "file://" + ./wallpaper_nix_paper_gray.svg;
picture-options = "zoom"; picture-options = "zoom";
}; };
"org/gnome/desktop/wm/keybindings" = { "org/gnome/desktop/wm/keybindings" = {
@ -104,5 +103,12 @@
sleep-inactive-battery-timeout = 1200; sleep-inactive-battery-timeout = 1200;
}; };
}; };
xdg.configFile."run-or-raise/shortcuts.conf".source = ./run-or-raise.conf;
xdg.configFile."run-or-raise/shortcuts.conf".text = ''
<Super>b,firefox,,
<Super>f,nautilus,,
<Super>g:always-run,tmux new-window -n vifm vifm ~/desktop,foot,
<Super>return,foot,,
<Super>p,keepassxc,,,
'';
} }

View file

@ -1,25 +0,0 @@
<Super>b,firefox,,
<Super>f,nautilus,,
<Super>g:always-run,tmux new-window -n vifm vifm ~/desktop,foot,
<Super>return,foot,,
<Super>p,keepassxc,,,
# You may use regular expression in title or wm_class.
# Just put the regular expression between slashes.
# E.g. to jump to pidgin conversation window you may use this line
# (that means any windows of wm_class Pidgin, not containing the title Buddy List)"
# <Super>KP_1,pidgin,Pidgin,/^((?!Buddy List).)*$/
# Have the mail always at numpad-click.
# <Super>KP_2,chromium-browser --app=https://mail.google.com/mail/u/0/#inbox
# =============
# Run only form
# =============
#
# This line will launch notify-send command.
# <Super>h,notify-send Hello world
# Blank lines are allowed. Line starting with "#" means a comment.
# Now delete these shortcuts and put here yours.
# How to know wm_class? Alt+f2, lg, "windows" tab (at least on Ubuntu 17.10)

View file

@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="3840"
height="2160"
viewBox="0 0 3600.0001 2025"
id="svg2"
version="1.1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="papercolor_grey.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.25780956"
inkscape:cx="500.36934"
inkscape:cy="1068.6182"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1014"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="bg"
style="display:inline">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bcbcbc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect5389"
width="3600"
height="2024.7382"
x="132.5822"
y="-957.77832"
transform="translate(-132.5822,958.04022)" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="gradient-logo"
style="display:inline;opacity:1"
transform="translate(-132.5822,958.04022)">
<g
id="g4"
transform="matrix(1.8009416,0,0,1.8009416,-1547.8855,-43.619081)"
style="stroke-width:0.555265">
<g
id="g2"
style="fill:#9d9da1;fill-opacity:1;stroke-width:0.555265">
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="use3439-6"
d="m 1864.6278,-49.22711 -154.8754,268.22157 -36.1595,-61.29501 41.7398,-71.834875 -82.8948,-0.217865 -17.667,-30.627963 18.0405,-31.326737 117.9921,0.372571 42.4056,-73.105854 z"
style="fill:#9d9da1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="use3445-0"
d="m 1876.5091,165.18522 309.7244,0.0152 -35.0032,61.96257 -83.0808,-0.23034 41.2588,71.89798 -17.6911,30.61406 -36.15,0.0398 -58.6734,-102.37043 -84.5144,-0.17145 z"
style="fill:#9d9da1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="use3449-5"
d="m 2056.7797,47.657079 -154.849,-268.236809 71.1628,-0.66757 41.3409,72.06522 41.6361,-71.68011 35.3581,0.0139 18.1095,31.2869 -59.3187,101.99786 42.1087,73.2773 z"
style="fill:#9d9da1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g3"
style="fill:#87878c;fill-opacity:1;stroke-width:0.555265">
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#87878c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 1808.7367,61.262431 154.849,268.236809 -71.1628,0.66757 -41.3409,-72.06522 -41.6361,71.68011 -35.3581,-0.0139 -18.1095,-31.2869 59.3187,-101.99786 -42.1087,-73.27717 z"
id="path4260-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#87878c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 1988.3675,-56.881714 -309.7243,-0.01524 35.0032,-61.962576 83.0808,0.23034 -41.2588,-71.89797 17.6911,-30.61407 36.15,-0.0398 58.6734,102.37043 84.5143,0.17138 z"
id="use4354-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#87878c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.11091;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 2000.5368,158.10537 154.8754,-268.22158 36.1595,61.295012 -41.7398,71.83488 82.8948,0.217865 17.667,30.627963 -18.0405,31.326737 -117.9921,-0.372571 -42.4055,73.105794 z"
id="use4362-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }: { pkgs, ... }:
{ {
@ -6,16 +6,17 @@
pinentry-all pinentry-all
]; ];
services.gpg-agent = { # moved to system
enable = true;
pinentry.package = pkgs.pinentry-gnome3; # services.gpg-agent = {
pinentry.program = "pinentry-gnome3"; # enable = true;
enableSshSupport = true; # pinentry.package = pkgs.pinentry-all;
}; # pinentry.program = "pinentry";
# # enableSshSupport = true;
# };
programs.gpg = { programs.gpg = {
enable = true; enable = true;
# homedir = "${config.xdg.dataHome}/gnupg";
settings = { settings = {
no-emit-version = true; no-emit-version = true;
no-comments = true; no-comments = true;

7
home/hyprland.nix Normal file
View file

@ -0,0 +1,7 @@
{ ... }:
{
wayland.windowManager.hyprland = {
systemd.enable = false;
};
}

View file

@ -1,85 +1,16 @@
# Navigation
bind pager k previous-entry
bind pager j next-entry
# bind index,pager \Cu half-up
# bind index,pager \Cd half-down
# bind pager gg top
# bind index gg first-entry
# bind pager G bottom
# bind index G last-entry
# bind index,pager N search-opposite
bind index <return> display-message
bind index <space> collapse-thread
bind index,pager gf change-folder
# Read HTML
bind index,pager V noop
macro index,pager V "<view-attachments><search>html<enter><view-mailcap><exit>"
# compose # compose
bind compose p postpone-message
bind compose P pgp-menu
# macro compose I "<attach-file>`tmpfile=$(mktemp -u --suffix .png -t XXXXXXXXXXXX -p ~/tmp) && wl-paste -t image/png > "$tmpfile" && echo "$tmpfile"`<enter>" "attach image from clipboard"
bind editor <Tab> complete-query macro index,pager go "<shell-escape>mbsync $my_account && notmuch new<enter>" "Sync this account"
bind editor ^T complete macro index,pager gO "<shell-escape>mbsync -a && notmuch new<enter>" "Sync all accounts"
bind index,pager a group-reply
bind index,pager m noop
macro index,pager mar "<tag-pattern>new<enter><tag-prefix-cond><clear-flag>n<enter><tag-prefix-cond><clear-flag>*<enter>" "Mark all read"
# compose with signature management bind index,pager / noop
macro index,pager @ "<enter-command>set signature=$my_signature<enter><compose-to-sender>" "Compose to sender" macro index,pager // "<vfolder-from-query-readonly>folder:/$my_account/" "Find in account"
macro index,pager c "<enter-command>set signature=$my_signature<enter><mail>" "Compose new message" macro index,pager g/ "<vfolder-from-query-readonly>" "Find in all accounts"
macro index,pager r "<enter-command>unset signature<enter><reply>" "Reply to message" macro index,pager /! "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_spoolfile" "Find in inbox"
macro index,pager a "<enter-command>unset signature<enter><group-reply>" "Reply all" macro index,pager /< "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_record" "Find in sent"
macro index,pager f "<enter-command>unset signature<enter><forward-message>" "Forward message" macro index,pager /> "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_mbox" "Find in archive"
macro index,pager /d "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_postponed" "Find in drafts"
macro index,pager /t "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_trash" "Find in trash"
macro index,pager /j "<vfolder-from-query-readonly>folder:+$my_account/$my_nm_junk" "Find in junk"
# moving messages
macro index,pager J ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$my_junk<enter>" \
"Move to junk folder"
macro index,pager y ":set resolve=no\n<clear-flag>n:set resolve=yes\n<save-message>$mbox<enter>" \
"Move message to the archive"
macro index,pager I "<save-message>$spoolfile<enter>" "Move message to the inbox"
# switch folders
macro index,pager g! "<change-folder>$spoolfile<enter><refresh>" "Go to inbox"
macro index,pager gd "<change-folder>$postponed<enter><refresh>" "Go to drafts"
macro index,pager g< "<change-folder>$record<enter><refresh>" "Go to sent"
macro index,pager ga "<change-folder>$mbox<enter>" "Go to archive"
macro index,pager g> "<change-folder>$mbox<enter><refresh>" "Go to archive"
macro index,pager gt "<change-folder>$trash<enter><refresh>" "Go to trash"
macro index,pager gj "<change-folder>$my_junk<enter><refresh>" "Go to junk"
# accounts
macro index,pager gu "<change-folder>~/.local/share/mail/gu/Inbox<enter><refresh>" "Go to GU"
# macro index,pager gp "<change-folder>+systemli/IMAP/Inbox<enter><refresh>" "Go to Systemli"
macro index,pager gm "<change-folder>~/.local/share/mail/t9e/Inbox<enter><refresh>" "Go to t9e"
# macro index,pager gm "<change-folder>+gmail/IMAP/Inbox<enter><refresh>" "Go to Gmail"
macro index,pager gk "<change-folder>~/.local/share/mail/ksh/Inbox<enter><refresh>" "Go to KSH"
macro index,pager gi "<change-folder>~/.local/share/mail/ktiu/Inbox<enter><refresh>" "Go to ktiu"
# macro index,pager gf "<change-folder>~/.local/share/mail/dkg/Inbox<enter><refresh>" "Go to DKG"
macro index,pager L "<limit>all\n" "Show all messages (undo limit)"
# macro index,pager go "<shell-escape>mbsync -c ~/.config/mbsync/mbsyncrc $my_mbsync_acct && notmuch new &<enter>" \
# "Run mbsync to sync mail for this account"
macro index,pager go "<shell-escape>mbsync $my_mbsync_acct && notmuch new<enter>" \
macro index,pager g/ "<vfolder-from-query-readonly>" "find in nm"
macro index,pager A \
"<pipe-message>khard add-email --vcard-version=4.0<return>" \
"add the sender email address to khard"
macro index,pager S \
"<pipe-message> ripmime -i - -d ~/tmp && rm ~/tmp/textfile*" \
"save all non-text attachments using ripmime"
macro index,pager gb \
"<pipe-message> urlscan<enter>" \
"extract URLs out of a message"
macro index,pager gO \
"<shell-escape>mbsync -a && notmuch new<enter>" \
"run mbsync to sync all mail"

View file

@ -1,89 +1,26 @@
# Alias
set alias_file = ~/.local/share/neomutt/aliases.neomuttrc set alias_file = ~/.local/share/neomutt/aliases.neomuttrc
source $alias_file source $alias_file
set mailcap_path = ~/.config/neomutt/mailcap # External
# source ./smime.neomuttrc
set my_download_folder = ~/tmp set my_download_folder = ~/tmp
# Caching and tmp
set header_cache = $XDG_CACHE_HOME/neomutt/headers
set message_cachedir = $XDG_CACHE_HOME/neomutt/bodies
set header_cache_backend = "lmdb"
set tmpdir = $XDG_CACHE_HOME/neomutt/tmp
# Basic options
unset wait_key
set mbox_type = Maildir
# set delete
set mail_check_stats
unset confirm_append
unset beep
unset mark_old
set sleep_time = 0
# set shell = /bin/bash
# Sending
set use_envelope_from
unset reverse_realname
# Searching
set nm_default_url = "notmuch:///home/till/.local/share/mail/"
# Multi-account setup
# source ~/.config/neomutt/accounts/dkg.neomuttrc
# source ~/.config/neomutt/accounts/gu.neomuttrc
# bind index,pager g noop
# folder-hook $folder/gu/ source ~/.config/neomutt/accounts/gu.neomuttrc
# folder-hook $folder/systemli/ source ~/.config/neomutt/accounts/systemli.neomuttrc
# folder-hook $folder/ks/ source ~/.config/neomutt/accounts/ks.neomuttrc
# folder-hook $folder/gmail/ source ~/.config/neomutt/accounts/gmail.neomuttrc
# folder-hook $folder/ktiu/ source ~/.config/neomutt/accounts/ktiu.neomuttrc
# folder-hook $folder/dkg/ source ~/.config/neomutt/accounts/dkg.neomuttrc
# folder-hook $folder/papa/ source ~/.config/neomutt/accounts/papa.neomuttrc
folder-hook . source ~/.config/neomutt/bindings.neomuttrc
# # Source config
# source ~/.config/neomutt/views.neomuttrc
# source ~/.config/neomutt/sidebar.neomuttrc
# source ~/.config/neomutt/colors.neomuttrc
# source ~/.config/neomutt/smime.neomuttrc
# source ~/.config/neomutt/pgp.neomuttrc
# Compose
set editor = "nvim -c 'call woof#init#Init()'"
set edit_headers
set forward_format = "Fwd: %s"
set forward_attachments
set fast_reply
set include
set forward_quote
unset recall
set resume_draft_files
set abort_noattach_regex = "(attach|enclosed|anbei|anhängen|angehängt|anhang|anhänge|hängt an)"
set abort_noattach = ask-yes
set mime_type_query_command = "file -b --mime-type %s"
set query_command= "khard email --parsable '%s'"
# Status bar # Status bar
set status_chars = "✔↻٪A" set status_chars = "✔↻٪A"
set status_format = "— [ %r ] %f (%lB) %>— %m messages%?n? [ %n new ]?%?d? [ %d to delete ]?%?t? [ %t tagged ]? —"
unset help unset help
# Index # Index
set index_format = "%-25.25F %<[y?%<[7d?%<[d?%[ %H:%M]&%[%a %H:%M]>&%[%d.%m. %Hh]>&%[%d.%m.%Y]> %Z %?X?▼ &?%s" set index_format = "%-25.25F %<[y?%<[7d?%<[d?%[ %H:%M]&%[%a %H:%M]>&%[%d.%m. %Hh]>&%[%d.%m.%Y]> %Z %?X?▼ &?%s"
set strict_threads set strict_threads
set send_charset = "utf-8:iso-8859-1:us-ascii" set send_charset = "utf-8:iso-8859-1:us-ascii"
set charset = "utf-8" set charset = "utf-8"
# sorting
set sort = threads
set sort_aux = reverse-last-date-received
# Pager view # Pager view
set pager_index_lines = 10 set pager_index_lines = 10
set pager_context = 3 set pager_context = 3
set pager_stop set pager_stop
@ -99,38 +36,23 @@ alternative_order text/plain text/enriched text/html
auto_view text/html auto_view text/html
# Attachments # Attachments
set rfc2047_parameters set rfc2047_parameters
set attach_save_dir = $my_download_folder set attach_save_dir = $my_download_folder
## Indicator # Colors
color indicator brightwhite brightblack
## Index color indicator brightwhite brightblack
color index_flags brightmagenta default '.*' color index_flags brightmagenta default '.*'
color index_date cyan default color index_date cyan default
## New mail
color index brightblack default '~N' color index brightblack default '~N'
## Header colors
color header brightblack default ".*" color header brightblack default ".*"
color header brightgreen default "^(Subject)" color header brightgreen default "^(Subject)"
color header yellow default "^(From|To|CC|BCC)" color header yellow default "^(From|To|CC|BCC)"
color header blue default "^Date" color header blue default "^Date"
## Status
# color status yellow default '\[ ↻ \]'
# color status green default '\[ ✔ \]'
# color status magenta default '\[ ٪ \]'
# color status black default '\[ [0-9]+ new \]'
# color status red default '\[ [0-9]+ to delete \]'
## Mutt
color message cyan default color message cyan default
color error red default color error red default
color tilde black default color tilde black default
## Pager
color normal default default color normal default default
color attachment brightblack default color attachment brightblack default
color search black yellow color search black yellow
@ -142,8 +64,6 @@ color quoted4 red default
color quoted5 brightred default color quoted5 brightred default
color signature cyan default color signature cyan default
color underline black default color underline black default
## Email
color body blue default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses color body blue default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
color body blue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL color body blue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
color body red default "(BAD signature)" color body red default "(BAD signature)"

View file

@ -1,42 +1,81 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
{ let
programs.msmtp = {
enable = true; makeConfig = accountName:
configContent = '' ''
defaults unset reverse_name
logfile ${config.xdg.stateHome}/msmtp/msmtp.log unset crypt_auto_pgp
port 587 unset crypt_auto_smime
set my_account='${ accountName }'
macro index,pager / "<vfolder-from-query>tag:${ accountName } "
unalternates *
set nm_record_tags = "+sent -inbox -unread +${ accountName }";
set my_signature = ${ pkgs.writeText "signature.txt" config.accounts.email.accounts.${accountName}.signature.text }
set status_format = " [ %r ] $my_account %f (%lB) %> %m messages%?n? [ %n new ]?%?d? [ %d to delete ]?%?t? [ %t tagged ]? "
''; '';
makeAccount = accountName: {
signature.showSignature = "append";
smtp.tls.useStartTls = true;
msmtp.enable = true;
mbsync = {
enable = true;
create = "maildir";
expunge = "both";
};
neomutt = {
enable = true;
sendMailCommand = "${lib.getExe pkgs.msmtp} -a ${ accountName }";
};
notmuch = {
enable = true;
neomutt = {
virtualMailboxes = [
{ name = "Inbox"; query = "tag:${ accountName } and tag:inbox"; }
{ name = "Archive"; query = "tag:${ accountName } and not tag:sent and not tag:draft"; }
{ name = "Sent"; query = "tag:${ accountName } and tag:sent"; }
{ name = "Drafts"; query = "tag:${ accountName } and tag:draft"; }
{ name = "Spam"; query = "tag:${ accountName } and tag:spam"; }
{ name = "Trash"; query = "tag:${ accountName } and tag:trash"; }
];
};
};
}; };
programs.mbsync.enable = true; mailcap_path = pkgs.writeText "neomutt_mailcap" ''
application/pdf; zathura %s
multipart; xdg-open %s
text/html; firefox %s; description=HTML Text; nametemplate=%s.html; needsterminal
text/html; w3m -v -F -T text/html -dump %s; copiousoutput
text/calendar; khal import %s
text; neomutt %s
application; xdg-open %s
image; xdg-open %s
video; xdg-open %s
audio; xdg-open %s
message; xdg-open %s
model; xdg-open %s
'';
programs.neomutt = { in
enable = true;
vimKeys = true;
extraConfig = builtins.readFile ./config.neomuttrc;
};
programs.notmuch.enable = true; {
programs.mu.enable = true;
xdg.configFile."neomutt/bindings.neomuttrc".source = ./bindings.neomuttrc;
xdg.configFile."neomutt/smime.neomuttrc".source = ./smime.neomuttrc;
xdg.configFile."neomutt/mailcap".source = ./neomutt_mailcap;
accounts.email = { accounts.email = {
maildirBasePath = "${config.xdg.dataHome}/mail"; maildirBasePath = "${config.xdg.dataHome}/mail";
accounts = { accounts = {
gu = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
gu = {
primary = true; primary = true;
address = "straube@geo.uni-frankfurt.de"; address = "straube@geo.uni-frankfurt.de";
realName = "Till Straube"; realName = "Till Straube";
imap.host = "imap.server.uni-frankfurt.de"; imap.host = "imap.server.uni-frankfurt.de";
smtp.host = "smtpauth.rz.uni-frankfurt.de"; smtp.host = "smtpauth.rz.uni-frankfurt.de";
smtp.tls.useStartTls = true;
userName = "tstraube"; userName = "tstraube";
notmuch.enable = true;
passwordCommand = "pass uni/hrz"; passwordCommand = "pass uni/hrz";
signature = { signature = {
text = '' text = ''
@ -44,206 +83,190 @@
Dept. of Human Geography Dept. of Human Geography
Goethe University Frankfurt Goethe University Frankfurt
''; '';
showSignature = "append";
}; };
mbsync = {
enable = true;
create = "maildir";
expunge = "both";
};
msmtp.enable = true;
neomutt = { neomutt = {
enable = true; extraConfig = makeConfig name + ''
sendMailCommand = lib.getExe pkgs.msmtp;
extraConfig = ''
set mbox='+Archive'
set my_junk='+Spamverdacht'
set my_mbsync_acct='gu'
set crypt_auto_smime
unset crypt_auto_pgp
set crypt_autosign
set crypt_replyencrypt
set crypt_replysign
set crypt_replysignencrypted
set crypt_verify_sig
# set smime_default_key = "f1355556.0"
set smime_sign_as = "f1355556.0"
set pgp_default_key = ""
# unset crypt_use_gpgme
unalternates *
alternates ^straube@em.uni-frankfurt.de$ \
^tstraube@em.uni-frankfurt.de$ \
^tstraube@rz.uni-frankfurt.de$ \
^tstraube@uni-frankfurt.de$
unset reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.gu.signature.text
}
color status blue default color status blue default
alternates ^tstraube@(em|rz)?.uni-frankfurt.de$
set crypt_auto_smime
''; '';
}; };
}; };
t9e = { t9e = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
address = "till.straube@t9e.me"; address = "till.straube@t9e.me";
realName = "Till Straube"; realName = "Till Straube";
imap.host = "arielle.ktiu.net"; imap.host = "arielle.ktiu.net";
smtp.host = "arielle.ktiu.net"; smtp.host = "arielle.ktiu.net";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "till.straube@t9e.me"; userName = "till.straube@t9e.me";
signature.text = '' signature.text = ''
Till Straube (he/him) Till Straube (he/him)
PGP key: https://keys.openpgp.org/search?q=till.straube@t9e.me PGP key: https://keys.openpgp.org/search?q=till.straube@t9e.me
''; '';
signature.showSignature = "append";
gpg = {
key = "5FA6782F543D12ED07110780BA1B73F10BABF8E3";
signByDefault = true;
};
neomutt = { neomutt = {
enable = true; extraConfig = makeConfig name + ''
sendMailCommand = lib.getExe pkgs.msmtp;
extraConfig = ''
set my_mbsync_acct='t9e'
set mbox='+Archive'
set my_junk='+Junk'
set crypt_auto_pgp
unset crypt_auto_smime
unalternates *
alternates @t9e.me$ @ktiu.net$
set reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.t9e.signature.text
}
color status green default color status green default
alternates @t9e.me$ @ktiu.net$ ^(tillkowski|till.straube)@gmail.com$
set reverse_name
set crypt_auto_pgp
''; '';
}; };
mbsync = { msmtp.extraConfig.port = "587";
enable = true; passwordCommand = "pass accounts/ktiu-imap";
create = "maildir";
expunge = "both";
};
msmtp = {
enable = true;
extraConfig.from = "*@(ktiu.net|t9e.me)";
};
passwordCommand = "pass mail/arielle.ktiu.net";
}; };
ktiu = { ksh = { name, ... }: lib.attrsets.recursiveUpdate (makeAccount name) {
address = "till@ktiu.net";
realName = "Till Straube";
imap.host = "shorbut.ktiu.net";
smtp.host = "shorbut.ktiu.net";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "till";
signature.text = ''
Till Straube (he/him)
PGP key: https://keys.openpgp.org/search?q=till@ktiu.net
'';
signature.showSignature = "append";
gpg = {
key = "5FA6782F543D12ED07110780BA1B73F10BABF8E3";
signByDefault = true;
};
neomutt = {
enable = true;
sendMailCommand = lib.getExe pkgs.msmtp;
extraConfig = ''
set my_mbsync_acct='ktiu'
set mbox='+Archive'
set my_junk='+Junk'
set crypt_auto_pgp
unset crypt_auto_smime
unalternates *
alternates @ktiu.net$
set reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.ktiu.signature.text
}
color status green default
'';
};
mbsync = {
enable = true;
create = "maildir";
expunge = "both";
};
msmtp = {
enable = false;
# extraConfig.from = "*@ktiu.net";
};
passwordCommand = "secret-tool lookup server shorbut.ktiu.net account till";
};
ksh = {
address = "kein_schlussstrich_hessen@systemli.org"; address = "kein_schlussstrich_hessen@systemli.org";
realName = "Kein Schlussstrich Hessen"; realName = "Kein Schlussstrich Hessen";
imap.host = "mail.systemli.org"; imap.host = "mail.systemli.org";
smtp.host = "mail.systemli.org"; smtp.host = "mail.systemli.org";
smtp.tls.useStartTls = true;
notmuch.enable = true;
userName = "kein_schlussstrich_hessen@systemli.org"; userName = "kein_schlussstrich_hessen@systemli.org";
signature.text = '' signature.text = ''
Kein Schlussstrich Hessen Kein Schlussstrich Hessen
PGP Key: https://keys.openpgp.org/search?q=kein_schlussstrich_hessen@systemli.org PGP Key: https://keys.openpgp.org/search?q=kein_schlussstrich_hessen@systemli.org
''; '';
signature.showSignature = "append";
neomutt = { neomutt = {
enable = true; extraConfig = makeConfig name + ''
# sendMailCommand = "/home/till/.nix-profile/bin/msmtp"; color status red default
sendMailCommand = lib.getExe pkgs.msmtp;
extraConfig = ''
set my_mbsync_acct='ksh'
set mbox='+Erledigt'
set my_junk='+Junk'
set postponed='+Drafts'
set record='+Sent'
set trash='+Trash'
set crypt_auto_pgp set crypt_auto_pgp
unset crypt_auto_smime
unalternates *
set reverse_name
set my_signature = ${
pkgs.writeText
"signature.txt"
config.accounts.email.accounts.ksh.signature.text
}
color status cyan default
''; '';
}; };
mbsync = { passwordCommand = "pass ksh/systemli";
enable = true;
create = "maildir";
expunge = "both";
};
msmtp = {
enable = true;
extraConfig.from = "kein_schlussstrich_hessen@systemli.org";
};
passwordCommand = "pass other/ksh_systemli";
}; };
}; };
}; };
programs.msmtp.enable = true;
programs.mbsync.enable = true;
programs.notmuch = {
enable = true;
search.excludeTags = [ "trash" "spam" ];
new.tags = [ "new" "unread" ];
hooks = {
preNew = ''
notmuch tag +draft -- 'folder:"/\/Drafts$/"'
mbsync --all
'';
postNew = ''
notmuch tag +gu -- tag:new path:gu/**
notmuch tag +t9e -- tag:new path:t9e/**
notmuch tag +ksh -- tag:new path:ksh/**
notmuch tag +inbox -- tag:new 'folder:"/\/Inbox$/"'
notmuch tag +sent -unread -- tag:new 'folder:"/\/Sent$/"'
notmuch tag +trash -unread -- tag:new 'folder:"/\/Trash$/"'
notmuch tag +draft -unread -- tag:new 'folder:"/\/Drafts$/"'
notmuch tag +spam -- tag:new 'folder:"/\/Spam$/"'
notmuch tag +spam -- tag:new 'folder:"/\/Junk$/"'
notmuch tag -new -- tag:new
'';
};
};
programs.neomutt = {
enable = true;
vimKeys = true;
changeFolderWhenSourcingAccount = true;
editor = "nvim -c 'call woof#init#Init()'";
sort = "reverse-date-received";
unmailboxes = true;
settings = {
abort_noattach = "ask-yes";
abort_noattach_regex = "\"(attach|enclosed|anbei|anhängen|angehängt|anhang|anhänge|hängt an)\"";
auto_edit = "yes";
beep = "no";
confirm_append = "no";
crypt_auto_sign = "yes";
crypt_replyencrypt = "yes";
crypt_replysign = "yes";
crypt_replysignencrypted = "yes";
crypt_verify_sig = "yes";
edit_headers = "yes";
forward_attachments = "yes";
forward_format = "\"Fwd: %s\"";
forward_quote = "yes";
help = "no";
include = "yes";
mail_check_stats = "yes";
mailcap_path = "${ mailcap_path }";
mark_old = "no";
markers = "no";
mbox_type = "Maildir";
menu_scroll = "yes";
mime_type_query_command = "\"file -b --mime-type %s\"";
nm_record = "yes";
pager_context = "3";
pager_index_lines = "5";
pager_stop = "yes";
query_command= "\"khard email --parsable '%s'\"";
recall = "no";
resume_draft_files = "yes";
reverse_real_name = "no";
shell = "/bin/sh";
sleep_time = "0";
smart_wrap = "yes";
status_chars = "٪A";
tilde = "yes";
use_envelope_from = "yes";
virtual_spool_file = "yes";
wait_key = "no";
};
binds = [
{ key = "m"; map = [ "index" "pager" ]; action = "noop"; }
{ key = "k"; map = [ "pager" ]; action = "previous-entry"; }
{ key = "j"; map = [ "pager" ]; action = "next-entry"; }
{ key = "<return>"; map = [ "index" ]; action = "display-message"; }
{ key = "<space>"; map = "index"; action = "entire-thread"; }
{ key = "gf"; map = [ "index" "pager" ]; action = "change-folder"; }
{ key = "<Tab>"; map = [ "editor" ]; action = "complete-query"; }
{ key = "P"; map = [ "compose" ]; action = "pgp-menu"; }
{ key = "p"; map = [ "compose" ]; action = "postpone-message"; }
];
macros = [
{ key = "gu"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/gu<enter>g!"; }
{ key = "gm"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/t9e<enter>g!"; }
{ key = "gk"; map = [ "index" "pager" ]; action = "<vfolder-from-query>tag:dummy<enter>:source ${config.xdg.configHome}/neomutt/ksh<enter>g!"; }
{ key = "Y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>"; }
{ key = "y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>-inbox -unread -spam -trash<enter><sync-mailbox>"; }
{ key = "J"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+spam -inbox -unread -trash<enter><sync-mailbox>"; }
{ key = "I"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+inbox -old -spam -trash<enter><sync-mailbox>"; }
{ key = "Y"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>"; }
{ key = "dd"; map = [ "index" "pager" ]; action = "<modify-labels-then-hide>+trash -inbox -unread -spam<enter><sync-mailbox>"; }
{ key = "g!"; map = [ "index" "pager" ]; action = "<change-vfolder>Inbox<enter>"; }
{ key = "g<"; map = [ "index" "pager" ]; action = "<change-vfolder>Sent<enter>"; }
{ key = "g>"; map = [ "index" "pager" ]; action = "<change-vfolder>Archive<enter>"; }
{ key = "gj"; map = [ "index" "pager" ]; action = "<change-vfolder>Spam<enter>"; }
{ key = "gd"; map = [ "index" "pager" ]; action = "<change-vfolder>Drafts<enter>"; }
{ key = "gt"; map = [ "index" "pager" ]; action = "<change-vfolder>Trash<enter>"; }
{ key = "go"; map = [ "index" "pager" ]; action = "<shell-escape>notmuch new<enter>"; }
{ key = "V"; map = ["index" "pager"]; action = "<view-attachments><search>html<enter><view-mailcap><exit>"; }
{ key = "mar"; map = [ "index" "pager" ]; action = "<tag-pattern>new<enter><tag-prefix-cond><clear-flag>n<enter><tag-prefix-cond><clear-flag>*<enter>"; }
{ key = "A"; map = [ "index" "pager" ]; action = "<pipe-message>khard add-email --vcard-version=4.0<return>"; }
{ key = "S"; map = [ "index" "pager" ]; action = "<pipe-message>ripmime -i - -d ~/tmp && rm ~/tmp/textfile*"; }
{ key = "gb"; map = [ "index" "pager" ]; action = "<pipe-message>urlscan<enter>"; }
{ key = "I"; map = [ "compose" ]; action = "<attach-file>`tmpfile=$(mktemp -u --suffix .png -t XXXXXXXXXXXX -p ~/tmp) && wl-paste -t image/png > \"$tmpfile\" && echo \"$tmpfile\"`<enter>"; }
{ key = "p"; map = [ "compose" ]; action = "<postpone-message>"; }
{ key = "c"; map = [ "index" "pager" ]; action = "<enter-command>set signature=$my_signature<enter><mail>"; }
{ key = "r"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><reply>"; }
{ key = "a"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><group-reply>"; }
{ key = "f"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><forward-message>"; }
{ key = "l"; map = [ "index" "pager" ]; action = "<enter-command>unset signature<enter><list-reply>"; }
];
extraConfig = builtins.readFile ./config.neomuttrc;
};
xdg.configFile."neomutt/bindings.neomuttrc".source = ./bindings.neomuttrc;
programs.neovim.plugins = with pkgs.vimPlugins; [ programs.neovim.plugins = with pkgs.vimPlugins; [
{ {
plugin = vim-pathogen; plugin = vim-pathogen;

View file

@ -1,11 +0,0 @@
application/pdf; zathura %s
multipart; xdg-open %s
text/html; firefox %s; description=HTML Text; nametemplate=%s.html; needsterminal
text/html; w3m -v -F -T text/html -dump %s; copiousoutput
text; neomutt %s
application; xdg-open %s
image; xdg-open %s
video; xdg-open %s
audio; xdg-open %s
message; xdg-open %s
model; xdg-open %s

View file

@ -1,24 +0,0 @@
# Locations
# set smime_ca_location="~/.keys/neomutt/smime/ca"
# set smime_certificates="~/.keys/neomutt/smime/public"
# set smime_keys="~/.keys/neomutt/smime/private"
# Commands (smime_keys)
set smime_pk7out_command="openssl smime -verify -in %f -noverify -pk7out"
set smime_get_cert_command="openssl pkcs7 -print_certs -in %f"
set smime_get_signer_cert_command="openssl smime -verify -in %f -noverify -signer %c -out /dev/null"
set smime_get_cert_email_command="openssl x509 -in %f -noout -email"
set smime_import_cert_command="smime_keys add_cert %f"
# Outgoing
set smime_encrypt_with="aes256"
set smime_encrypt_command="openssl smime -encrypt -%a -outform DER -in %f %c"
set smime_sign_digest_alg="sha256"
set smime_sign_command="openssl smime -sign -md %d -signer %c -inkey %k -passin stdin -in %f -certfile %i -outform DER"
# Incoming
set smime_decrypt_command="openssl smime -decrypt -passin stdin -inform DER -in %f -inkey %k -recip %c"
set smime_verify_command="openssl smime -verify -inform DER -in %s %C -content %f"
set smime_verify_opaque_command="\
openssl smime -verify -inform DER -in %s %C || \
openssl smime -verify -inform DER -in %s -noverify 2>/dev/null"

View file

@ -1,4 +1,4 @@
{ config, pkgs, inputs, lib, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@ -11,6 +11,4 @@
yt-dlp yt-dlp
zathura zathura
]; ];
xdg.configFile."castget/castget.conf".source = ./castget/castget.conf;
} }

View file

@ -23,6 +23,9 @@ set splitright
set tabstop=2 set tabstop=2
set updatetime=300 set updatetime=300
set foldmethod=expr
set foldexpr=nvim_treesitter#foldexpr()
let g:netrw_liststyle = 3 let g:netrw_liststyle = 3
let g:netrw_fastbrowse = 0 let g:netrw_fastbrowse = 0
@ -47,9 +50,13 @@ onoremap <silent> al :normal val<return>
xnoremap i% GoggV xnoremap i% GoggV
onoremap <silent> i% :normal vi%<return> onoremap <silent> i% :normal vi%<return>
" highlight Normal guibg=NONE
function CreateNote(title) function CreateNote(title)
execute "file ~/notes/" . strftime("%Y-%m-%d") . "_" . join(split(tolower(a:title)), "_") . ".md" execute "VimwikiIndex"
execute "set ft=markdown" execute "VimwikiGoto " . a:title
execute "normal! i" . a:title endfunction
execute "normal V\<tab>yaml_note\<tab>"
function Diary()
execute "VimwikiMakeDiaryNote"
endfunction endfunction

View file

@ -1,4 +1,4 @@
{ pkgs, ... }: { pkgs, lib, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
@ -6,6 +6,7 @@
marksman marksman
nil nil
typescript-language-server typescript-language-server
vim-language-server
]; ];
programs.neovim = { programs.neovim = {
@ -30,8 +31,9 @@
{ {
plugin = fugitive; plugin = fugitive;
type = "lua";
config = '' config = ''
nnoremap <Leader>g :Git vim.api.nvim_set_keymap("n", "<Leader>g", ":Git<CR>", { noremap = true, silent = true })
''; '';
} }
@ -43,9 +45,9 @@
vim.api.nvim_set_keymap('i', '<c-x><c-k>', '<Plug>(fzf-complete-word)', { silent = true }) vim.api.nvim_set_keymap('i', '<c-x><c-k>', '<Plug>(fzf-complete-word)', { silent = true })
vim.api.nvim_set_keymap('i', '<c-x><c-l>', '<Plug>(fzf-complete-line)', { silent = true }) vim.api.nvim_set_keymap('i', '<c-x><c-l>', '<Plug>(fzf-complete-line)', { silent = true })
vim.api.nvim_set_keymap('n', '<leader><tab>', '<Plug>(fzf-maps-n)', { silent = true }) vim.api.nvim_set_keymap('n', '<localleader><tab>', '<Plug>(fzf-maps-n)', { silent = true })
vim.api.nvim_set_keymap('x', '<leader><tab>', '<Plug>(fzf-maps-x)', { silent = true }) vim.api.nvim_set_keymap('x', '<localleader><tab>', '<Plug>(fzf-maps-x)', { silent = true })
vim.api.nvim_set_keymap('o', '<leader><tab>', '<Plug>(fzf-maps-o)', { silent = true }) vim.api.nvim_set_keymap('o', '<localleader><tab>', '<Plug>(fzf-maps-o)', { silent = true })
vim.api.nvim_set_keymap('n', '<leader>b', ':Buffers<return>', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '<leader>b', ':Buffers<return>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>o', ':Files<return>', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '<leader>o', ':Files<return>', { noremap = true, silent = true })
@ -71,7 +73,7 @@
nnoremap <silent> [og :Goyo 80<return> nnoremap <silent> [og :Goyo 80<return>
nnoremap <silent> ]og :Goyo!<return> nnoremap <silent> ]og :Goyo!<return>
''; '';
} }
{ {
plugin = limelight-vim; plugin = limelight-vim;
config = '' config = ''
@ -107,11 +109,30 @@
vim.lsp.enable('r_language_server') vim.lsp.enable('r_language_server')
vim.lsp.enable('texlab') vim.lsp.enable('texlab')
vim.lsp.enable('ts_ls') vim.lsp.enable('ts_ls')
vim.lsp.enable('vimls')
vim.api.nvim_del_keymap('i', '<c-s>') vim.api.nvim_del_keymap('i', '<c-s>')
''; '';
} }
{
plugin = (nvim-treesitter.withPlugins (p: [ p.nix p.lua p.r p.typescript ]));
type = "lua";
config = ''
vim.api.nvim_create_autocmd('FileType', {
pattern = { 'nix', 'markdown', 'lua', 'r' },
callback = function()
-- Enable Tree-sitter-based folding
vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
vim.o.foldmethod = 'expr'
-- Optional: configure fold behavior
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
end,
})
'';
}
{ {
plugin = papercolor-theme; plugin = papercolor-theme;
config = '' config = ''
@ -149,16 +170,20 @@
''; '';
} }
vim-fish {
plugin = vim-fish;
}
vim-nix vim-nix
{ {
plugin = vim-pandoc; plugin = vim-pandoc;
config = '' config = ''
let g:pandoc#modules#disabled = ["completion", "command", "menu", "completion"] let g:pandoc#modules#disabled = ["completion", "command", "menu"]
''; '';
} }
vim-pandoc-syntax
vim-repeat vim-repeat
{ {

View file

@ -8,18 +8,15 @@ cmp.setup({
end, end,
}, },
window = { mapping = cmp.mapping.preset.insert(
-- completion = cmp.config.window.bordered(), {
-- documentation = cmp.config.window.bordered(), ['<C-b>'] = cmp.mapping.scroll_docs(-4),
}, ['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
mapping = cmp.mapping.preset.insert({ ['<C-e>'] = cmp.mapping.abort(),
['<C-b>'] = cmp.mapping.scroll_docs(-4), ['<Tab>'] = cmp.mapping.confirm({ select = false }),
['<C-f>'] = cmp.mapping.scroll_docs(4), }
['<C-Space>'] = cmp.mapping.complete(), ),
['<C-e>'] = cmp.mapping.abort(),
['<Tab>'] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({ sources = cmp.config.sources({
{ name = 'cmp_pandoc' }, { name = 'cmp_pandoc' },
@ -34,17 +31,6 @@ cmp.setup({
}) })
-- To use git you need to install the plugin petertriho/cmp-git and uncomment lines below
-- Set configuration for specific filetype.
--[[ cmp.setup.filetype('gitcommit', {
sources = cmp.config.sources({
{ name = 'git' },
}, {
{ name = 'buffer' },
})
})
require("cmp_git").setup() ]]--
-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline({ '/', '?' }, { cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(), mapping = cmp.mapping.preset.cmdline(),
@ -66,8 +52,3 @@ cmp.setup.cmdline(':', {
-- Set up lspconfig. -- Set up lspconfig.
local capabilities = require('cmp_nvim_lsp').default_capabilities() local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
-- vim.lsp.config('<YOUR_LSP_SERVER>', {
-- capabilities = capabilities
-- })
-- vim.lsp.enable('<YOUR_LSP_SERVER>')

View file

@ -9,7 +9,6 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
bat bat
castget
ghostscript ghostscript
hunspell hunspell
hunspellDicts.de_DE hunspellDicts.de_DE

View file

@ -1,8 +1,6 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
services.gnome-keyring.enable = false;
programs.password-store = { programs.password-store = {
enable = true; enable = true;
settings = { settings = {
@ -14,14 +12,12 @@
pkgs.passff-host pkgs.passff-host
]; ];
services.gnome-keyring.enable = false;
services.pass-secret-service = { services.pass-secret-service = {
enable = true; enable = true;
}; };
home.packages = with pkgs; [
pinentry-all
];
xdg.configFile."scdaemon" = { xdg.configFile."scdaemon" = {
text = '' text = ''
disable-ccid disable-ccid
@ -29,4 +25,5 @@
''; '';
target = "../.gnupg/scdaemon.conf"; target = "../.gnupg/scdaemon.conf";
}; };
} }

5
home/plasma.nix Normal file
View file

@ -0,0 +1,5 @@
{ ... }:
{
services.kdeconnect.enable = true;
}

View file

@ -0,0 +1,15 @@
{ ... }:
{
imports = [
./desktop-slim.nix
../messaging.nix
../r.nix
../tex.nix
../mail
../office-gui.nix
../office-cli.nix
../aichat.nix
];
}

View file

@ -1,16 +1,17 @@
{ config, pkgs, inputs, lib, ... }: { pkgs, ... }:
{ {
imports = [ imports = [
./minimal.nix ./minimal.nix
./devel.nix ../devel.nix
./firefox.nix ../firefox.nix
./fonts.nix ../fonts.nix
./foot.nix # ../foot.nix
./gnome ../media.nix
./media.nix ../user-dirs.nix
./user-dirs.nix ../gpg.nix
../password-store.nix
]; ];
home.packages = with pkgs; [ home.packages = with pkgs; [
@ -25,8 +26,5 @@
zathura zathura
]; ];
xdg.configFile."castget/castget.conf".source = ./castget/castget.conf;
services.syncthing.enable = true; services.syncthing.enable = true;
} }

View file

@ -1,4 +1,4 @@
{ config, pkgs, inputs, lib, ... }: { config, pkgs, ... }:
{ {
programs.home-manager.enable = true; programs.home-manager.enable = true;
@ -10,22 +10,21 @@
fastfetch fastfetch
fzf fzf
jq jq
nh
nix-search nix-search
progress progress
rename rename
silver-searcher silver-searcher
tldr tldr
tmux tmux
yq
]; ];
imports = [ imports = [
./fish.nix ../fish.nix
./tmux ../vifm.nix
./password-store.nix ../nvim
./vifm ../tmux.nix
./nvim
./gpg.nix
./ssh.nix
]; ];
programs.nix-index = { programs.nix-index = {

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }: { pkgs, ... }:
{ {
programs.tmux = { programs.tmux = {
@ -22,13 +22,19 @@
bind j select-pane -D bind j select-pane -D
bind k select-pane -U bind k select-pane -U
bind l select-pane -R bind l select-pane -R
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
bind c command-prompt -I "#{b:pane_current_path}" "rename-window '%%'" bind c command-prompt -I "#{b:pane_current_path}" "rename-window '%%'"
bind C-c command-prompt -I "#{b:pane_current_path}" "rename-window '%%'" bind C-c command-prompt -I "#{b:pane_current_path}" "rename-window '%%'"
# Layouts # Layouts
bind f source-file ~/.config/tmux/vifm.conf bind f new-window -c '#{pane_current_path}' vifm
bind R source-file ~/.config/tmux/rloft.conf bind R source ${ pkgs.writeText "tmux-rloft" ''
bind J source-file ~/.config/tmux/jekyll.conf split-window -c '#{pane_current_path}' -h R -q --no-save --no-restore;
select-pane -l
''}
# Unbind # Unbind
unbind p unbind p
@ -36,7 +42,6 @@
unbind % unbind %
# Eye candy # Eye candy
# set-option -g status-position top
set-option -g status-right "" set-option -g status-right ""
set-option -g status-left "" set-option -g status-left ""
set-option -g status-justify "centre" set-option -g status-justify "centre"
@ -47,9 +52,10 @@
# Some more specifics # Some more specifics
set-option -g focus-events on set-option -g focus-events on
set -g base-index 1
setw -g pane-base-index 1
set -g default-terminal "tmux-256color"
set -as terminal-features ",xterm-256color:RGB"
''; '';
}; };
xdg.configFile."tmux/vifm.conf".source = ./vifm.conf;
xdg.configFile."tmux/rloft.conf".source = ./rloft.conf;
xdg.configFile."tmux/jekyll.conf".source = ./jekyll.conf;
} }

View file

@ -1,6 +0,0 @@
split-window -c '#{pane_current_path}' -h nix-shell
send-keys "jekyll serve" Enter
resize-pane -x 40%
split-pane -c '#{pane_current_path}' "git status; fish"
select-pane -L
rename-window "jekyll"

View file

@ -1,2 +0,0 @@
split-window -c '#{pane_current_path}' -h R -q --no-save --no-restore
select-pane -l

View file

@ -1 +0,0 @@
new-window -c '#{pane_current_path}' vifm

30
home/vifm.nix Normal file
View file

@ -0,0 +1,30 @@
{ config, pkgs, ... }:
{
programs.vifm = {
enable = true;
extraConfig = "
colorscheme light
set vicmd=nvim
filetype * xdg-open
";
};
xdg.configFile."vifm/colors/light.vifm".text = ''
highlight clear
highlight Win cterm=none ctermfg=black ctermbg=default
highlight Directory cterm=none ctermfg=cyan ctermbg=default
highlight Link cterm=none ctermfg=yellow ctermbg=default
highlight BrokenLink cterm=none ctermfg=white ctermbg=red
highlight Socket cterm=none ctermfg=red ctermbg=default
highlight Device cterm=none ctermfg=red ctermbg=default
highlight Fifo cterm=none ctermfg=black ctermbg=cyan
highlight Executable cterm=none ctermfg=green ctermbg=default
highlight Selected cterm=bold ctermfg=magenta ctermbg=default
highlight CurrLine cterm=bold ctermfg=white ctermbg=magenta
highlight TopLine cterm=bold ctermfg=magenta ctermbg=default
highlight TopLineSel cterm=bold ctermfg=magenta ctermbg=white
highlight StatusLine cterm=bold ctermfg=magenta ctermbg=white
highlight CmdLine cterm=bold ctermfg=magenta ctermbg=default
highlight Border cterm=none ctermfg=default ctermbg=default
'';
}

View file

@ -1,13 +0,0 @@
{ config, pkgs, ... }:
{
programs.vifm = {
enable = true;
extraConfig = "
colorscheme light
set vicmd=nvim
filetype * xdg-open
";
};
xdg.configFile."vifm/colors/light.vifm".source = ./light.vifm;
}

View file

@ -1,20 +0,0 @@
highlight clear
highlight Win cterm=none ctermfg=black ctermbg=default
highlight Directory cterm=none ctermfg=cyan ctermbg=default
highlight Link cterm=none ctermfg=yellow ctermbg=default
highlight BrokenLink cterm=none ctermfg=white ctermbg=red
highlight Socket cterm=none ctermfg=red ctermbg=default
highlight Device cterm=none ctermfg=red ctermbg=default
highlight Fifo cterm=none ctermfg=black ctermbg=cyan
highlight Executable cterm=none ctermfg=green ctermbg=default
highlight Selected cterm=bold ctermfg=magenta ctermbg=default
highlight CurrLine cterm=bold ctermfg=white ctermbg=magenta
highlight TopLine cterm=bold ctermfg=magenta ctermbg=default
highlight TopLineSel cterm=bold ctermfg=magenta ctermbg=white
highlight StatusLine cterm=bold ctermfg=magenta ctermbg=white
"highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black
highlight CmdLine cterm=bold ctermfg=magenta ctermbg=default
"highlight ErrorMsg cterm=none ctermfg=red ctermbg=black
highlight Border cterm=none ctermfg=default ctermbg=default
"highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white

View file

@ -5,7 +5,7 @@
networking.domain = "ktiu.net"; networking.domain = "ktiu.net";
imports = [ imports = [
./hardware ./hardware-configuration.nix
../system ../system
../system/web-server ../system/web-server
../system/mail-server ../system/mail-server

View file

@ -9,9 +9,9 @@
../../users/guest/system.nix ../../users/guest/system.nix
../../system ../../system
../../system/desktop ../../system/desktop
../../system/desktop/gnome.nix
# ../../system/desktop/cast.nix
../../system/desktop/ergodox-udev.nix ../../system/desktop/ergodox-udev.nix
# ../../system/desktop/gnome.nix
../../system/desktop/cosmic.nix
../../system/desktop/steam.nix ../../system/desktop/steam.nix
../../system/desktop/yubikey-pam.nix ../../system/desktop/yubikey-pam.nix
]; ];

14
system/desktop/cosmic.nix Normal file
View file

@ -0,0 +1,14 @@
{ lib, ... }:
{
services.desktopManager.cosmic.enable = true;
services.displayManager.cosmic-greeter.enable = true;
services.system76-scheduler.enable = true;
services.gnome.gnome-keyring.enable = lib.mkForce false;
programs.firefox.preferences = {
"widget.gtk.libadwaita-colors.enabled" = false;
};
}

View file

@ -51,4 +51,9 @@
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
programs.dconf.enable = true; programs.dconf.enable = true;
programs.gnupg.agent = {
enable = true;
pinentryPackage = pkgs.pinentry-all;
# pinentry.program = "pinentry";
};
} }

View file

@ -4,10 +4,10 @@
{ {
services.desktopManager.gnome.enable = true; services.desktopManager.gnome.enable = true;
services.displayManager = { # services.displayManager = {
gdm.enable = true; # gdm.enable = true;
defaultSession = "gnome"; # defaultSession = "gnome";
}; # };
environment.gnome.excludePackages = with pkgs; [ environment.gnome.excludePackages = with pkgs; [
gnome-tour gnome-tour

View file

@ -0,0 +1,29 @@
{ pkgs, ... }:
{
programs.hyprland = {
enable = true;
withUWSM = true;
# xwayland.enable = true;
};
# programs.regreet = {
# enable = true;
# # For this example you'd need to have a version of Adwaita and the font Cantarell installed
# theme.name = "Adwaita";
# font = {
# name = "Cantarell";
# size = 16;
# };
# cursorTheme.name = "Adwaita";
# };
environment.systemPackages = with pkgs; [
ashell
kitty
mako
tofi
];
}

18
system/desktop/plasma.nix Normal file
View file

@ -0,0 +1,18 @@
{ ... }:
{
services.desktopManager.plasma6.enable = true;
programs.kdeconnect.enable = true;
networking.firewall = rec {
allowedTCPPortRanges = [ { from = 1714; to = 1764; } ];
allowedUDPPortRanges = allowedTCPPortRanges;
};
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
settings.General.DisplayServer = "wayland";
};
}

View file

@ -4,8 +4,9 @@
services.pcscd.enable = true; services.pcscd.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
yubikey-personalization
keymapp keymapp
yubikey-personalization
yubikey-manager
]; ];
services.udev = { services.udev = {

View file

@ -1,9 +1,15 @@
{ config, pkgs, ... }: { config, ... }:
let
webmailHostName = "webmail.${config.networking.domain}";
in
{ {
services.roundcube = { services.roundcube = {
enable = true; enable = true;
hostName = "webmail.ktiu.net"; hostName = webmailHostName;
extraConfig = '' extraConfig = ''
$config['smtp_host'] = 'tls://%h'; $config['smtp_host'] = 'tls://%h';
$config['smtp_conn_options'] = [ $config['smtp_conn_options'] = [
@ -14,4 +20,17 @@
]; ];
''; '';
}; };
# not sure why this is currently working w/o the following
#
# services.nginx.virtualHosts."${webmailHostName}" = {
# onlySSL = true;
# forceSSL = lib.mkForce false;
# enableACME = lib.mkForce false;
# useACMEHost = config.networking.domain;
# };
# security.acme.certs."${config.networking.domain}".extraDomainNames = [
# webmailHostName
# ];
} }

View file

@ -19,7 +19,7 @@ in {
{ {
id = "outline"; id = "outline";
name = "Outline Client"; name = "Outline Client";
redirectURIs = [ "https://${outline.hostname}/auth/oidc.callback" ]; redirectURIs = [ "https://${config.services.outline.hostname}/auth/oidc.callback" ];
secretFile = "/var/custom-access/outline-oidc-secret.txt"; secretFile = "/var/custom-access/outline-oidc-secret.txt";
} }
]; ];

View file

@ -5,7 +5,7 @@
acceptTerms = true; acceptTerms = true;
defaults.email = "till@ktiu.net"; defaults.email = "till@ktiu.net";
certs."${config.networking.domain}" = { certs."${config.networking.domain}" = {
domain = config.networking.domain; # domain = config.networking.domain;
webroot = "/var/lib/acme/.challenges"; webroot = "/var/lib/acme/.challenges";
group = config.services.nginx.group; group = config.services.nginx.group;
extraDomainNames = [ config.networking.fqdn ]; extraDomainNames = [ config.networking.fqdn ];

View file

@ -7,7 +7,7 @@
extraGroups = [ "networkmanager" ]; extraGroups = [ "networkmanager" ];
shell = pkgs.fish; shell = pkgs.fish;
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [
../till/ssh/till${"@"}nova.pub ../till/pubkeys/till${"@"}nova.pub
]; ];
}; };
} }

View file

@ -6,4 +6,9 @@
name = "Till"; name = "Till";
email = "till@ktiu.net"; email = "till@ktiu.net";
}; };
imports = [
./ssh.nix
];
} }

View file

@ -41,7 +41,11 @@ in
identityFile = certs.uni; identityFile = certs.uni;
}; };
"arielle arielle.ktiu.net" = { "git.ktiu.net" = {
identityFile = certs.personal;
};
"arielle (arielle|git).ktiu.net" = {
hostname = "arielle.ktiu.net"; hostname = "arielle.ktiu.net";
user = "till"; user = "till";
identityFile = certs.personal; identityFile = certs.personal;
@ -65,11 +69,11 @@ in
identityFile = certs.personal; identityFile = certs.personal;
}; };
# "mila" = { "mila" = {
# hostname = "mila"; hostname = "mila";
# user = "till"; user = "tstraube";
# identityFile = certs.personal; identityFile = certs.uni;
# }; };
}; };
}; };

View file

@ -10,7 +10,7 @@
]; ];
shell = pkgs.fish; shell = pkgs.fish;
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [
./ssh/till${"@"}nova.pub ./pubkeys/till${"@"}nova.pub
]; ];
}; };
} }