Compare commits

..

70 Commits
master ... wrk

Author SHA1 Message Date
Martin Potier f0f726f3ab
Wrk 2024-05-09 15:10:09 +03:00
Martin Potier 8b235d3a65
Changes 2023-11-03 17:13:33 +02:00
Martin Potier e4b903562b
Updates 2023-10-12 13:19:42 +03:00
Martin Potier eb9f84e65f
New project 2023-08-31 13:47:14 +03:00
Martin Potier 8b162c7c31
Add keybindings for numpad 2023-08-04 10:57:48 +03:00
Martin Potier 6070398070
Remove manual fuzzy matching, and use the dedicated module 2023-08-03 09:12:05 +03:00
Martin Potier db58691676
Rename isengard projects 2023-08-03 09:06:20 +03:00
Martin Potier 64cedbb27e
Use rescreen 2023-07-21 20:15:52 +03:00
Martin Potier 90d4dbb58e
Expand ~ manually 2023-06-21 12:21:59 +03:00
Martin Potier f8bd90fb48
Use the slack application 2023-05-29 14:00:52 +03:00
Martin Potier c70973d131
Add moria project 2023-05-26 12:42:11 +03:00
Martin Potier 5a9b9d09bd
Changes 2023-04-18 10:10:27 +03:00
Martin Potier a131b1bb1b move away from logseq 2023-04-02 10:56:26 +03:00
Martin Potier 5483cbda5e
Updates 2023-03-29 10:10:53 +03:00
Martin Potier 18e653b6f2
Updates 2023-03-29 10:10:20 +03:00
Martin Potier 735ec3214a
changes 2023-03-10 15:09:07 +02:00
Martin Potier baac904283
changes 2023-03-02 12:59:34 +02:00
Martin Potier 6694a0e07a
update project name 2023-01-23 10:02:12 +02:00
Martin Potier c830fce008
Fix path to mpc 2022-12-27 08:35:09 +02:00
Martin Potier 5a280ca7be
Configure changes in keybindings 2022-12-22 12:37:22 +02:00
Martin Potier 93c88791a1
Flakify xmonad 2022-12-07 14:58:01 +02:00
Martin Potier 7941767bc4
Fix flameshot path 2022-12-07 14:54:45 +02:00
Martin Potier b1c417b464
Changes 2022-09-15 16:23:00 +03:00
Martin Potier 049af82a9a
Spring cleanup 2022-04-08 12:43:00 +03:00
Martin Potier ae1da29574
Add new doTile function, force tile VPN client 2022-03-24 09:42:49 +02:00
Martin Potier 9b561492e8
Auto-start VPN on VPN project 2022-02-18 11:35:11 +02:00
Martin Potier 9cacbb2a0b
Move gpclient to its own project 2022-02-18 11:26:33 +02:00
Martin Potier 558f52c01b
Replacing obsidian with logseq 2022-02-16 09:19:11 +02:00
Martin Potier 767c37d492
More changes 2022-02-10 15:23:46 +02:00
Martin Potier 8d1c03a862
Switch to kitty 2021-12-15 12:38:09 +02:00
Martin Potier 29a3874b34
changes 2021-11-01 12:18:25 +02:00
Martin Potier 7f7fd27fd6
Move to emacs 2021-07-14 12:49:35 +03:00
Martin Potier 1b3f67199e
New project, limit passwords 2021-04-14 12:33:09 +03:00
Martin Potier 8cdfff9901
some changes 2021-04-06 09:29:14 +03:00
Martin Potier d9d0f13cbb
Add new project 2021-03-05 16:41:37 +02:00
Martin Potier 8914400110
Add right click stuff 2021-03-03 14:09:35 +02:00
Martin Potier 24581f06d0
New projects 2021-03-03 14:04:23 +02:00
Martin Potier d51ced34d5
Center floating window 2021-01-20 12:16:59 +02:00
Martin Potier 6f4d2c30c5
Add new work project 2021-01-20 12:14:51 +02:00
Martin Potier de4c5cc9c4
New projects 2021-01-18 12:36:50 +02:00
Martin Potier e1dfa4b269
Goodbye advent of code 2021-01-07 15:25:51 +02:00
Martin Potier 8bd5e58c8a
Add adventofcode 2020-12-18 12:53:30 +02:00
Martin Potier 24ec645a56
Add mordor-sudo 2020-12-01 12:14:53 +02:00
Martin Potier ebeb708303
Attempt to react to screen event 2020-11-23 16:01:13 +02:00
Martin Potier 05ca473721
Move to neuron 2020-11-23 16:00:47 +02:00
Martin Potier cf5baddf49
Some cleanup 2020-11-02 16:01:13 +02:00
Martin Potier a8b1a0d92d
Use nvidia opengl 2020-10-22 09:27:11 +03:00
Martin Potier 1ac9836718
Add stuff 2020-10-20 15:55:21 +03:00
Martin Potier b0cfdbe530
Disable titleBar
Make Xorg crazy… Maybe it's an nvidia thing
2020-10-19 09:16:17 +03:00
Martin Potier 3893cdb68e
Add window titles 2020-10-16 10:43:31 +03:00
Martin Potier 4fe78658cd
add new projects 2020-10-15 13:06:18 +03:00
Martin Potier 807734ba81
Fix paths, start patchage on sound 2020-09-28 16:24:06 +03:00
Martin Potier c7117f7e3e
Refactor for wrk 2020-09-25 12:13:26 +03:00
Martin Potier c604a4c006
Projects refactor 2020-07-22 10:24:04 +03:00
Martin Potier dd15ccfe6e
Cleanup projects 2020-06-05 10:48:19 +03:00
Martin Potier 9cc302cb98
Make use of git worktree, no duplication 2020-05-29 14:41:40 +03:00
Martin Potier 7bfe1c43bc
Cleanup terminated projects 2020-04-01 13:55:13 +03:00
Martin Potier 26b9fd7e68
More toplevel project helpers 2020-03-30 10:20:40 +03:00
Martin Potier a6f50829ae
New project, new status 2020-03-11 09:22:58 +02:00
Martin Potier 1f4e774ad7
New projects 2020-02-21 08:43:13 +02:00
Martin Potier ba75e65498
Update projects 2019-12-31 10:20:42 +02:00
Martin Potier c174503244
Rework projects declaration 2019-12-03 15:46:51 +02:00
Martin Potier 37631ed6a2
Update font name! 2019-12-03 15:45:19 +02:00
Martin Potier 5bf31dac93
Group Vim&St projects 2019-09-25 10:03:53 +03:00
Martin Potier c0dba2d167
Rename selectPassword to copyPassword 2019-09-25 10:03:38 +03:00
Martin Potier 1fba240b51
Support for widescreen 2019-09-25 10:03:08 +03:00
Martin Potier bc82caba10
New screen, new layout 2019-05-31 18:42:52 +03:00
Martin Potier 310dfd47eb Adding password manager for my own good 2019-05-16 09:03:35 +03:00
Martin Potier bdf505f52f Add some notes about getting password 2019-05-10 15:04:15 +03:00
Martin Potier c1c83e186e New layout logic 2019-04-17 17:31:38 +03:00
16 changed files with 288 additions and 358 deletions

