Compare commits

...

18 commits

Author SHA1 Message Date
8444c21eb3
postgres: backup database daily 2025-03-28 23:03:16 +01:00
e2d0b5461b
borg: update backup settings 2025-03-28 22:32:14 +01:00
f22c0776b5
install forgejo 2025-03-27 22:06:56 +01:00
51651c6f1d
install nginx as reverse-proxy 2025-03-27 21:48:10 +01:00
5c3d8fa773 install jellyfin 2025-03-27 20:15:00 +01:00
450974b97c
virtualisation: enable spice usb redirection 2025-03-22 11:28:28 +01:00
7da795c53f
minecraft: setup minecraft server 2025-03-22 11:25:44 +01:00
be8f7e6299
install some frequently used programs 2025-03-22 11:23:17 +01:00
a46a68a8b0
fix build issue 2025-03-22 11:23:17 +01:00
f9821001ab
installing the ScanSnap S1500 2025-03-13 15:27:10 +01:00
a0531b75ac
notmuch: use batchfile instead of afew for most filters 2025-03-11 20:24:17 +01:00
cc3657e753
email: add kh.col account 2025-03-08 15:31:51 +01:00
4d77f320a6
email setup using emacs and notmuch 2025-03-08 10:45:38 +01:00
15c81b97d5
WIP: xmonad config update 2025-02-27 15:15:36 +01:00
029db9ae08
xmobar: show volume 2025-02-23 15:50:19 +01:00
fb848d40d7
feat(jujusu): sign commits + add some fix tools 2025-02-23 15:50:13 +01:00
786a8cb186
feat(wm): install xmonad 2025-02-10 23:24:13 +01:00
3c6a5f3ee2 feat(doom): enable haskell module to simplify xmonad configuration 2025-02-09 14:35:55 +01:00
11 changed files with 1155 additions and 76 deletions

364
afew.config Normal file
View file