4
.gitignore vendored
View File

@ -1,10 +1,8 @@
.*.swp
artwork/
artwork
*.hi
*.o
.direnv/
prompt-history
xmonad-x86_64-linux
xmonad.errors
xmonad.state
dist-newstyle

View File

@ -1,5 +0,0 @@
# Revision history for xmonad-config
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.

View File

@ -1,2 +0,0 @@
import Distribution.Simple
main = defaultMain

View File

@ -17,11 +17,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1670064435,
"narHash": "sha256-+ELoY30UN+Pl3Yn7RWRPabykwebsVK/kYE9JsIsUMxQ=",
"lastModified": 1670242877,
"narHash": "sha256-jBLh7dRHnbfvPPA9znOC6oQfKrCPJ0El8Zoe0BqnCjQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "61a8a98e6d557e6dd7ed0cdb54c3a3e3bbc5e25c",
"rev": "6e51c97f1c849efdfd4f3b78a4870e6aa2da4198",
"type": "github"
},
"original": {

View File

@ -11,6 +11,7 @@ import Graphics.X11.Types
import System.Exit
-- import Text.EditDistance
import XMonad
import XMonad.Actions.CopyWindow (kill1,copy)
import XMonad.Actions.CycleWS
import XMonad.Actions.DynamicProjects
import XMonad.Core
@ -20,16 +21,19 @@ import XMonad.Prompt
import XMonad.Prompt.ConfirmPrompt
import XMonad.Prompt.FuzzyMatch
import XMonad.Prompt.Shell
import XMonad.Prompt.Workspace (workspacePrompt)
import XMonad.Util.EZConfig
import XMonad.Util.NamedScratchpad
import qualified Nord as N
import qualified Solarized as S
import qualified Scratchpad as R
import qualified XMonad.StackSet as W
-- Custom (in libs)
import Password (passPrompt)
lockScreenCmd =
spawn "/etc/profiles/per-user/e/bin/mpc pause; /run/current-system/sw/bin/xset s activate"
modify :: XConfig l -> XConfig l
modify conf = conf
{ modMask = mod4Mask -- Use the "Win" key for the mod key
@ -37,12 +41,20 @@ modify conf = conf
`additionalKeysP` -- Add some extra key bindings:
[ ("M-S-q", confirmPrompt promptConfig "exit" (io exitSuccess))
, ("<XF86MonBrightnessDown>", spawn "/run/current-system/sw/bin/xbacklight -10")
, ("<XF86MonBrightnessUp>", spawn "/run/current-system/sw/bin/xbacklight +10")
, ("<XF86AudioPlay>", spawn "/run/current-system/sw/bin/mpc toggle")
, ("<XF86AudioNext>", spawn "/run/current-system/sw/bin/mpc next")
, ("<XF86AudioPrev>", spawn "/run/current-system/sw/bin/mpc prev")
, ("M-<Delete>", kill)
, ("<XF86MonBrightnessDown>", spawn "/run/current-system/sw/bin/light -U 10")
, ("<XF86MonBrightnessUp>", spawn "/run/current-system/sw/bin/light -A 10")
, ("<XF86AudioPlay>", spawn "/etc/profiles/per-user/e/bin/mpc toggle")
, ("<XF86AudioNext>", spawn "/etc/profiles/per-user/e/bin/mpc next")
, ("<XF86AudioPrev>", spawn "/etc/profiles/per-user/e/bin/mpc prev")
-- KP_1 -> KP_6 macros
, ("<XF86Tools>", viewProject "sound")
, ("<XF86Launch5>", viewProject "frs")
, ("<XF86Launch6>", viewProject "chat")
, ("<XF86Launch7>", viewProject "isengard")
, ("<XF86Launch8>", viewProject "moria")
, ("<XF86Launch9>", viewProject "fre")
-- KP_Delete
, ("Cancel", lockScreenCmd)
, ("M-<Down>", windows W.focusDown)
, ("M-<Esc>", sendMessage (Toggle "Full"))
, ("M-$", sendMessage (Toggle "Full"))
@ -52,31 +64,37 @@ modify conf = conf
, ("M-<Right>", nextWS)
, ("M-<Tab>", toggleWS' ["NSP"])
, ("M-<Up>", windows W.focusUp)
, ("M-S-<Delete>", spawn "/run/current-system/sw/bin/mpc pause; /run/current-system/sw/bin/xset s activate")
, ("M-S-<Delete>", lockScreenCmd)
, ("M-S-<Left>", shiftToPrev >> prevWS)
, ("M-S-<Right>", shiftToNext >> nextWS)
, ("M-s s", spawn "flameshot gui")
, ("M-s s", spawn "/etc/profiles/per-user/e/bin/flameshot gui")
, ("M-s t", spawn "/run/current-system/sw/bin/scrot /tmp/screen.png")
-- Workspace and tasks
, ("M-b", switchProjectPrompt promptConfig)
, ("M-p c", withFocused centerWindow)
, ("M-p m", shiftToProjectPrompt promptConfig)
, ("M-p n", switchProjectPrompt promptConfig)
, ("M-p r", renameProjectPrompt promptConfig)
, ("M-p s", shellPrompt promptConfig)
, ("M-p c", withFocused centerWindow)
, ("M-d", passPrompt promptConfig)
-- Scratchpads
, ("M-p p", namedScratchpadAction R.pads "htop")
-- Dunst
, ("C-<Space>", spawn "dunstctl close")
-- Copy windows to workspaces
, ("M-<Delete>", kill1)
, ("M-c", workspacePrompt promptConfig (\name -> windows $ copy name))
-- Mouse stuff
, ("<F9>", spawn "find-cursor")
-- , ("M-$ $", spawn "xdotool click 3")
-- , ("M-$ M-$", spawn "xdotool click 3") -- helpfull to combine M + right click
-- resizing the master/slave ratio
, ("M-h", sendMessage Shrink) -- Shrink the master area
, ("M-l", sendMessage Expand) -- Expand the master area
-- dunstctl calls
-- , ("C-<Space>", spawn "dunstctl close")
, ("C-S-<Space>", spawn "dunstctl close-all")
, ("M-n p", spawn "dunstctl set-paused toggle")
]
viewProject :: WorkspaceId -> X ()
viewProject id = do
project <- lookupProject id
forM_ project switchProject
-- Borrowed from https://www.reddit.com/r/xmonad/comments/gzq316/how_can_i_centre_a_floating_window_without/fthtx29/
centerWindow :: Window -> X ()
@ -85,19 +103,23 @@ centerWindow win = do
windows $ W.float win (W.RationalRect ((1 - w) / 2) ((1 - h) / 2) w h)
return ()
viewProject :: WorkspaceId -> X ()
viewProject id = do
project <- lookupProject id
case project of
Just p -> switchProject p
Nothing -> return ()
promptConfig = def
{ position = Bottom
, alwaysHighlight = True
, borderColor = N.nord9
-- Normal
, bgColor = N.nord9
, fgColor = N.background
-- Selection
, bgHLight = N.nord6
, fgHLight = N.background
--
, bgColor = S.magenta
, bgHLight = S.base0
, borderColor = S.magenta
, defaultText = ""
, font = "xft:Iosevka Samae:style=Regular:size=8:charwidth=5"
, fgColor = S.base02
, fgHLight = S.base03
, font = "xft:Iosevka Samae:style=Regular:size=10:charwidth=6.5"
, height = 24
, promptBorderWidth = 5
-- Fuzzysearch by default

View File

@ -9,3 +9,4 @@ modify :: XConfig l -> XConfig l
modify conf = conf
{ logHook = logHook conf >> updatePointer (0.5,0.5) (0,0)
}

View File

@ -1,91 +0,0 @@
module Nord
( nord0
, nord1
, nord2
, nord3
, nord4
, nord5
, nord6
, nord7
, nord8
, nord9
, nord10
, nord11
, nord12
, nord13
, nord14
, nord15
, yellow
, orange
, red
, purple
, green
, background
, backgroundhl
, foreground
, foregroundhl
, foregroundll
) where
-- POLAR NIGHT
-- The origin color or the Polar Night palette.
nord0 = "#2E3440";
-- A brighter shade color based on nord0.
nord1 = "#3B4252";
-- An even more brighter shade color of nord0.
nord2 = "#434C5E";
-- The brightest shade color based on nord0.
nord3 = "#4C566A";
-- SNOW STORM
-- The origin color or the Snow Storm palette.
nord4 = "#D8DEE9";
-- A brighter shade color of nord4.
nord5 = "#E5E9F0";
-- The brightest shade color based on nord4.
nord6 = "#ECEFF4";
-- FROST
-- A calm and highly contrasted color reminiscent of frozen polar water.
nord7 = "#8FBCBB";
-- The bright and shiny primary accent color reminiscent of pure and clear ice.
nord8 = "#88C0D0";
-- A more darkened and less saturated color reminiscent of arctic waters.
nord9 = "#81A1C1";
-- A dark and intensive color reminiscent of the deep arctic ocean.
nord10 = "#5E81AC";
-- AURORA
-- RED
nord11 = "#BF616A";
-- ORANGE
nord12 = "#D08770";
-- YELLOW
nord13 = "#EBCB8B";
-- GREEN
nord14 = "#A3BE8C";
-- PURPLE
nord15 = "#B48EAD";
foregroundhl = nord6
foreground = nord5
foregroundll = nord4
backgroundhl = nord1
background = nord0
red = nord11
orange = nord12
yellow = nord13
green = nord14
purple = nord15

View File

@ -33,36 +33,23 @@ passGeneratePrompt :: XPConfig -> X ()
passGeneratePrompt _ = return () -- Not implemented
passPrompt :: XPConfig -> X ()
passPrompt = mkPassPrompt "Select password" selectPassword
passPrompt = mkPassPrompt "Select password" copyPassword
mkPassPrompt :: String -> (String -> X ()) -> XPConfig -> X ()
mkPassPrompt label f conf = do
-- I'm just sorting here, but could use some kind of fuzzy matching instead,
-- but it requires a bit more effort
-- I'm just sorting here, but could use some kind of fuzzy matching instead, but it requires a bit more effort
passwords <- sort <$> liftIO getPasswords
mkXPrompt (Pass label) conf (passComplFun passwords) f
-- Other change, use infixof instead of prefixof
mkXPrompt (Pass label) conf (\input -> pure (sortBy (compare `on` levenshtein input) . take 5 . filter (consumes input) $ passwords)) f
where
consumes [] _ = True -- everything consumed
consumes (_:_) [] = False -- all not consumed
consumes (a:xs) (a':ys) | a == a' = consumes xs ys
| otherwise = consumes (a:xs) ys
getPasswords = do
passwordStoreDir <- (</> "pass") <$> getHomeDirectory
files <- runProcessWithInput "find"
[ passwordStoreDir, "-type", "f", "-name", "*.gpg", "-printf"
, "%p\n"] []
files <- runProcessWithInput "find" [ passwordStoreDir, "-type", "f", "-name", "*.gpg", "-printf", "%p\n"] []
return . lines $ files
-- | Find all entries (`allPasses`) matching `input`
passComplFun :: [String] -> String -> IO [String]
passComplFun allPasses input = pure $
sortBy (compare `on` levenshtein input)
. take 10
. filter (consumes input)
$ allPasses
where
consumes [] _ = True -- everything consumed
consumes (_:_) [] = False -- all not consumed
consumes (a:xs) (a':ys) | a == a' = consumes xs ys
| otherwise = consumes (a:xs) ys
selectPassword :: String -> X ()
selectPassword pass = spawn $ "gpg --decrypt " ++ pass ++ " | copy"
-- “copy” comes with the xmonad module in the nix configuration
copyPassword :: String -> X ()
copyPassword pass = spawn $ "gpg --decrypt " ++ pass ++ " | copy"

View File

@ -6,135 +6,134 @@ import XMonad
import XMonad.Actions.DynamicProjects
import XMonad.Util.Run
term = "kitty"
spinTextEditorAndTerm :: String -> String -> Project
spinTextEditorAndTerm dir name =
Project { projectName = name
, projectDirectory = dir <> name
, projectStartHook = Just
$ safeSpawn "nvidia-offload" ["kitty","tmux","new","-A","-s",name]
}
spawnGuiTextEditor :: X ()
spawnGuiTextEditor = safeSpawn "neovide" []
spinChat :: String -> Project
spinChat name =
Project { projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg (name <> "-desktop")
}
singleTermAppWithName :: String -> String -> Project
singleTermAppWithName name app = Project
{ projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawn term ["zsh","-c",app]
}
spinInTermWithName :: String -> String -> Project
spinInTermWithName projectName cmd =
Project { projectName = projectName
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawn "kitty" [cmd]
}
singleAppWithName :: String -> String -> Project
singleAppWithName name app = Project
{ projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do spawn app
}
spinInTerm :: String -> Project
spinInTerm name = spinInTermWithName name name
singleApp :: String -> Project
singleApp app = singleAppWithName app app
justStart :: String -> Project
justStart name = justStartWithName name name
justStartWithName :: String -> String -> Project
justStartWithName name pgm =
Project { projectName = name
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg pgm
}
spinNotes :: Project
spinNotes =
Project { projectName = "notes"
, projectDirectory = "~/zk/org-roam/"
, projectStartHook = Just $ do safeSpawn "emacs" ["~/zk/org-roam/20240202124747-index.org"]
}
adminProject = spinTextEditorAndTerm "~/admin/"
candyProject = spinTextEditorAndTerm "~/candy/"
workProject = spinTextEditorAndTerm "~/relex/"
workAnsibleProject = spinTextEditorAndTerm "~/relex/ansible-roles/"
projects :: [Project]
projects =
[ singleApp "carla"
, singleApp "obs"
, singleApp "reaper"
, singleApp "renoise"
, singleApp "mixxx"
, singleAppWithName "Books" "calibre"
, singleAppWithName "discord" "Discord"
, singleAppWithName "matrix" "element-desktop"
, singleAppWithName "signal" "signal-desktop"
, singleAppWithName "vcv" "Rack"
, singleTermAppWithName "email" "neomutt"
, Project { projectName = "admin"
, projectDirectory = "~/admin/nixos-config"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "nixpkgs"
, projectDirectory = "~/admin/nixpkgs"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "overlays-personal"
, projectDirectory = "~/admin/overlays-personal"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "steam"
, projectDirectory = "/tmp"
, projectStartHook = Just $ safeSpawn "steam" ["-pipewire"]
}
, Project { projectName = "youtube"
, projectDirectory = "/tmp"
, projectStartHook = Just $ safeSpawn "chromium"
["--app=youtube.com"
,"--incognito"]
}
, Project { projectName = "cdc-config"
, projectDirectory = "~/admin/cdc-config"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "saehkoepoika-config"
, projectDirectory = "~/admin/saehkoepoika-configuration-nix"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "cdc-documentation"
, projectDirectory = "~/admin/cdc-documentation"
, projectStartHook = Just $ do
safeSpawnProg term
spawnGuiTextEditor
}
, Project { projectName = "adventOfCode"
, projectDirectory = "~/candy/adventofcode"
, projectStartHook = Just $ do
safeSpawnProg term
spawnGuiTextEditor
}
, Project { projectName = "rukokuoppa"
, projectDirectory = "~/candy/rukokuoppa"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "notes"
, projectDirectory = "~/zk/org-roam-private"
, projectStartHook = Just $ safeSpawn "emacs" ["~/zk/org-roam-private"]
}
, Project { projectName = "groceries"
, projectDirectory = "/tmp"
, projectStartHook = Just $ safeSpawnProg "obsidian"
}
, Project { projectName = "xmonad"
, projectDirectory = "~/.xmonad"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "waymonad"
, projectDirectory = "~/candy/waymonad"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "accounting"
, projectDirectory = "~/accounting"
, projectStartHook = Just $ do safeSpawnProg term
}
, Project { projectName = "arrangements"
, projectDirectory = "~/candy/Arrangements"
, projectStartHook = Just $ do spawnGuiTextEditor
safeSpawnProg term
}
, Project { projectName = "flim"
, projectDirectory = "/flims/rtorrent/download"
, projectStartHook = Just $ do safeSpawnProg term
}
, Project { projectName = "sound"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "pavucontrol"
}
, Project { projectName = "web"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do spawn "firefox"
}
]
projects = [ adminProject "wrk-config"
, adminProject "cdc-config"
, adminProject "overlays-personal"
, candyProject "adventofcode"
, candyProject "dhall-packages"
, candyProject "hfdb"
, justStartWithName "fre" "ff-perso"
, justStartWithName "frs" "ff-relex"
, justStartWithName "chat" "slack"
, justStartWithName "meet" "chromium"
, spinNotes
, justStartWithName "VPN" "gpclient"
, spinChat "element"
, spinChat "signal"
, spinInTerm "k9s"
, spinInTermWithName "email" "neomutt"
, spinTextEditorAndTerm "~/." "xmonad" -- Dark magic!
, workProject "azure-kube-platform"
, workProject "azure-kube-platform-environments"
, workProject "calculation-node-playbook"
, workProject "communication-nix-101"
, workProject "communication-nix-102"
, workProject "communication-nix-103"
, workProject "cooper"
, workProject "crebain"
, workProject "customer-configs"
, workProject "customer-modules"
, workProject "docker-images"
, workProject "fangorn"
, workProject "gitlab-runners"
, workProject "gitlab-self-manage"
, workProject "infra-inventory"
, workProject "isengard"
, workProject "isengard-2"
, workProject "isengard-3"
, workProject "jirawiz"
, workAnsibleProject "java"
, workProject "morannon"
, workProject "mordor-ca"
, workProject "mordor-deploy"
, workProject "mordor-interview"
, workProject "mordor-nixpkgs"
, workProject "mordor-ops"
, workProject "mordor-the-repo"
, workProject "mordorbooks"
, workProject "moria"
, workProject "muir"
, workProject "nix"
, workProject "nix-ansible-role"
, workProject "nixos-modules"
, workProject "nixpkgs"
, workProject "one-off-scripts"
, workProject "pck-access"
, workProject "planning-cloud"
, workProject "rfcs"
, workProject "runner-tests"
, workProject "slog-agent"
, workProject "sm-terraform"
, workProject "tech-radar"
, workProject "time-tracking"
, workProject "ugluk-ansible-role"
, workProject "unified-application-gateway"
, Project { projectName = "minecraft"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do safeSpawnProg "minecraft-launcher"
safeSpawnProg "mumble"
}
, Project { projectName = "status"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do
safeSpawn "nvidia-offload" ["kitty","gotop"]
}
, Project { projectName = "sound"
, projectDirectory = "/tmp"
, projectStartHook = Just $ do
safeSpawn "pw-jack" ["patchage"]
safeSpawnProg "easyeffects"
}
]
modify :: XConfig l -> XConfig l
modify conf = dynamicProjects projects conf
{ workspaces = [] }

View File

@ -16,7 +16,7 @@ modify conf = conf
}
pads =
[ NS "htop" "kitty --title htop tmux" (title =? "htop")
[ NS "htop" "nvidia-offload kitty --title htop tmux" (title =? "htop")
(customFloating $ W.RationalRect (1/3) (1/3) (1/3) (1/3))
-- , NS "stardict" "stardict" (className =? "Stardict")
-- (customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3))

21
lib/ScreenEvents.hs Normal file
View File

@ -0,0 +1,21 @@
module ScreenEvents (
ScreenEvents.modify
) where
import XMonad
import Data.Monoid (All(..))
import XMonad.Hooks.Rescreen
-- screenChangeHandler :: Event -> X All
-- screenChangeHandler (RRScreenChangeNotifyEvent _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) = do
-- spawn "touch /tmp/xmonad-WAAAAAT"
-- spawn "/home/e/.fehbg"
-- return (All True)
-- screenChangeHandler _ = return (All True)
modify :: XConfig l -> XConfig l
modify = addAfterRescreenHook afterRescreen
afterRescreen :: X ()
afterRescreen = spawn "/home/e/.fehbg"

View File

@ -20,8 +20,33 @@ module Solarized
, foreground
, foregroundhl
, foregroundll
, theme
) where
import XMonad.Layout.Decoration (Theme(..))
theme :: Theme
theme =
Theme { activeColor = violet
, inactiveColor = base03
, urgentColor = red
, activeBorderColor = violet
, inactiveBorderColor = base03
, urgentBorderColor = red
, activeBorderWidth = 1
, inactiveBorderWidth = 1
, urgentBorderWidth = 1
, activeTextColor = base03
, inactiveTextColor = base02
, urgentTextColor = red
, fontName = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
, decoWidth = 200
, decoHeight = 15
, windowTitleAddons = []
, windowTitleIcons = []
}
base03 = "#002b36"
base02 = "#073642"
base01 = "#586e75"

View File

@ -6,7 +6,7 @@ module StatusBar (
import Data.List
import Data.Monoid
import Nord as N
import Solarized as S
import XMonad.Core
import XMonad.Hooks.DynamicBars (dynStatusBarStartup,dynStatusBarEventHook,multiPP)
import XMonad.Hooks.DynamicLog
@ -31,24 +31,24 @@ runXmobar :: ScreenId -> IO Handle
runXmobar (S id) = spawnPipe
$ "/run/current-system/sw/bin/xmobar --screen="
<> show id
<> " /home/eeva/.xmonad/xmobarrc"
<> " /home/e/.xmonad/xmobarrc"
killXmobar :: IO ()
-- killXmobar = spawn "/run/current-system/sw/bin/pkill xmobar"
killXmobar = return ()
otherPP = currentPP
{ ppCurrent = xmobarColor N.foreground N.background
, ppVisible = xmobarColor N.foreground N.background
, ppHidden = xmobarColor N.foreground N.background
, ppHiddenNoWindows = xmobarColor N.backgroundhl N.background
{ ppCurrent = xmobarColor S.foreground S.background
, ppVisible = xmobarColor S.foreground S.background
, ppHidden = xmobarColor S.foreground S.background
, ppHiddenNoWindows = xmobarColor S.backgroundhl S.background
}
currentPP = def
{ ppCurrent = xmobarColor' N.orange
, ppVisible = xmobarColor' N.yellow -- other screen
, ppHidden = xmobarColor' N.foreground -- other workspaces with windows
, ppHiddenNoWindows = xmobarColor' N.foregroundll -- other workspaces
{ ppCurrent = xmobarColor' S.orange
, ppVisible = xmobarColor' S.yellow -- other screen
, ppHidden = xmobarColor' S.foreground -- other workspaces with windows
, ppHiddenNoWindows = xmobarColor' S.foregroundll -- other workspaces
, ppSep = " "
, ppWsSep = " "
, ppLayout = printLayout

View File

@ -11,7 +11,5 @@ let
in
mkShell {
buildInputs = [
easy-hls
];
buildInputs = [ easy-hls ];
}

View File

@ -1,36 +0,0 @@
cabal-version: >=1.10
name: xmonad-config
version: 0.11.0.0
-- synopsis:
-- description:
-- bug-reports:
license: AGPL-3.0-or-later
author: EEva (JPotier)
maintainer: jpo.contributes.to.nixos@marvid.fr
-- copyright:
-- category:
build-type: Simple
extra-source-files: CHANGELOG.md
executable xmonad
main-is: xmonad.hs
other-modules: KeyBindings
, MouseBindings
, Nord
, Password
, Projects
, Scratchpad
-- other-extensions:
build-depends: base
, X11
, directory
, filepath
, mtl
, unix
, xmonad
, xmonad-contrib
, xmonad-extras
hs-source-dirs: .
, lib
default-language: Haskell2010

View File

@ -8,63 +8,76 @@ import XMonad
import XMonad.Actions.DynamicProjects
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
--import XMonad.Hooks.EwmhDesktops (ewmh, ewmhFullscreen)
import XMonad.Hooks.EwmhDesktops (ewmh)
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.NoBorders (noBorders, smartBorders, hasBorder, BorderMessage (HasBorder))
import XMonad.Layout.NoBorders (noBorders, smartBorders)
import XMonad.Layout.NoFrillsDecoration
import XMonad.Layout.PerScreen
import XMonad.Layout.Reflect
import XMonad.Layout.ResizableTile (ResizableTall(..))
import XMonad.Layout.Spacing
import XMonad.Layout.ThreeColumns (ThreeCol(..))
import XMonad.Layout.ToggleLayouts (toggleLayouts)
import XMonad.StackSet (sink)
import XMonad.Util.EZConfig
import qualified Nord as N
import qualified XMonad.Layout.Spacing as SS (Border(..))
import XMonad.Util.SpawnOnce
import qualified Solarized as S
-- Tidy modules
import KeyBindings as Keys (modify)
import MouseBindings as Mouse (modify)
import Projects (modify)
import Scratchpad (modify)
import ScreenEvents (modify)
--------- toggle btw vvvvvvvvvv or vvvvv
-------------------- toggle btw vvvvvvvvvv or vvvvv
--layouts = titleBar $ toggleLayouts fullscreen tiled
layouts = toggleLayouts fullscreen tiled
where
smallBorder = SS.Border 5 5 5 5
fullscreen = noBorders Full
tiled = smarts $ resizableTall ||| Mirror resizableTall
smarts = spacingRaw True smallBorder True smallBorder True . smartBorders
resizableTall = ResizableTall 1 (5/100) (1/2) []
fullscreen = (noBorders Full)
tiled = smarts $ ifWider (1920 + 1) wideScreen normalScreen
wideScreen = ThreeColMid 1 (5/100) (1/2)
normalScreen = ResizableTall 1 (5/100) (1/2) []
smarts = (smartSpacingWithEdge 5) . smartBorders
--titleBar = noFrillsDeco shrinkText S.theme
-- Use the `xprop' tool to get the info you need for these matches.
-- For className, use the second value that xprop gives you.
-------------- Here be the law of windows
myManageHook = composeAll
[ className =? "Patchage" --> doShift "patchage"
, className =? "Pavucontrol" --> doShift "music"
, className =? "Pinentry" --> doCenterFloat
, className =? "REAPER" --> hasBorder False
, className =? "Renoise" --> hasBorder False
, className =? "steam" --> doShift "steam"
, className =? "steamwebhelper" --> doShift "steam"
, className =? "cs2" --> doShift "steam"
, isDialog --> doCenterFloat
myManageHook = composeOne
[ className =? "Gcr-prompter" -?> doCenterFloat
, className =? "Pavucontrol" -?> doShift "music"
, className =? "Pinentry" -?> doFloat
, className =? "VirtualBox" -?> doFloat
, className =? "gpclient" -?> doTile <+> (doShift "VPN")
, className =? "mpv" -?> doFullFloat <+> (doShift "flims")
, className =? "qemu-system-x86_64" -?> doFloat
, className =? "qutebrowser" -?> doShift "web"
, isDialog -?> doCenterFloat
-- Move transient windows to their parent:
, transience'
, transience
]
doTile :: ManageHook
doTile = ask >>= doF . sink
------------ build the full config
withConfig =
ewmh
$ Projects.modify -- Apply projects config
$ Keys.modify -- Apply keybindings config
$ Mouse.modify -- Apply mouse bindings config
$ Scratchpad.modify -- Apply scratchpad managehook config
$ desktopConfig -- on a default desktop config
{ manageHook = myManageHook
Projects.modify -- Apply projects config
$ Keys.modify -- Apply keybindings config
$ Mouse.modify -- Apply mouse bindings config
$ Scratchpad.modify -- Apply scratchpad managehook config
$ ScreenEvents.modify -- Apply screen event hook config
$ desktopConfig -- on a default desktop config
{ manageHook = myManageHook <+> manageHook desktopConfig
, layoutHook = desktopLayoutModifiers layouts
, terminal = "kitty"
, normalBorderColor = N.backgroundhl
, focusedBorderColor = N.nord9
, startupHook = spawnOnce "sh /home/e/.fehbg"
, terminal = "nvidia-offload kitty"
, normalBorderColor = S.base03
, focusedBorderColor = S.green
, borderWidth = 5
}