@ -0,0 +1,364 @@
[SpamFilter]
[KillThreadsFilter]
[HeaderMatchingFilter.1]
header = List-Id
pattern = main.agoranomic.groups.io
tags = +lists;+lists/agora-main-backup
[HeaderMatchingFilter.2]
header = From
pattern = .*@noreply-pole-emploi.fr
tags = +lists;+lists/france-travail
[HeaderMatchingFilter.3]
header = From
pattern = .*@stopkillinggames.com
tags = +lists;+lists/stop-killing-games
[HeaderMatchingFilter.4]
header = From
pattern = newsletter@factorio.com
tags = +lists;+lists/factorio
[HeaderMatchingFilter.5]
header = From
pattern = .*change.org
tags = +lists;+lists/change.org
[HeaderMatchingFilter.6]
header = From
pattern = .*ea.com
tags = +lists;+lists/ea.com
[HeaderMatchingFilter.7]
header = From
pattern = .*@roleplayingtips.com
tags = +lists;+lists/role-playing-tips
[HeaderMatchingFilter.8]
header = From
pattern = .*@noreply.openstreetmap.org
tags = +lists;+lists/openstreetmap
[HeaderMatchingFilter.9]
header = From
pattern = no-reply@(?P<section>.*).google.com
tags = +lists;+lists/google/{section}
[HeaderMatchingFilter.10]
header = From
pattern = .*@welcometothejungle.com
tags = +lists;+lists/welcometothejungle
[HeaderMatchingFilter.11]
header = From
pattern = .*@.*edenred.fr
tags = +lists;+lists/edenred
[HeaderMatchingFilter.12]
header = From
pattern = .*@cnam-auvergnerhonealpes.com
tags = +lists;+lists/cnam;+lists/cnam/auvergnerhonealpes
[HeaderMatchingFilter.13]
header = From
pattern = .*@.*.sncf.com
tags = +lists;+lists/sncf
[HeaderMatchingFilter.14]
header = From
pattern = newsletters@trainzportal.com
tags = +lists;+lists/trainz
[HeaderMatchingFilter.15]
header = From
pattern = .*@.*.xbox.com
tags = +lists;+lists/xbox
[HeaderMatchingFilter.16]
header = From
pattern = jlfwong
tags = +lists;+lists/jlfwong
[HeaderMatchingFilter.17]
header = From
pattern = noreply@webforce.life
tags = +lists;+lists/webforce3;+project/webforce3
[HeaderMatchingFilter.18]
header = From
pattern = infoemploi@wf3.fr
tags = +lists;+lists/webforce3;+project/webforce3
[HeaderMatchingFilter.19]
header = From
pattern = informatique@bm-grenoble.fr
tags = +lists;+lists/bibliotheques;+lists/bibliotheques/grenoble
[HeaderMatchingFilter.20]
header = List-Id
pattern = public.listes.alolise.org
tags = +lists;+lists/alolise
[HeaderMatchingFilter.21]
header = From
pattern = mail@typst.app
tags = +lists;+lists/typst
[HeaderMatchingFilter.22]
header = From
pattern = noreply@discourse.doomemacs.org
tags = +lists;+lists/discourse;+lists/discours/doomemacs;+lists/doomemacs
[HeaderMatchingFilter.23]
header = From
pattern = comic@mailing.xkcd.com
tags = +lists;+lists/comic;+lists/comic/xkcd
[HeaderMatchingFilter.24]
header = From
pattern = info@info.alternatives-economiques.fr
tags = +lists;+lists/alternatives-economiques
[HeaderMatchingFilter.25]
header = From
pattern = Email@CGPGrey.com
tags = +lists;+lists/cgp-grey
[HeaderMatchingFilter.26]
header = From
pattern = roguelikecelebration@gmail.com
tags = +lists;+lists/roguelikecelebration
[HeaderMatchingFilter.27]
header = From
pattern = googlealerts-noreply@google.com
tags = +lists;+lists/google/alerts
[HeaderMatchingFilter.28]
header = List-Id
pattern = pmpc.community-emails.fsfe.org
tags = +lists;+lists/fsfe
[HeaderMatchingFilter.29]
header = List-ID
pattern = logins.wakatime.com
tags = +lists;+lists/wakatime
[HeaderMatchingFilter.30]
header = List-ID
pattern = end.of.year.report.wakatime.com
tags = +lists;+lists/wakatime
[HeaderMatchingFilter.31]
header = List-Id
pattern = updates.wakatime.com
tags = +lists;+lists/wakatime
[HeaderMatchingFilter.32]
header = From
pattern = do-no-reply@thangs.com
tags = +lists;+lists/thangs
[HeaderMatchingFilter.33]
header = From
pattern = tinyprojectsdev@gmail.com
tags = +lists;+lists/tinyprojectsdev
[HeaderMatchingFilter.34]
header = Subject
pattern = yearly.*report
tags = +report/yearly
[HeaderMatchingFilter.35]
header = From
pattern = notifications@artstation.com
tags = +lists;+lists/artstation
[HeaderMatchingFilter.36]
header = List-Id
pattern = troll.breizh-entropy.org
tags = +lists;+lists/breizh-entropy;+lists/breizh-entropy/troll
[HeaderMatchingFilter.37]
header = From
pattern = robert@stuffwithstuff.com
tags = +lists;+lists/stuffwithstuff
[HeaderMatchingFilter.38]
header = From
pattern = email@engage.windows.com
tags = +lists;+lists/microsoft
[HeaderMatchingFilter.39]
header = From
pattern = support@worldbrain.io
tags = +lists;+lists/worldbrain;+lists/memex
[HeaderMatchingFilter.40]
header = From
pattern = .*@.*mozilla.org
tags = +lists;+lists/mozilla
[HeaderMatchingFilter.41]
header = From
pattern = googleaccount-noreply@google.com
tags = +lists;+lists/google/accounts
[HeaderMatchingFilter.42]
header = From
pattern = .*@augobelinfarci.com
tags = +lists;+lists/gobelin-farci
[HeaderMatchingFilter.43]
header = From
pattern = .*@pragmaticengineer.com
tags = +lists;+lists/pragmatic-engineer
[HeaderMatchingFilter.44]
header = From
pattern = no-reply@youtube.com
tags = +lists;+lists/google/youtube
[HeaderMatchingFilter.45]
header = From
pattern = .*@.*.cned.fr
tags = +lists;+lists/cned
[HeaderMatchingFilter.46]
header = From
pattern = robert@lord.io
tags = +lists;+lists/lord
[HeaderMatchingFilter.47]
header = From
pattern = crowdsource-noreply@google.com
tags = +lists;+lists/google/crowdsource
[HeaderMatchingFilter.48]
header = From
pattern = .*@actux.eu.org
tags = +lists;+lists/actux
[HeaderMatchingFilter.49]
header = List-Id
pattern = annonces.breizh-entropy.org
tags = +lists;+lists/breizh-entropy;+lists/breizh-entropy/annonces
[ListMailsFilter]
[ArchiveSentMailsFilter]
[Filter.0]
message = Confirmation Codes
query = subject:"confirmation code"
tags = +confirmation-code
[Filter.1]
message = Agora mail does not belong in the inbox
query = tag:(lists/agora-business lists/agora-official lists/agora-discussion)
tags = -new
[Filter.2]
message = Someone signed in to your account
query = body:"Quelqu'un s'est connecté à votre compte"
tags = +notification;+notification/signin
[Filter.3]
message = Roguelike Celebration
query = from:"Roguelike Celebration"
tags = +lists;+lists/roguelikecelebration
[Filter.4]
message = Doctolib
query = from:no-reply@doctolib.fr
tags = +lists;+lists/doctolib;+medical
[Filter.5]
message = Appointment Confirmed
query = subject:"RDV confirme"
tags = +appointment;+notification/appointment;+notification
[Filter.6]
message = Linkedin
query = from:.*@linkedin.com
tags = +lists;+lists/linkedin;+subject:jobsearch
[Filter.7]
message = Linkedin Invitation
query = from:invitations@linkedin.com
tags = +notification/linkedin/connection-request;+notification
[Filter.8]
message = Bandcamp
query = from:noreply@bandcamp.com AND subject:"New release from"
tags = +notification/bandcamp/new-release;+notification;+lists;+lists/bandcamp
[Filter.9]
message = BorgBase
query = from:support@borgbase.com
tags = +lists;+lists/borgbase
[Filter.10]
message = BorgBase Monthly Report
query = from:support@borgbase.com AND subject:"Your monthly backup report"
tags = +report/borgbase/monthly
[Filter.11]
message = Derin Edala
query = to:khais.colin+ttou@gmail.com
tags = +lists;+lists/derin-edala
[Filter.12]
message = Charlie MacNamera
query = body:https://derinstories.com/2024/05/26/1-fuck-photography/ AND to:khais.colin+ttou@gmail.com AND tag:lists/derin-edala
tags = +stories;+stories/charlie-macnamera
[Filter.13]
message = Amazon
query = from:.*@amazon.fr
tags = +lists;+lists/amazon
[Filter.14]
message = Amazon Confirmation commande
tags = +notification;+notification/amazon;+notification/amazon/command-confirmation
query = from:confirmation-commande@amazon.fr
[Filter.15]
message = New documents
tags = +task;+task/archive-document
query = subject:"Nouveaux documents partagés" subject:"Un document a été ajouté dans votre espace"
[Filter.16]
message = From me
tags = +me
query = from:khais.colin@gmail.com from:kh.col@orange.fr from:logistic-bot@protonmail.com from:khais.colin@alolise.org
[Filter.17]
message = 42 Le Havre
tags = +lists;+lists/42lehavre
query = from:no-reply@42lehavre.fr from:login@42lehavre.fr
[Filter.18]
message = 42 event registration
tags = +notification;+notification/42lehavre;+notification/42lehavre/event/registration
query = from:no-reply@42lehavre.fr AND subject:"/^Inscription to.*/"
[Filter.19]
message = 42 intra login
tags = +notification;+notification/42lehavre;+notification/42lehavre/intra/login
query = from:login@42lehavre.fr AND subject:"/^\[INTRA\]\[Sign In\] You signed in from.*/"
[Filter.1000]
message = new tasks are todo
query = tag:task AND tag:new
tags = +todo
[Filter.2000]
message = TEMP: Currently not reading derin edala stories
query = tag:lists/derin-edala
tags = -new
[InboxFilter]

View file

@ -43,6 +43,9 @@
# You can disable this if you're only using the Wayland session. # You can disable this if you're only using the Wayland session.
services.xserver.enable = true; services.xserver.enable = true;
# emable xmonad
services.xserver.windowManager.xmonad.enable = true;
# Enable the KDE Plasma Desktop Environment. # Enable the KDE Plasma Desktop Environment.
services.displayManager.sddm.enable = true; services.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true; services.desktopManager.plasma6.enable = true;
@ -91,7 +94,7 @@
initialPassword = "asunarovow"; initialPassword = "asunarovow";
isNormalUser = true; isNormalUser = true;
description = "Khaïs COLIN"; description = "Khaïs COLIN";
extraGroups = ["networkmanager" "wheel" "podman" "libvirtd" "music" "cdrom"]; extraGroups = ["networkmanager" "wheel" "podman" "libvirtd" "music" "cdrom" "scanner" "lp"];
shell = pkgs.fish; shell = pkgs.fish;
}; };
# access to /pile/Music # access to /pile/Music
@ -263,6 +266,7 @@
# enable hardware acceleration for qemu # enable hardware acceleration for qemu
virtualisation.libvirtd.enable = true; virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
virtualisation.spiceUSBRedirection.enable = true;
services.syncthing = { services.syncthing = {
enable = true; enable = true;
@ -325,5 +329,10 @@
serviceConfig.ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; serviceConfig.ExecStart = "${pkgs.bluez}/bin/mpris-proxy";
}; };
# scanner
# https://nixos.wiki/wiki/Scanners
hardware.sane.enable = true;
hardware.sane.drivers.scanSnap.enable = true;
home-manager.backupFileExtension = "backup"; home-manager.backupFileExtension = "backup";
} }

View file

@ -136,7 +136,7 @@
;;gdscript ; the language you waited for ;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect ;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST ;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am (haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python ;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on ;;idris ; a language you can depend on
;;json ; At least it ain't XML ;;json ; At least it ain't XML
@ -178,7 +178,7 @@
:email :email
;;(mu4e +org +gmail) ;;(mu4e +org +gmail)
;;notmuch (notmuch +org +afew)
;;(wanderlust +gmail) ;;(wanderlust +gmail)
:app :app

77
filters.notmuch Normal file
View file

@ -0,0 +1,77 @@
## lists
# agora
+lists +lists/agora-main-backup -- tag:new to:main@agoranomic.groups.io
# france travail
+lists +lists/france-travail -- tag:new from:.*@noreply-pole-emploi.fr
# stop killing games
+lists +lists/stop-killing-games -- tag:new from:.*@stopkillinggames.com
# factorio
+lists +lists/factorio -- tag:new from:newsletter@factorio.com
# change.org
+lists +lists/change.org -- tag:new from:.*@change.org
# ea.com
+lists +lists/ea.com -- tag:new from:.*@ea.com
# ea.com
+lists +lists/ea.com -- tag:new from:.*@ea.com
# roleplayingtips
+lists +lists/role-playing-tips -- tag:new from:.*@roleplayingtips.com
# openstreetmap
+lists +lists/openstreetmap -- tag:new from:.*@noreply.openstreetmap.org
# google
+lists +lists/google -- tag:new from:.*@.*google.com
+lists/google/gmail -- tag:new from:gmail-noreply@.*google.com
+lists/google/ads-support -- tag:new from:ads-support@google.com
+lists/google/crowdsource -- tag:new from:crowdsource-noreply@google.com
+lists/google/account -- tag:new from:googleaccount-noreply@google.com
+lists/google/account -- tag:new from:no-reply@accounts.google.com
+lists/google/calendar -- tag:new from:calendar-noreply@google.com
+lists/google/calendar +notification/calender -- tag:new from:calendar-notification@google.com
+lists/google/alerts -- tag:new from:googlealerts-noreply@google.com
+lists/google/cloud -- tag:new from:cloudplatform-noreply@google.com
+lists/google/docs -- tag:new from:.*@docs.google.com
+notifcation/google/docs/comment -- tag:new from:comment-noreply@docs.google.com
+lists/google/gemini -- tag:new from:google-gemini-noreply@google.com
+lists/google/location-history -- tag:new from:location-history-noreply@google.com
+lists/google/maps-timeline -- tag:new from:noreply-maps-timeline@google.com
+lists/google/photos -- tag:new from:noreply-photos@google.com
+lists/google/find-my-device -- tag:new from:noreply-findmydevice@google.com
+lists/google/play -- tag:new from:googleplay-noreply@google.com
+lists/google/store -- tag:new from:googlestore-noreply@google.com
+lists/google/meet -- tag:new from:googlemeet-noreply@google.com
+lists/google/meet -- tag:new from:meetings-noreply@google.com
+lists/google/nest -- tag:new from:googlenest@google.com
+lists/google/one -- tag:new from:googleone-noreply@google.com
+lists/google/takeout -- tag:new from:"Google Takeout"
+lists/google/community -- tag:new from:googlecommunityteam-noreply@google.com
# welcome to the jungle
+lists +lists/welcometothejungle -- tag:new from:.*@welcometothejungle.com
+lists +lists/edenred -- tag:new from:.*@.*edenred.fr
+lists +lists/cnam +lists/cnam/auvergnerhonealpes -- tag:new from:.*@cnam-auvergnerhonealpes.com
+lists +lists/sncf -- tag:new from:.*@.*sncf.com
+lists +lists/trainz -- tag:new from:newsletters@trainzportal.com from:feedback@n3vgames.com
+lists +lists/xbox -- tag:new from:*@*xbox.com
+lists +lists/jlfwong -- tag:new from:"jlfwong <phleet@gmail.com>"
+project/webforce3 -- tag:new from:noreply@webforce.life from:*@wf3.fr
+lists +lists/webforce3 -- tag:new from:noreply@webforce.life from:be.the.change@wf3.fr from:info@wf3.fr from:infoemploi@wf3.fr OR from:"WF3 WEBINAIRE"
+lists +lists/bibliotheques +lists/bibliotheques/grenoble -- tag:new from:informatique@bm-grenoble.fr from:bm.informatique@grenoble.fr
+lists +lists/alolise -- tag:new to:*@listes.alolise.org

266
flake.lock generated
View file

@ -37,11 +37,11 @@
"base16-helix": { "base16-helix": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1725860795, "lastModified": 1736852337,
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=", "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-helix", "repo": "base16-helix",
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9", "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -53,16 +53,17 @@
"base16-vim": { "base16-vim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1731949548, "lastModified": 1732806396,
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=", "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-vim", "repo": "base16-vim",
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6", "rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-vim", "repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github" "type": "github"
} }
}, },
@ -131,11 +132,11 @@
"doomemacs": { "doomemacs": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1736881038, "lastModified": 1741842488,
"narHash": "sha256-i0GVHWoIqDcFB9JmEdd9T+qxrEx3ckBlPfTD/yLoNyg=", "narHash": "sha256-bqqnkoXND8Sfc2MnTIKBRQSYed0fjgMn481wiIhwyz4=",
"owner": "doomemacs", "owner": "doomemacs",
"repo": "doomemacs", "repo": "doomemacs",
"rev": "2bc052425ca45a41532be0648ebd976d1bd2e6c1", "rev": "c95015d7066476d32784c6f0ed7463b92b931bec",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -154,11 +155,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1737162568, "lastModified": 1741831953,
"narHash": "sha256-cwgeBqXtMKHoK+627GEGGkbIILxhP/OrqNMQhUp/6dQ=", "narHash": "sha256-ZJgTnduyZzNPPCEKxzKa0x1FhWLxlMgJzVdE89s+LWs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "emacs-overlay", "repo": "emacs-overlay",
"rev": "ac3dfdca835c5b8f7c27d5dcec2b9c4580299a7c", "rev": "34c2a5d93606f6f952c34a85e5346029869bd8f0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -170,11 +171,11 @@
"firefox-gnome-theme": { "firefox-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1734969791, "lastModified": 1741628778,
"narHash": "sha256-A9PxLienMYJ/WUvqFie9qXrNC2MeRRYw7TG/q7DRjZg=", "narHash": "sha256-RsvHGNTmO2e/eVfgYK7g+eYEdwwh7SbZa+gZkT24MEA=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "firefox-gnome-theme", "repo": "firefox-gnome-theme",
"rev": "92f4890bd150fc9d97b61b3583680c0524a8cafe", "rev": "5a81d390bb64afd4e81221749ec4bffcbeb5fa80",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -184,6 +185,22 @@
} }
}, },
"flake-compat": { "flake-compat": {
"flake": false,
"locked": {
"lastModified": 1668681692,
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
@ -197,14 +214,14 @@
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
} }
}, },
"flake-compat_2": { "flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1733328505,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -254,6 +271,21 @@
} }
}, },
"flake-utils": { "flake-utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_2"
}, },
@ -271,7 +303,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_3"
}, },
@ -289,7 +321,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": [ "systems": [
"stylix", "stylix",
@ -369,19 +401,14 @@
"nixpkgs": [ "nixpkgs": [
"stylix", "stylix",
"nixpkgs" "nixpkgs"
],
"nixpkgs-stable": [
"stylix",
"git-hooks",
"nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1731363552, "lastModified": 1741379162,
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -459,11 +486,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736373539, "lastModified": 1739757849,
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=", "narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56", "rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -503,11 +530,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1733572789, "lastModified": 1739757849,
"narHash": "sha256-zjO6m5BqxXIyjrnUziAzk4+T4VleqjstNudSqWcpsHI=", "narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c7ffc9727d115e433fd884a62dc164b587ff651d", "rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -517,6 +544,63 @@
"type": "github" "type": "github"
} }
}, },
"lowdown-src": {
"flake": false,
"locked": {
"lastModified": 1633514407,
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
"owner": "kristapsdz",
"repo": "lowdown",
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
"type": "github"
},
"original": {
"owner": "kristapsdz",
"repo": "lowdown",
"type": "github"
}
},
"mms": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nix": "nix",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1669478601,
"narHash": "sha256-IQcS8IPeXvSoIrQRPgtnLxAs0Pkh8wmglDAtqE4ivNo=",
"owner": "mkaito",
"repo": "nixos-modded-minecraft-servers",
"rev": "68f2066499c035fd81c9dacfea2f512d6b0b62e5",
"type": "github"
},
"original": {
"owner": "mkaito",
"repo": "nixos-modded-minecraft-servers",
"type": "github"
}
},
"nix": {
"inputs": {
"lowdown-src": "lowdown-src",
"nixpkgs": "nixpkgs",
"nixpkgs-regression": "nixpkgs-regression"
},
"locked": {
"lastModified": 1669449054,
"narHash": "sha256-aCpXrNpyFH6b1NFYGj2i/HecUvz2vZ88aEyDs1Xj8yM=",
"owner": "NixOS",
"repo": "nix",
"rev": "534332c8a03b64161ec795d1deb2ba3d48f27be1",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nix",
"type": "github"
}
},
"nix-darwin": { "nix-darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -549,11 +633,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1737189134, "lastModified": 1741855244,
"narHash": "sha256-On00k8gk76kiK+LEOq1/+6VaxLuPn4b7kOHtQPI4cRQ=", "narHash": "sha256-2HXXGM67yr4zZ0/d9ut51CUhizZrbzlIxNSsebtfQZ8=",
"owner": "marienz", "owner": "marienz",
"repo": "nix-doom-emacs-unstraightened", "repo": "nix-doom-emacs-unstraightened",
"rev": "e9f07ad62a068771c8854afb2bc0408fcc17ce39", "rev": "605020bea4a461c9faafaece5274dcb3dbf105a3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -564,7 +648,7 @@
}, },
"nixos-06cb-009a-fingerprint-sensor": { "nixos-06cb-009a-fingerprint-sensor": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1734692513, "lastModified": 1734692513,
@ -582,17 +666,18 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1734323986, "lastModified": 1657693803,
"narHash": "sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE=", "narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "394571358ce82dff7411395829aa6a3aad45b907", "rev": "365e1b3a859281cf11b94f87231adeabbdd878a2",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "owner": "NixOS",
"ref": "nixos-24.11", "ref": "nixos-22.05-small",
"type": "indirect" "repo": "nixpkgs",
"type": "github"
} }
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
@ -607,28 +692,76 @@
"url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz" "url": "https://github.com/NixOS/nixpkgs/archive/5daf0514482af3f97abaefc78a6606365c9108e2.tar.gz"
} }
}, },
"nixpkgs-unstable": { "nixpkgs-regression": {
"locked": { "locked": {
"lastModified": 1737062831, "lastModified": 1643052045,
"narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=", "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c", "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1741513245,
"narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1741724370,
"narHash": "sha256-WsD+8uodhl58jzKKcPH4jH9dLTLFWZpVmGq4W1XDVF4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0faaf0a9bb6dedb69bfd43ac06fb27fadc476c51",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1734323986,
"narHash": "sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "394571358ce82dff7411395829aa6a3aad45b907",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "id": "nixpkgs",
"ref": "nixos-unstable", "ref": "nixos-24.11",
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_2": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1736916166, "lastModified": 1736916166,
"narHash": "sha256-puPDoVKxkuNmYIGMpMQiK8bEjaACcCksolsG36gdaNQ=", "narHash": "sha256-puPDoVKxkuNmYIGMpMQiK8bEjaACcCksolsG36gdaNQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e24b4c09e963677b1beea49d411cd315a024ad3a", "rev": "95600680c021743fd87b3e2fe13be7c290e1cac4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -638,7 +771,7 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1721924956, "lastModified": 1721924956,
"narHash": "sha256-Sb1jlyRO+N8jBXEX9Pg9Z1Qb8Bw9QyOgLDNMEpmjZ2M=", "narHash": "sha256-Sb1jlyRO+N8jBXEX9Pg9Z1Qb8Bw9QyOgLDNMEpmjZ2M=",
@ -657,7 +790,7 @@
"nixvim": { "nixvim": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_5",
"nixvim": "nixvim_2" "nixvim": "nixvim_2"
}, },
"locked": { "locked": {
@ -677,7 +810,7 @@
"nixvim_2": { "nixvim_2": {
"inputs": { "inputs": {
"devshell": "devshell", "devshell": "devshell",
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_2",
"git-hooks": "git-hooks", "git-hooks": "git-hooks",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
@ -705,7 +838,7 @@
}, },
"nuschtosSearch": { "nuschtosSearch": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"nixvim", "nixvim",
"nixvim", "nixvim",
@ -728,7 +861,7 @@
}, },
"other-transcode": { "other-transcode": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
@ -772,9 +905,10 @@
"breezex-cursor": "breezex-cursor", "breezex-cursor": "breezex-cursor",
"cassowary": "cassowary", "cassowary": "cassowary",
"home-manager": "home-manager", "home-manager": "home-manager",
"mms": "mms",
"nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened", "nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened",
"nixos-06cb-009a-fingerprint-sensor": "nixos-06cb-009a-fingerprint-sensor", "nixos-06cb-009a-fingerprint-sensor": "nixos-06cb-009a-fingerprint-sensor",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_4",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nixvim": "nixvim", "nixvim": "nixvim",
"other-transcode": "other-transcode", "other-transcode": "other-transcode",
@ -789,8 +923,8 @@
"base16-helix": "base16-helix", "base16-helix": "base16-helix",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_4",
"git-hooks": "git-hooks_2", "git-hooks": "git-hooks_2",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"home-manager": "home-manager_3", "home-manager": "home-manager_3",
@ -803,11 +937,11 @@
"tinted-tmux": "tinted-tmux" "tinted-tmux": "tinted-tmux"
}, },
"locked": { "locked": {
"lastModified": 1736955352, "lastModified": 1741703235,
"narHash": "sha256-VujiBKJYM32b7HZEVO3Txla989lE7HMNGhVomLtguB0=", "narHash": "sha256-3efck7239JPh6IHnqhETaoQejfxh4RBU16bE8IHOkto=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "ef93972237a82cc340e804a1d2d4140ad65fe81d", "rev": "4a3ac9e30cd15b25a8b2e6cf0a7a047f454408bd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -914,11 +1048,11 @@
"tinted-tmux": { "tinted-tmux": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1729501581, "lastModified": 1740877430,
"narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=", "narHash": "sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "tinted-tmux", "repo": "tinted-tmux",
"rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14", "rev": "d48ee86394cbe45b112ba23ab63e33656090edb4",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -1,7 +1,7 @@
{ {
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-24.11"; url = "github:nix-community/home-manager/release-24.11";
@ -45,6 +45,8 @@
nixos-06cb-009a-fingerprint-sensor = { nixos-06cb-009a-fingerprint-sensor = {
url = "github:ahbnr/nixos-06cb-009a-fingerprint-sensor"; url = "github:ahbnr/nixos-06cb-009a-fingerprint-sensor";
}; };
mms.url = "github:mkaito/nixos-modded-minecraft-servers";
}; };
outputs = { outputs = {
nixpkgs, nixpkgs,
@ -58,6 +60,7 @@
nix-doom-emacs-unstraightened, nix-doom-emacs-unstraightened,
nixos-06cb-009a-fingerprint-sensor, nixos-06cb-009a-fingerprint-sensor,
cassowary, cassowary,
mms,
... ...
}: let }: let
system = "x86_64-linux"; system = "x86_64-linux";
@ -91,6 +94,7 @@
]; ];
specialArgs = { specialArgs = {
pkgs-unstable = nixpkgs-unstable.legacyPackages.${system}; pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
inherit mms;
}; };
}; };
nixosConfigurations.t470 = nixpkgs.lib.nixosSystem { nixosConfigurations.t470 = nixpkgs.lib.nixosSystem {

128
home.nix
View file

@ -29,12 +29,17 @@ in {
trashy trashy
unzip unzip
parallel parallel
tcpdump
libqalculate
ouch
inetutils
# remote working # remote working
remmina remmina
# communication # communication
discord discord
# passwords # passwords
bitwarden-desktop bitwarden-desktop
bitwarden-cli
# editors # editors
nixvim nixvim
# make clipboard yanking work in neovim # make clipboard yanking work in neovim
@ -78,10 +83,20 @@ in {
# games # games
lutris lutris
wine wine
prismlauncher
# ai # ai
ollama ollama
# windows # windows
cassowary cassowary
# xmonad
# apparently this is needed for the haskell lsp
ghc
i3lock
xmobar
# show volume in xmobar
alsa-utils
# remote
rustdesk
]; ];
file = { file = {
@ -118,21 +133,33 @@ in {
programs.jujutsu = { programs.jujutsu = {
enable = true; enable = true;
ediff = true;
settings = { settings = {
user = { user = {
email = "khais.colin@gmail.com"; email = "khais.colin@gmail.com";
name = "Khaïs COLIN"; name = "Khaïs COLIN";
}; };
signing = {
sign-all = true;
backend = "ssh";
key = "/home/khais/.ssh/id_ed25519.pub";
};
ui = { ui = {
editor = "emacsclient"; editor = "emacsclient -a ''";
default-command = "log"; default-command = "log";
movement.edit = true; movement.edit = true;
# do not page if output fits on one screen # do not page if output fits on one screen
pager = "less -FRX"; pager = "less -FRX";
}; };
merge-tools.ediff = { fix.tools = {
program = "sh"; clang-format = {
merge-args = ["-c" "emacsclient -c --eval (ediff-merge-files-with-anscestor \"$0\" \"$1\" \"$2\" nil \"$3\")" "$left" "$right" "$base" "$output"]; command = ["${pkgs.clang-tools}/bin/clang-format" "--assume-filename=$path"];
patterns = ["glob:'**/*.cpp'" "glob:'**/*.hpp'"];
};
whitespace = {
command = ["${pkgs.perl}/bin/perl" "-p" "-e" "s/ +$//" "$path"];
patterns = ["glob:'**/*'"];
};
}; };
}; };
}; };
@ -238,10 +265,101 @@ in {
programs.doom-emacs = { programs.doom-emacs = {
enable = true; enable = true;
doomDir = ./doom.d; doomDir = ./doom.d;
extraBinPackages = with pkgs; [clang-tools nil nixd]; extraBinPackages = with pkgs; [clang-tools nil nixd haskell-language-server ghc];
}; };
programs.yazi = { programs.yazi = {
enable = true; enable = true;
}; };
xsession.windowManager.xmonad = {
enable = true;
config = ./xmonad.hs;
enableContribAndExtras = true;
};
programs.xmobar = {
enable = true;
extraConfig = builtins.readFile ./xmobarrc;
};
programs.rofi.enable = true;
# email
programs.mbsync.enable = true;
programs.msmtp.enable = true;
programs.offlineimap.enable = true;
programs.lieer = {
enable = true;
};
accounts.email.accounts.gmail = {
address = "khais.colin@gmail.com";
lieer = {
enable = true;
settings.local_trash_tag = "killed";
sync.enable = true;
};
msmtp.enable = true;
notmuch.enable = true;
primary = true;
realName = "Khaïs COLIN";
signature = {
text = ''
Cordialement,
-- Khaïs COLIN
'';
showSignature = "append";
};
passwordCommand = "cat /home/khais/.home-manager-gmail-password";
userName = "khais.colin@gmail.com";
flavor = "gmail.com";
};
accounts.email.accounts.orange = {
address = "kh.col@orange.fr";
offlineimap = {
enable = true;
};
msmtp.enable = true;
notmuch.enable = true;
realName = "Khaïs COLIN";
signature = {
text = ''
Cordialement,
-- Khaïs COLIN
'';
showSignature = "append";
};
passwordCommand = "cat /home/khais/.home-manager-orange-password";
userName = "kh.col@orange.fr";
imap = {
host = "imap.orange.fr";
port = 993;
};
smtp = {
host = "smtp.orange.fr";
};
};
programs.notmuch = {
enable = true;
new = {
tags = ["new" "unread"];
};
hooks = {
preNew = "gmi sync --path ~/Maildir/gmail; offlineimap";
postNew = "afew --verbose --tag --new";
};
search.excludeTags = [
"killed"
"spam"
];
};
programs.afew = {
enable = true;
extraConfig = builtins.readFile ./afew.config;
};
} }

111
void.nix
View file

@ -1,11 +1,16 @@
# Edit this configuration file to define what should be installed on # Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page # your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help). # and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{ {
config,
pkgs,
mms,
...
}: {
imports = [ imports = [
./hardware-configuration-void.nix ./hardware-configuration-void.nix
./common.nix ./common.nix
mms.module
]; ];
networking.hostName = "void"; # Define your hostname. networking.hostName = "void"; # Define your hostname.
@ -54,6 +59,7 @@
# mount external drive # mount external drive
fileSystems."/external".label = "external"; fileSystems."/external".label = "external";
fileSystems."/external".options = ["nofail" "x-systemd.automount"];
# backup # backup
services.borgbackup.jobs."external" = { services.borgbackup.jobs."external" = {
@ -72,6 +78,7 @@
"/home/*/GOG Games" "/home/*/GOG Games"
"**/target" "**/target"
"**/result" "**/result"
"/var/log"
]; ];
repo = "/external/voidbackup"; repo = "/external/voidbackup";
encryption = { encryption = {
@ -81,6 +88,8 @@
compression = "auto,lzma"; compression = "auto,lzma";
startAt = "daily"; startAt = "daily";
persistentTimer = true; persistentTimer = true;
extraCreateArgs = ["--stats" "--info" "--list" "--filter=AMEC"];
removableDevice = true;
}; };
systemd.services."borgbackup-job-external" = { systemd.services."borgbackup-job-external" = {
unitConfig = { unitConfig = {
@ -88,4 +97,104 @@
Requires = "external.mount"; Requires = "external.mount";
}; };
}; };
# postgresql backup
services.postgresqlBackup = {
enable = true;
backupAll = true;
location = "/var/backup/postgresql";
};
systemd.timers."postgresqlBackup".unitConfig.Persistent = true;
# minecraft TerraFirmaGreg server
services.modded-minecraft-servers = {
eula = true;
instances.terrafirmagreg = {
enable = true;
rsyncSSHKeys = [""];
serverConfig = {
server-port = 25565;
motd = "Welcome to logistic-bot's TerraFirmaGreg server";
allow-flight = true;
allow-nether = false;
difficulty = 0;
enable-rcon = false;
level-type = "tfc\:overworld";
view-distance = 24;
};
jvmPackage = pkgs.jdk17;
jvmMaxAllocation = "8196M";
jvmInitialAllocation = "2048M";
# "Borrowed" from AllTheMods Discord
jvmOpts = builtins.concatStringsSep " " [
"-XX:+UseG1GC"
"-XX:+ParallelRefProcEnabled"
"-XX:MaxGCPauseMillis=200"
"-XX:+UnlockExperimentalVMOptions"
"-XX:+DisableExplicitGC"
"-XX:+AlwaysPreTouch"
"-XX:G1NewSizePercent=40"
"-XX:G1MaxNewSizePercent=50"
"-XX:G1HeapRegionSize=16M"
"-XX:G1ReservePercent=15"
"-XX:G1HeapWastePercent=5"
"-XX:G1MixedGCCountTarget=4"
"-XX:InitiatingHeapOccupancyPercent=20"
"-XX:G1MixedGCLiveThresholdPercent=90"
"-XX:G1RSetUpdatingPauseTimePercent=5"
"-XX:SurvivorRatio=32"
"-XX:+PerfDisableSharedMem"
"-XX:MaxTenuringThreshold=1"
];
};
};
services.jellyfin = {
enable = true;
openFirewall = true;
user = "khais";
};
services.forgejo = {
enable = true;
database.type = "postgres";
# Enable support for Git Large File Storage
lfs.enable = true;
settings = {
server = {
DOMAIN = "forgejo.005540.xyz";
# You need to specify this to remove the port from URLs in the web UI.
ROOT_URL = "https://forgejo.005540.xyz/";
HTTP_PORT = 3000;
};
# You can temporarily allow registration to create an admin user.
service.DISABLE_REGISTRATION = false;
# Add support for actions, based on act: https://github.com/nektos/act
actions = {
ENABLED = true;
DEFAULT_ACTIONS_URL = "github";
};
};
};
services.nginx = {
enable = true;
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;
virtualHosts = {
"void.hummingbird-stork.ts.net" = {
locations."/".proxyPass = "http://localhost:8096";
};
"jellyfin.005540.xyz" = {
locations."/".proxyPass = "http://localhost:8096";
};
"forgejo.005540.xyz" = {
locations."/".proxyPass = "http://localhost:3000";
};
};
};
} }

View file

@ -165,10 +165,12 @@ in {
"None Scroll_Lock" = "spawn 'playerctl previous'"; "None Scroll_Lock" = "spawn 'playerctl previous'";
"None XF86AudioNext" = "spawn 'playerctl next'"; "None XF86AudioNext" = "spawn 'playerctl next'";
"None Pause" = "spawn 'cmus-remote -C player-next-album'"; "None Pause" = "spawn 'cmus-remote -C player-next-album'";
"None XF86Bluetooth" = "spawn 'playerctl play-pause'"; "None XF86Bluetooth" = "spawn 'playerctl play-pause'";
"None XF86Tools" = "spawn 'playerctl previous'"; "None XF86Tools" = "spawn 'playerctl previous'";
"None XF86Keyboard" = "spawn 'playerctl next'"; "None XF86Keyboard" = "spawn 'playerctl next'";
"None XF86Favorites" = "spawn 'cmus-remote -C player-next-album'"; "None XF86Favorites" = "spawn 'cmus-remote -C player-next-album'";
"None XF86AudioMute" = "spawn 'wpctl set-mute @DEFAULT_SINK@ toggle'"; "None XF86AudioMute" = "spawn 'wpctl set-mute @DEFAULT_SINK@ toggle'";
}; };
}; };

63
xmobarrc Normal file
View file

@ -0,0 +1,63 @@
Config { overrideRedirect = False
, font = "xft:Victor Mono NerdFont-8"
, bgColor = "#07080d"
, fgColor = "#e0e2ea"
, position = TopW L 100
, commands = [ Run MultiCoreTemp
[ "-t", "Temp:<avg>°C"
, "-L", "50"
, "-H", "80"
, "--low" , "#b6f0ff"
, "--normal", "#b3f6c0"
, "--high" , "#fcbeb7"
] 50
, Run Cpu
[ "-L", "3"
, "-H", "50"
, "--ppad", "3"
, "--low" , "#b6f0ff"
, "--normal", "#b3f6c0"
, "--high" , "#fcbeb7"
] 10
, Run Battery
[ "-L", "15"
, "-H", "80"
, "--ppad", "3"
, "--low", "#fcbeb7"
, "--normal", "#b6f0ff"
, "--high", "#b3f6c0"
] 10
, Run Alsa "default" "Master"
[ "--template", "<volumestatus>"
, "--suffix" , "True"
, "--"
, "--on", ""
]
, Run Memory
[ "--template", "Mem: <usedratio>%"
, "-L", "20"
, "-H", "50"
, "--ppad", "3"
, "--low" , "#b6f0ff"
, "--normal", "#b3f6c0"
, "--high" , "#fcbeb7"
] 10
, Run DateZone "<fc=#b3f6c0>%a %d %b</fc> %Y-%m-%d <fc=#b3f6c0>%H:%M:%S</fc>"
"fr_FR.UTF-8"
"Europe/Paris"
"date" 10
, Run DiskIO [ ("/", "r:<read> w:<write>") ]
[ "-L", "300"
, "-H", "1000"
, "--ppad", "3"
, "--low" , "#b6f0ff"
, "--normal", "#b3f6c0"
, "--high" , "#fcbeb7"
] 10
, Run Mpris2 "cmus" [] 10
, Run XMonadLog
]
, sepChar = "%"
, alignSep = "}{"
, template = "%XMonadLog%}%mpris2%{%diskio% • %alsa:default:Master% • %battery% • %cpu% • %memory% • %multicoretemp% • %date%"
}

199
xmonad.hs Normal file
View file

@ -0,0 +1,199 @@
import XMonad
import XMonad.Util.EZConfig
import XMonad.Layout.ThreeColumns
import XMonad.Layout.WindowNavigation
import XMonad.Layout.MultiToggle.Instances
import XMonad.Layout.MultiToggle
import XMonad.Layout.NoBorders
import XMonad.Layout.IndependentScreens
import XMonad.Actions.CopyWindow
import XMonad.Actions.CycleWS
import XMonad.Actions.EasyMotion (selectWindow)
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP
import qualified XMonad.Layout.Magnifier as Mag
import qualified Data.Map as M
import qualified XMonad.StackSet as W
import System.Exit
import XMonad.Util.Loggers
-- TODO: xmobar
myWorkspaceNames = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
myScreens = 2
conf = def { layoutHook = myLayout
, workspaces = withScreens myScreens myWorkspaceNames
, modMask = mod4Mask
}
`additionalKeysP`
myKeys
-- main :: IO ()
main =
xmonad $ ewmh $ withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey conf
-- Define the status bars for each screen
-- myStatusBars :: [StatusBarConfig]
-- myStatusBars = [ statusBarProp ("xmobar -x " ++ show sc) (pure myXmobarPP) | sc <- [0..myScreens - 1] ]
-- main :: IO ()
-- main = xmonad . ewmh $ dynamicSBs myStatusBars conf
myXmobarPP :: PP
myXmobarPP = def
{ ppSep = magenta ""
, ppTitleSanitize = xmobarStrip
, ppCurrent = xmobarBorder "Top" borderColor 2 . xmobarBorder "Bottom" borderColor 2
, ppUrgent = red . wrap (yellow "!") (yellow "!")
, ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
, ppExtras = [logTitles formatFocused formatUnfocused]
}
where
formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
-- | Windows should have *some* title, which should not not exceed a
-- sane length.
ppWindow :: String -> String
ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
blue, lowWhite, magenta, red, white, yellow :: String -> String
magenta = xmobarColor "#ff79c6" ""
blue = xmobarColor "#bd93f9" ""
white = xmobarColor "#f8f8f2" ""
yellow = xmobarColor "#f1fa8c" ""
red = xmobarColor "#ff5555" ""
lowWhite = xmobarColor "#bbbbbb" ""
borderColor = "#8be9fd"
myKeys :: [(String, X ())]
myKeys = [
-- Screen lock & suspend
("C-M1-l" , spawn "i3lock" )
, ("C-M1-S-l" , spawn "i3lock" *> spawn "systemctl suspend")
-- Terminal
, ("M4-<Return>", spawn "kitty -1")
-- Frequent programs
, ("M4-q", spawn "firefox" )
, ("M4-a", runOrCopy "emacs" (className =? "Emacs"))
, ("M4-d", spawn "discord" )
, ("M4-g", spawn "dolphin" )
-- Program launcher
, ("M4-r", spawn "rofi -show drun -theme Paper" )
-- Exit
, ("M4-M1-C-q", io (exitWith ExitSuccess) )
-- Manipulate current client
, ("M4-w", kill1 )
, ("M4-s", toggleFloat )
-- focus client
, ("M4-h", sendMessage (Go L) )
, ("M4-j", sendMessage (Go D) )
, ("M4-k", sendMessage (Go U) )
, ("M4-l", sendMessage (Go R) )
-- focus client (easymotion)
, ("M4-;", selectWindow def >>= (`whenJust` windows . W.focusWindow))
-- Swap client
, ("M4-S-h", sendMessage $ Swap L)
, ("M4-S-j", sendMessage $ Swap D)
, ("M4-S-k", sendMessage $ Swap U)
, ("M4-S-l", sendMessage $ Swap R)
, ("M4-S-<Return>", windows $ W.swapMaster)
-- Move client
, ("M4-M1-S-h", sendMessage (Move L) )
, ("M4-M1-S-j", sendMessage (Move D) )
, ("M4-M1-S-k", sendMessage (Move U) )
, ("M4-M1-S-l", sendMessage (Move R) )
-- Fullscreen
, ("M4-f", sendMessage (Toggle FULL) )
-- Magnification
, ("M4-m", sendMessage (Mag.Toggle) )
, ("M4-[", sendMessage (Mag.MagnifyLess) )
, ("M4-]", sendMessage (Mag.MagnifyMore) )
-- Modify number of master windows
, ("M4-M1-j", sendMessage (IncMasterN (-1)))
, ("M4-M1-k", sendMessage (IncMasterN 1 ))
-- Resize master area
, ("M4-C-h", sendMessage Shrink)
, ("M4-C-l", sendMessage Expand)
-- Cycle through workspaces
, ("M4-<Left>", moveTo Prev spacesOnCurrentScreen )
, ("M4-<Right>", moveTo Next spacesOnCurrentScreen )
-- Cycle through empty workspaces
, ("M4-M1-<Left>", moveTo Prev emptySpacesOnCurrentScreen)
, ("M4-M1-<Right>", moveTo Next emptySpacesOnCurrentScreen)
-- Send window through workspaces
, ("M4-S-<Left>", shiftTo Prev spacesOnCurrentScreen )
, ("M4-S-<Right>", shiftTo Next spacesOnCurrentScreen )
-- Music player control (void)
, ("<XF86AudioPlay>", spawn "playerctl play-pause" )
, ("<Scroll_Lock>", spawn "playerctl previous" )
, ("<XF86AudioNext>", spawn "playerctl next" )
, ("<Pause>", spawn "cmus-remote -C player-next-album")
-- Music player control (t470)
, ("<XF86Bluetooth>", spawn "playerctl play-pause")
, ("<XF86Tools>", spawn "playerctl previous")
, ("<XF86Keyboard>", spawn "playerctl next") -- Potentially broken key
, ("<XF86Favorites>", spawn "cmus-remote -C player-next-album")
-- Audio control
, ("<XF86AudioMute>", spawn "wpctl set-mute @DEFAULT_SINK@ toggle")
, ("<XF86AudioLowerVolume>", spawn "wpctl set-volume @DEFAULT_SINK@ 1%-")
, ("<XF86AudioRaiseVolume>", spawn "wpctl set-volume @DEFAULT_SINK@ 1%+")
-- Mic control
, ("<XF86AudioMicMute>", spawn "wpctl set-mute @DEFAULT_SOURCE@ toggle")
, ("M1-<XF86AudioLowerVolume>", spawn "wpctl set-volume @DEFAULT_SOURCE@ 1%-")
, ("M1-<XF86AudioRaiseVolume>", spawn "wpctl set-volume @DEFAULT_SOURCE@ 1%+")
-- backlight control (t470)
, ("<XF86MonBrightnessDown>", spawn "brightnessctl set 1%-")
, ("<XF86MonBrightnessUp>", spawn "brightnessctl set 1%+")
-- backlight control (void)
, ("M4-<Prior>", spawn "ddcutil setvcp 10 + 10")
, ("M4-<Next>", spawn "ddcutil setvcp 10 - 10")
-- Reload configuration
, ("M4-<Escape>", spawn "xmonad --recompile; xmonad --restart")
] ++ concat [
-- Workspace switching
[ ("M4-" ++ i, windows $ onCurrentScreen W.view $ i)
-- Move window to workspace
, ("M4-S-" ++ i, windows $ onCurrentScreen W.shift $ i)
-- Copy window to workspace
, ("M4-M1-S-" ++ i, windows $ onCurrentScreen copy $ i) ]
| i <- myWorkspaceNames
]
-- https://stackoverflow.com/questions/33547168/xmonad-combine-dwm-style-workspaces-per-physical-screen-with-cycling-function
isOnScreen :: ScreenId -> WindowSpace -> Bool
isOnScreen s ws = s == unmarshallS (W.tag ws)
currentScreen :: X ScreenId
currentScreen = gets (W.screen . W.current . windowset)
spacesOnCurrentScreen :: WSType
spacesOnCurrentScreen = WSIs (isOnScreen <$> currentScreen)
emptySpacesOnCurrentScreen :: WSType
emptySpacesOnCurrentScreen = spacesOnCurrentScreen :&: emptyWS
myLayout = smartBorders
$ windowNavigation
$ mkToggle (single FULL)
$ (Mag.magnifiercz' 1.3 $ ThreeColMid 1 (3/100) (2/3))
||| Tall 1 (3/100) (2/3)
-- https://www.reddit.com/r/xmonad/comments/hm2tg0/how_to_toggle_floating_state_on_a_window/
-- Centre and float a window (retain size)
centreFloat win = do
(_, W.RationalRect x y w h) <- floatLocation win
windows $ W.float win (W.RationalRect ((1 - w) / 2) ((1 - h) / 2) w h)
return ()
-- If the window is floating then (f), if tiled then (n)
floatOrNot f n = withFocused $ \windowId -> do
floats <- gets (W.floating . windowset)
if windowId `M.member` floats -- if the current window is floating...
then f
else n
-- Float and centre a tiled window, sink a floating window
toggleFloat = floatOrNot (withFocused $ windows . W.sink) (withFocused float)